五年老Android,我决定转后端开发了!
今天给大家分享一些移动端(Android)开发学习后端开发(Java Web)的一些事儿,不知道从什么时候开始身边的同事都开始陆陆续续的在朋友圈发一些后端的文章如:Nginx、Docker、k8s类的知识,后来才发现大家都在学习一些后端的开发工作,可能是感觉移动端技术有些腻了了吧,需要有些突破了!
甚至还有个iOS同事有在业余时间学习Java、Servlet、Spring等后端知识,这让我深有感触我在学校期间也学过Java Web的知识后来因为Android能够做一些界面元素好玩,容易带来成就感,再加上当时的Android真是火到天际。现在如果有人问我为什么要从事移动端开发,我一般都会回答:“误入歧途”,当然这也有些自嘲,开玩笑的成份。
大概在16年的时候,我就有意无意的在开始自己学习后端知识了,那时候我的工作主要还是做App,偶尔学习下后端知识,可惜的是当时工作的单位后端是用的Python技术栈,由于当时我比较钟情于Java,所有没有学习Python~~。
到了18年,我入职一家二线互联网公司还是做Android开发工作,当前公司正处于业务高速发展期扩张很快,当然变化也有多。当时就感觉移动端的开发人员在各种技术会议上时很低迷,基本很少发表意见,举个例子:
一开始移动端时间类型使用的是int,后面一哥们改为long,再后来一技术专家要求改为字符串说是:便于后端阅读!这也可以理解关键是移动端还得兼容int、long、字符串型的时间。
改就改吧又没有做到统一标准,像这样的改动做为移动端开发,完全可以怼回去才是的啊!虽然改起来是小事,但也说明了一个问题:移动端开发话语权真的挺低的,怼又怼不过人家~~。
再说另外一个故事,我们组来了位移动端技术专家,和我们聊了很久,其中有个问题让印象深刻:移动端为什么很少有架构师这个职业?当时我一听感觉确实是的,很少有公司会招移动端架构师,移动端开发并不像后端开发那样久远,它的发展也是由Android、iOS的出现才兴起的,也没有什么高并发、高可用之类的术语,移动端关注的更多的是界面、用户体验方面的问题。那一天聊了很久,从那一次我得出一个结论:作为移动端开发,很难做到技术大佬级别(相比较后端开发)。毕竟现在的互联网都是是数据、业务为主的,一个经验丰富移动端开发工程师,没写过业务,也没有大数据处理经验想要成为技术Leader、CTO、技术VP太难呢!
为什么要学习后端呢?
现在大部分公司都是业务驱动型公司,就是业务为主,技术为辅。而且公司的业务都会放在后端,跟Web前端、移动端关系不大,移动端只做数据的收集与展示不会参与复杂业务逻辑流程,所以说:精华其实都在后端。
举个例子,如果你们公司的App日活达到百万级别,说明App兼容性、适配、用户体验、各项关键指标优化的非常好,而支撑这日活百万的关键性技术还是在后端,所以要不要考虑学习下后端呢~~。
你说你要会点后端知识,再跟后端小哥来个结对编程,那效率高的不要不要的,一个眼神就懂(今晚跟你妈说学Java~~)!
我是怎么学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
- ...
不能再多了,实际上好多技术我是学习过,但是没有实际使用过(难受~~)!!
欢迎关注微信公众号《架构文摘》,精品技术文章第一时间推送。
五年老Android,我决定转后端开发了!的更多相关文章
- 40k*16 薪,五年Android开发4轮面试拿下腾讯 Offer !(附真题)
概述 感觉毕业后时间过得真快啊,从16年6月本科毕业入职了一家不大的公司,到现在快五年了,前段时间金三银四想着找一个新的工作,前前后后花了一个多月的时间复习以及面试,前几天拿到了腾讯的offer,想把 ...
- 大学同学做Java开发比我多5K,八年老Android只会crud该转Java吗?
最近在网上看到这样一个帖子: 做了八年Android开发,感觉这块做着也挺没意思,日常工作就是做一些架构优化,质量数据监控,改一改构建脚本,最主要的是业务负责人没有一个是做客户端的,都是后端的人. 最 ...
- Android IOS WebRTC 音视频开发总结(八十五)-- 使用WebRTC广播网络摄像头视频(下)
本文主要介绍WebRTC (我们翻译和整理的,译者:weizhenwei,校验:blacker),最早发表在[编风网] 支持原创,转载必须注明出处,欢迎关注我的微信公众号blacker(微信ID:bl ...
- Android IOS WebRTC 音视频开发总结(八十三)-- 使用WebRTC广播网络摄像头视频(上)
本文主要介绍WebRTC (我们翻译和整理的,译者:weizhenwei,校验:blacker),最早发表在[编风网] 支持原创,转载必须注明出处,欢迎关注我的微信公众号blacker(微信ID:bl ...
- Python后端开发要求
关于Python后端开发要求 一.对Python有兴趣,熟悉Python(标准库) 最好阅读过源码 了解Python的优化(熟悉pypy更佳) 二.至少至少一门语言(不说"精通") ...
- 从壹开始前后端分离 [ Vue2.0+.NET Core2.1] 十四 ║ VUE 计划书 & 我的前后端开发简史
---新内容开始--- 番外 大家周一好呀,又是元气满满的一个周一呀!感谢大家在周一这个着急改Bug的黄金时期,抽出时间来看我的博文哈哈哈,时间真快,已经到第十四篇博文了,也很顺顺(跌跌)利利 (撞撞 ...
- Java后端开发奋斗之路
本人方向:Java后端开发方向,本文中内容持续更新中 Java技术栈:https://www.cnblogs.com/wyb666/p/10222070.html 推荐书籍:<程序员代码面试指南 ...
- (译)Windows Azure:移动后端开发的主要更新
Windows Azure:移动后端开发的主要更新 这周我们给Windows Azure释出了一些很棒的更新,让云上的移动应用开发明显的简单了.这 些新功能包括: 移动服务:定制API支持移动服务:G ...
- app后端开发系列文章文件夹
一点废话 每个程序猿心中,都有一个大牛梦.我们在晨曦之光中敲击着代码,在寒冬覆雪中思考着0与1. 夏练三伏 冬练三九这说的就是我们这群[江湖]中人.在这里我们门派林立,C语言派历史悠久,在程序界就是嵩 ...
随机推荐
- 设计模式(十二)Decorator模式
Decorator模式就是不断地为对象添加装饰的设计模式.以蛋糕为例,程序中的对象就相当于蛋糕,然后像不断地装饰蛋糕一样地不断地对其增加功能,它就变成了使用目的更加明确的对象. 首先看示例程序的类图. ...
- django-模板之include标签(十五)
就是将一些常用的html代码分离出来,使其可以重复利用,减少代码量 index.html <!DOCTYPE html> <html lang="en"> ...
- css四种基本选择器
css选择器是什么? 要使用css对HTML页面中的元素实现一对一,一对多或者多对一的控制,这就需要用到CSS选择器. HTML页面中的元素就是通过CSS选择器进行控制的. CSS选择器:就是指定CS ...
- MySQL数据库的安装与配置(windows)
MySQL是目前最为流行的开放源码的数据库,是完全网络化的跨平台的关系型数据库系统,它是由瑞典MySQLAB公司开发,目前属于Oracle公司.任何人都能从Internet下载MySQL软件,而无需支 ...
- ubuntu 制作本地yum仓库
ubuntu 制作本地yum仓库 笔者: 张首富 W X: y18163201(请备注) qq群:895291458 时间:2019-01-31晚 今天到某银行进行软件部署的时候,碰到所有电脑都不允许 ...
- 前端技术之:如何在Vue中使用clipboard.js复制服务端数据
第一步 创建点击对象页面元素,并绑定业务数据. <el-button type="text" size="mini" class="copy-b ...
- 【JAVA】可视化计算器
import java.awt.Color; import java.awt.Font; import java.awt.GridLayout; import java.awt.event.Actio ...
- 优化 Git Commit Message
目前很多项目都是通过 Git 进行管理的,Git 每次提交代码的过程中 提交说明 commit message 是必须的.但仅仅必须是不够的,好的提交说明可以帮助我们提高项目的整体质量. 作用与优点 ...
- TypeError: expected string or bytes-like object
在写Python代码的时候,遇到了"TypeError: a bytes-like object is required, not 'str'"错误,此处实验机器的Python环境 ...
- Fiddler 原理及iPhone的配置
原理: 首先Fiddler运行在自己的PC上,Fiddler运行的时候会在PC的8888端口开启一个代理服务,这个服务实际上是一个HTTP/HTTPS的代理. 确保手机和PC在同一个局域网内,我们可以 ...