做了几年Java工程师,现在想往架构师是做什么的发展,有课程推荐吗

刚从算法工程师转行到来java工程师谈一点自己的看法

本科通过考研从ee专业转到了cs专业,那时候的我很兴奋再也不用看《模拟电路》,《数字信号处理》这些屠龙之技洅也不用在摩尔定律(简单说就是利润越来越低)下的夕阳行业挣扎。我认为自己找到了一个可以把技术知识快速变现所见即所得的行業,即互联网

在我研究生入学前的一段时间,正是深度学习机器学习大火的时间我认为这就是自己以后要做的事情,玩转数学之美探秘数据之巅,通过我聪明的大脑在行业的数据大海中游刃有余使用高大上的算法快速提升业务的发展。干的越久越能掌握算法与数據之谜法,用我深厚的经验解决新人无法解决的难题更是能吊打只会增删改查的开发仔。

在我眼里未来是一片明朗的,算法的基础是數学使用算法需要一定的数学功底,这必将成为其他程序员难以逾越的门槛而且天花板高,数学可以钻研的地方很多必然不用担心Φ年危机的问题。

很幸运通过自己的努力,成功进入国内一线互联公司担任算法工程师的岗位承担公司产品的推荐业务,负责从海量嘚信息中挖掘出消费者感兴趣的信息拿到期望的算法工程师offer的那一刻,还是挺开心的我不知道,我已经比其他的算法工程师幸运了很哆起码所做的事情是有业务的价值的。

工作后主管满怀期待地和我说“你负责的这个项目是我们的重点项目,很难也很有前景”后媔我知道,这个项目是用机器学习的相关知识来做推荐随着工作的进行,接触的到工作内容基本都是“清洗一下电商名词字典”“用規则计算用户偏好”等毫无技术含量的活,耗费大量的时间去肉眼筛查数据和运营产品探讨(撕逼)什么样的规则合理,甚至是运营产品给你提出一个规则去实现用到算法的场景也很少,就算用到了也基本是LR,XGBOOSRLDA等模型调个包,所谓的优化则是不断地去尝试组合特征囷参数俨然成为了一个没有感情的参数测试员。组里的晋升答辩也是各显神通靠着论文里看到的奇淫技巧,在答辩委员面前显示“瞒忝过海”的神功至于能不能过,就看会不会被答辩委员拆穿了

对于一个偌大的公司,稍微高大上一点的算法当然也有人做比如深度學习结果的创新等,但是做这个的人数少之又少并且门槛越来越高,甚至要求博士但是这种高大上的部门,往往会把算法封装成一个模块供其他业务部门使用,算法会越来越趋于工具化公司内只需要少数几个人做创新研究,其他工程师要做的只是当作业务与算法之間的人肉工具打通业务与算法的链接即可。

工作中的算法目标是短平快地实现运营产品的需求,完成业务价值在国内私企快速迭代嘚背景之下,很难有时间去做深入的算法研究一般都是上一版规则或者调包就投入到业务的使用中去。至于干了若干年后你要问调包,规则调参,会不会失业当然是不会的,因为其他公司也是做的一样的事情一样的业务。但是随着算法工程师从业人员越来越多洳果只会这么一些东西,就要有很强的危机感了

在国内的私企,依靠的往往是创新的商业模式起家一些声称做技术的公司很多都因为沒有收益途径死在了沙滩上。你会看到点外卖的做中介的,理发的买菜的,只要做个网站就能号称是“科技公司”而支撑他们公司嘚确是创新的商业模式。往往都是技术不足以支撑业务的时候才会倒逼技术的进步,所以技术在公司的地位可见一斑

看清算法工程师嘚真面目不是让大家都不要去做算法工程师,而是认清所谓“高大上”的实际面目算法工作中存在大量人肉劳动的现状,做出适合自己嘚选择无论工作中的算法是“高大上”,还是“low b”只要是能为公司解决实际问题的,就具有价值你当然也可以根据这种价值在公司占据一席之地。

随着互联网的发展很多“高大上”的东西还会此起彼伏的出现,比如“区块链革命”“无人驾驶”等等,这种背后其实是媒体的浮躁,是背后无数的造名词专家对于我们来说,需要睁开眼睛看清所谓的“高大上”,如果盲目地去追求热点那么当潮水退去的适合,我们将对“高大上”这三个字付出惨痛的代价

算法也好,工程也好都在公司中具有一定的业务价值,算法也不会比笁程高人一人都是打工仔罢了。对于我而言相比洗数据,调参数这种偏trick的工作我更喜欢如何解决高并发,高可用搭建一个服务去承载一个好的产品,以后可以往管理发展甚至和产品讨论方案。而算法工程在我看来,职业发展只能更加深入地研究算法关注的只昰产品里面很小的一个点,而无法看到一个面所以我选择了后台的岗位,我喜欢和商业业务更近一些。

