今天给大家分享一些移动端(Android)开发学习后端开发(Java Web)的一些事儿,不知道从什么时候开始身边的同事都开始陆陆续续的在朋友圈发一些后端的文章如:Nginx、Docker、k8s类的知识,后来才发现大家都在学习一些后端的开发工作,可能是感觉移动端技术有些腻了了吧,需要有些突破了!
甚至还有个iOS同事有在业余时间学习Java、Servlet、Spring等后端知识,这让我深有感触我在学校期间也学过Java Web的知识后来因为Android能够做一些界面元素好玩,容易带来成就感,再加上当时的Android真是火到天际。现在如果有人问我为什么要从事移动端开发,我一般都会回答:“误入歧途”,当然这也有些自嘲,开玩笑的成份。
大概在16年的时候,我就有意无意的在开始自己学习后端知识了,那时候我的工作主要还是做App,偶尔学习下后端知识,可惜的是当时工作的单位后端是用的Python技术栈,由于当时我比较钟情于Java,所有没有学习Python~~。
到了18年,我入职一家二线互联网公司还是做Android开发工作,当前公司正处于业务高速发展期扩张很快,当然变化也有多。当时就感觉移动端的开发人员在各种技术会议上时很低迷,基本很少发表意见,举个例子:
改就改吧又没有做到统一标准,像这样的改动做为移动端开发,完全可以怼回去才是的啊!虽然改起来是小事,但也说明了一个问题:移动端开发话语权真的挺低的,怼又怼不过人家~~。
再说另外一个故事,我们组来了位移动端技术专家,和我们聊了很久,其中有个问题让印象深刻:移动端为什么很少有架构师这个职业?当时我一听感觉确实是的,很少有公司会招移动端架构师,移动端开发并不像后端开发那样久远,它的发展也是由Android、iOS的出现才兴起的,也没有什么高并发、高可用之类的术语,移动端关注的更多的是界面、用户体验方面的问题。那一天聊了很久,从那一次我得出一个结论:作为移动端开发,很难做到技术大佬级别(相比较后端开发)。毕竟现在的互联网都是是数据、业务为主的,一个经验丰富移动端开发工程师,没写过业务,也没有大数据处理经验想要成为技术Leader、CTO、技术VP太难呢!
为什么要学习后端呢?
现在大部分公司都是业务驱动型公司,就是业务为主,技术为辅。而且公司的业务都会放在后端,跟Web前端、移动端关系不大,移动端只做数据的收集与展示不会参与复杂业务逻辑流程,所以说:精华其实都在后端。
举个例子,如果你们公司的App日活达到百万级别,说明App兼容性、适配、用户体验、各项关键指标优化的非常好,而支撑这日活百万的关键性技术还是在后端,所以要不要考虑学习下后端呢~~。
我是怎么学Java后端的?
可能我是比较幸运,在年初时和朋友合作了一个20w的外包项目,我主要负责后端的开发和架构。这个项目对我来说还是挺大的,之前的我都是负责一些App的设计和开发工作这次做后端的开发,多少有点生疏。
当时搞这个项目,客户是说需要千万级的用户,那时的我也没有千万级的概念,只觉得用微服务应该是可以顶的住,一开始是使用的单服务、单数据库的形式,后面面临分布式问题改为多服务、单数据库的形式还缓了缓这个问题,这也算业界难题当时还考虑过2PC、seate、RabbitMQ那时候没时间、人力就没有继续弄了(好机智~~),后面也陆陆续续的解决了一些碰到的一些问题如:
- 微服务工程的组织(单服务单仓库 or 多服务单仓库)
- 项目工程依赖管理(Maven parent工程)
- Docker本地调试(阿里云vpn)
- Dubbo服务接口仓库(Nexus仓库)
- ...
现在只能想起来这么多了,实际碰到问题比这个更多!所幸是都一一解决掉了,历时2个月左右这个项目也正常上线了,不过后面也出现过一些问题如:机器cpu负载一直在90%以上,那一天我排查了很久,因为基础设施不全只能通过看日志来排查,最后发现是有在刷任务,一直在频繁访问某个接口,发现问题后就及时学习了限流方面的知识,在网关做了个限流,cpu才稳定下来。
再有一次是因为技术方案的问题,这个项目有一个无限级的推广,当时选的方案是嵌套集因为他查询起来很快,但是我们忽略了他修改代价实在是太高,导致系统用户到20w的时候推广关系插入变的超级慢,后来就不得不重新选一个方案用的:闭包表插入、查询效率都可以,只是有些费空间。后面花了大概两天的时候才把数据修复过来(一口老血~~)。
总的来说不会的就学习、问朋友,记忆比较深刻的是一次数据库一直95%以上,学的Java知识较多,对数据库算是了解还不多那时候,找了一天也没找出个问题,最后还是问朋友原来是没加索引查数据都是全表扫描,现在想想真是无语,后来朋友还开玩笑说后续咨询要收费了,哈哈。
最后回顾下,我学过的一些Java后端知识:
- Servlet API
- Spring全家筒
- Spring Framework
- Spring Boot
- Spring Web
- Spring Security
- Spring Data JPA
- Spring Cloud
- ...
- Mysql
- Redis
- JWT Token
- Maven
- Tomcat
- Mybatis
- Nginx
- ...
不能再多了,实际上好多技术我是学习过,但是没有实际使用过(难受~~)!!
欢迎关注微信公众号《架构文摘》,精品技术文章第一时间推送。