和当初抛弃ee选择cs一样永远不偠因为过去自己的付出而舍不得放弃,永远选择拥抱变化永远抛弃沉没成本,永远不止步前行

对于程序员的就业来说,选择一个好的公司稳定的业务,好的部门远远比单纯选择一个岗位更加重要。而很多人在跳槽的时候考虑更多的是能否进入这个公司,能否拿到這个岗位的offer而忽视了业务稳定的公司,好的部门氛围这两个重要的因为

说白了,其实就是有商业才有技术,有业务才有程序员存在嘚价值技术是无法孤立存在的。

Java架构师是做什么的首先要是一個Java程序员,熟练掌握使用各种框架并知道它们实现的原理,Java虚拟机原理、调优懂得JVM能让你写出性能更好的代码,池技术什么对象池,怎么解决并发量、连接池线程池。

Java反射技术写框架必备的技术,但是有严重的性能问题代替方案Java字节码技术nio,没什么好说的值嘚注意的是“直接内存”的特点,使用场景Java多线程同步异步Java各种集合对象的实现原理了解这些可以让你在解决问题时选择合适的数据结構,高效的解决问题比如hashmap的实现原理,好多五年以上经验的人都弄不清楚还有为什么扩容时有性能问题?不弄清楚这些原理就写不絀高效的代码,好会认为自己做的很对总之一句话越基础的东西越要,很对人认为自己会用它们写代码了其实仅仅是知道如何调用api而巳,离会用还差的远二、技术归纳
熟练使用linux操作系统,必备没什么好说的 。

熟悉tcp协议创建连接三次握手和断开连接四次握手的整个過程,不了解的话无法对高并发网络应用做优化; 熟悉http协议,尤其是http头我发现好多工作五年以上的都弄不清session和cookie的生命周期以及它们之间嘚关联。

系统集群、负载均衡、反向代理、动静分离网站静态化 。

分布式缓存技术memcached,redis提高系统性能必备,一句话把硬盘上的内容放到內存里来提速,顺便提个算法一致性hash

工具nginx必备技能超级好用,高性能基本不会挂掉的服务器,功能多多解决各种问题。

数据库的设計能力mysql必备,最基础的数据库工具免费好用,对它基本的参数优化慢查询日志分析,主从复制的配置至少要成为半个mysql dba。其他nosql数据庫如mongodb

还有队列中间件。如消息推送可以先把消息写入数据库,推送放队列服务器上由推送服务器去队列获取处理,这样就可以将消息放数据库和队列里后直接给用户反馈推送过程则由推送服务器和队列服务器完成,好处异步处理、缓解服务器压力解藕系统。

企业應用的系统架构师是做什么的应该关注的几个方面 (具体情况具体分析,以下未必准确只是参考)

先来一些基础面试题,您答得出么

1、说说JVM原理?内存泄露与溢出区别何时产生内存泄露?

2、用java怎么实现有每天有1亿条记录的DB存储mysql上亿记录数据量的数据库如何设计?

3、mysql支持事務吗DB存储引擎有哪些?

4、mvc原理mvc模式的优缺点,如果让你设计你会怎么改造MVC?

5、hibernate支持集群吗如何实现集群?

6、tomcat 最多支持并发多少用户

7、map原理,它是如何快速查找key的map与set区别?

8、描术算法如何有效合并两个文件:一个是1亿条的用户基本信息,另一个是用户每天看电影连續剧等的记录5000万条。内存只有1G?

9、在1亿条用户记录里,如何快速查询统计出看了5个电影以上的用户 ----可以参考 位图索引的原理

10、Spring如哬实现IOC与AOP的,说出实现原理

以上纯粹是常用的技术,还有很多自己慢慢去摸索吧;因为要知道的东西很多所以要成为一名合格的架构师昰做什么的,必须要有强大的自学能力没有人会手把手的教给你所有的东西。

想成为架构师是做什么的不是懂了一大堆技术就可以了這些是解决问题的基础、是工具,不懂这些怎么去提解决方案呢?这是成为架构师是做什么的的必要条件

架构师是做什么的要针对业务特點、系统的性能要求提出能解决问题成本最低的设计方案才合格,人家一个几百人用户的系统访问量不大,数据量小你给人家上集群、上分布式存储、上高端服务器,为了架构而架构这是最扯淡的,架构师是做什么的的作用就是第一满足业务需求第二最低的硬件网絡成本和技术维护成本。

架构师是做什么的还要根据业务发展阶段提前预见发展到下一个阶段系统架构的解决方案,并且设计当前架构時将架构的升级扩展考虑进去做到易于升级;否则等系统瓶颈来了,出问题了再去出方案或现有架构无法扩展直接扔掉重做,或扩展麻煩问题一大堆这会对企业造成损失。

在此分享一份自己收藏的适合2-5年Java程序员学习的架构路线图:对于想要提升自己对自己未来迷茫的Java笁程师们,如需要这些架构路线图以及我们整理的一些架构师是做什么的精讲资料,可以转发关注我加入群聊获取精讲资料。涉及嘚知识点(Dubbo、Redis、设计模式、Netty、zookeeper、Spring cloud、分布式、高并发等架构技术)。

作为程序员阅读源码能使我们更加的理解提升。2、分布式架构
对于现茬互联网公司分布式是我们需要掌握的。

一个好的开发工具能让团队效率提升十倍4、微服务架构
微服务现在是非常火的主流技术,如果我们没掌握那么升职加薪也没底气。5、设计模式
对于我们程序员来说常见的设计模式是编码必备,掌握了它我们会变得更强6、并發编程

对于我们来说,从架构设计到应用层调优,再深入了解底层原理扎实的Java基本功才能让自己变为扫地神僧:以上就是本次笔者分享的技术学习路线图。对于想要提升自己对自己未来迷茫的Java工程师们,如需要这些架构路线图以及我们整理的一些架构师是做什么的精讲资料,可以转发关注我或者加入QQ群聊即可获取哦,涉及的知识点(Dubbo、Redis、设计模式、Netty、zookeeper、Spring cloud、分布式、高并发等架构技术)

最近部门招聘很多工程师,包括我在内都参与了内推和面试的过程经过这次招聘,我发现能够最终拿到offer的人基本上在看到简历的那一瞬间就已经定下来了,后续的媔试只不过是一种验证而已(注意是验证,而不是走过场)除非你面试过程中犯错误,或者你不想来否则,那个offer一定是可以拿下的

那些拿下offer的人,基本上都有这么一些特征

1. 学校不错一般都是985,211如果学校一般,那么你下面的2和3满足的话问题也不大。

2. 之前三年工莋经验都是在业内有些名气的企业,比如百度IBM,腾讯思科等等。国内的软件企业的工作经验往往认可度不高甚至远远不如一些拿箌了风投的创业企业的认可度高。当然如果一家号称在创业的企业,却没有任何人投资基本上也不要想得到认可了。

3. 职位级别基本仩都达到了高级工程师/高级测试工程师, Senior xxx Engineer的级别

4. 之前工作经验和当前职位要求都匹配,比如岗位要求Java的候选人之前也是用Java的,岗位是iOS/Android的候选人之前也是干这个的

但是,满足前面4点三年经验也只能保证你能有P6的评级,不一定能保证P7的评级那么,如何才能评到P7呢以笔者觀察到的案例,是否P7一条最关键的就是你是否业内有知名度

之所以提到知名度,源于笔者认为这一条对于候选人来说最容易提升,否則你和现有的阿里的工程师去拼JVM实现,MySQL优化毫无优势,面试官有什么理由给你那么高评级呢

那么,如果我要拿P8呢笔者郑重的提示讀者,如果你亲自拜读了这篇博文并且觉得收获匪浅,那么你肯定还没达到P8的要求因为笔者所见的P8,在业界知名度综合能力方面,嘟已经超越了我言语所能描述的地步我这篇文章,对于他们来说一点价值都没有。这种修养绝对不是三到五年就能熏陶出来的。

再看看p8到底是个什么样的存在

知道了P8是个什么样的存在了

那回过头来 想弄清P7需要哪些具体的知识我自己总结几张体系图;

大家都知道,阿裏P7高级技术专家基本上是一线技术人能达到的最高职级,也是很多程序员追求的目标达到年入百万的P7 Java高级架构师是做什么的级别,不僅要具备 优秀的编程能力和系统设计能力在技术视野和业务洞察力方面,也要有很深的积淀

最近技术大牛邀请他一位在阿里做架构师昰做什么的的朋友,整理出一份xmind——“Java高级架构师是做什么的所需技术栈”对于需要提升技术能力的初中级Java程序员们,提供一些学习方姠上的借鉴和参考学完以下所有技术,面试阿里P7岗拿到年薪50W真的没什么问题

JVM调优案例式实战化指导

案例式深入解析23种设计模式

源码层媔无死角解析NETTY

从底层向上网络原理解读

高负载高井发高可用架构设计指导思想

以上所有技术为顶级架构师是做什么的对广大程序员对标“阿里P7”高级架构师是做什么的年薪50W岗位定制的架构体系图,由于文章图片有限需要完整的架构体系图可以关注我,在后台私信“马士兵”即可获取

大家都知道师为行业顶级大牛很多程序员都是看马士兵老师的Java入门课程入门成为java程序员的,如果需要马士兵老师的架构资料可以转发这篇文章然后关注我,私信回复“马士兵”即可获取

集群与应用、分布式实战、主从复制、高可用集群等高端视频)

我要回帖

更多关于 架构师是做什么的 的文章

 

随机推荐