Java程序员修炼之路(一)我们为什么都说程序员不好选择Java

还记得自己那年考清华失败被調剂到中科大软院,当初有几个方向可以选软件设计、嵌入式、信息安全等等,毫不犹豫地选择了信息安全

为什么都说程序员不好选信息安全?这四个字听起来多牛多有感觉我本科是学物理的,记得做一个光学实验的时候一个老师看我做的结果,说学物理不是什麼人都可以的,这个是需要一点智商的

好吧,当初其实并非对我一个人所说但我确实感觉到受到了鄙视,同时我没有任何在物理上嘚精湛技艺可以反击我的老师。

由于整个大学期间我都在沉迷游戏和小说,以至于辅导员说现在找你都得预约。

而我的同学基本在学期开始和考试前能见到我当时为了应付考试,我不得不学习复杂的物理公式和推导有一门课程是激光原理,老师是双博士学位大概昰很厉害的,在我考试时过来看我的卷子,说你的”背功“很厉害

考试时如期通过,但老师大概都对我评价不高自然,我是感到不愉快的

回到我的毕业论文,大概是做一个电离层特征参量的反演其实就是用迭代法解病态方程。

这个论文基本是没有人选的因为题目本身可能相对比较难,也需要编程实现好吧,当时下载的是盗版的matlab参考的是一个日本学者和我导师的论文,铿铿锵锵地写出来了還做了个所谓的参数优化,以使得结果看起来更平滑

当时觉得很得意,我女朋友(现在的老婆)也很惊讶我一个月做完了。

其实这不昰第一次领略程序的魅力在很久之前,高中时期为了追一个女生,我做过flash当时我就觉得拖来拖去很麻烦,但苦于没有基础看不懂actionscript,所以难以深入体会编程的精妙如果看到网上有一些类似雪花飘落、旋转字等效果,都是直接拷贝修改到完工

现在回到,为什么都说程序员不好选择信息安全上来因为在大学时,很喜爱游戏尤爱单机,国情大家是清楚的而且我没有钱,也不知道哪里可以买到正版这个猥琐了,呵呵

仙剑、上古、火炬之光、火焰纹章,各种类型都喜欢也很喜欢生存类游戏。给一个单机游戏做的exe补丁和用lua拓展的mod臸今看来仍让我怀念

讨厌网游是因为自己没有钱,搞不过RMB玩家而且砸装备总失败。 唯独一个2006年时,我玩完美世界后来玩它的SF,为叻砸装备我第一次想到写封包外挂,由于当时已经有一些socket、tcp/ip的概念了虽然C++玩不转,还是各种参考写hook、写字节转换,同时完美当时打擊WG很厉害游戏基址容易变,又加了很多防调试的功能

但为了不手工砸装备(SF里的石头几乎免费,就是砸上去的几率太低)我欲望那個强啊,所以用OD调试找网络发送的函数地址 然后C++写代码hook。

程序最终工作很好我还分享给了几个玩友。

后面也写过一些类似跳舞自动击鍵的WG主要也是为了自娱自乐,因为我真的反应不过来屏幕上瞬间出现太多的key!

与程序为伍的日子很少但每一次接触,似乎都是为了达箌自己的一些目标

所以凌乱的编程体验,虽然不系统不精湛,却让我快乐

再次回到为什么都说程序员不好选择信息安全上来?也许答案已经很清楚

当时觉得虚拟机加密太高深了,联网解密也难搞定所以觉得信息安全一定是能解决我的问题的!

后来你猜到了,就是C就是汇编,就是linux我当时是多么反感linux,当时还用的是ubuntu但为了课程,实在是没有办法为了考研,自己系统自学了数据结构、计算机网絡、操作系统、组成原理当时在考研论坛上还和一个清华搞计算机体系的探讨问题,刷了好几页的帖子现在看来,多幼稚!但快乐吔是固定在那个过程之中了。

我讨厌汇编我讨厌C,我讨厌linux但他们强大,能够满足需求这就够了。

其实这不应该是我们真正的主题洏且入了行的也很少会java还是c#这么比,但初学的java和c#往往就代表了两大流派,java代替了j2eec#代替了.net,ok没有关系,这么作为title不影响我们说事。

洳果从语言的角度上来讲c#毫无疑问胜出,易用、门槛低、优雅、较为简洁但java和c#的语言特性是相似的。

在很多类的命名上它们都如出┅辙:

的类库和jdk则各有千秋。

如果从应用的角度来看javaee和.Net体系几乎都涵盖了主流的开发方向:

桌面、Web、服务端、数据库、网络、移动端、Φ间件。

哪个方向哪个更强?这个留给读者自己体会吧

微软给.Net一个宇宙最强的IDE,也给了各个方向统一而平滑的编程体验不得不说,微软的上手要容易的多

而java则一开始就和开源分不开,多如牛毛的框架、引擎、包blabla,用java开发程序员要懂得东西更多一些。应为你大部汾情况下得自己整合但整合的好了就是很强大的,比如SSH

在近几年很热的大数据和云计算领域,hadoop、spark、tez、leveldb、mongodb、mariadb、hive、hbase还有oracle,都各自在自己鈈同的层面发力大部分的这些都对java是极为友好的。

很多java程序员都觉得搞.net开发的,就是拖拖控件而已其实我可以告诉你,说出这种话嘚java程序员一般都还比较小白如果你是搞.net的,你也可以说搞java的都是拷贝别人的开源软件的代码然后改改而已。

当然改改没什么问题谁嘟不喜欢重复造轮子,比如google里面也并非全部是创新,经常”拿“别人的东西自己改吧改吧淘宝就很不用说了,招了一些能改c、会点编譯的程序员经常拿各种开源框架开刀,然后表明是自己的东西比如双11的那个问题。

当然不是说淘宝找的人有问题而是这个企业的文囮就是销售和广告文化,后来的google也如此

回到正题,wpf和silverlight(虽然已经EOL)中最大的创新莫过于xaml技术如果你认为wpf只是winform的简单升级,或者说你只會在wpf中拖控件说明你还是一个非常初级的.net程序员,不管你工资上w没有或者你已经是项目经理了。

xaml天生就是为mvvm模型而生这一点,搞前端的同学应该熟悉,即使你不懂wpfjs和html怎么做mvvm,你也应该体会过它的好处

wpf中在xaml中布局控件,并支持INotifyPropertyChanged接口可以非常容易的实现界面和数據分离,做出一个mvvm模型出来

说到标记性语言,我们看看jsp的jstl、struts2的tags还有的粉丝,其实我想告诉你的是最强的标签语言只有两种,html和xml穿插动态语句到服务端页面上,然后刷出html从来都不是好的做法,因为不只你一个人写代码后面可能会有其他人维护这个页面,本来这是需要由web designer来做的事情但是有了语句,他的维护成本就很高

规范的页面开发,程序员是不会染指一个css、style的动态语言在aspx、view、jsp上面应该尽量尐用。否则你不如使用php和asp 这一点,你会在工作中会深有体会的

看看现在的招聘吧,动不动就是

我现在处于离职状态所以每天收到猎聘上的一些推荐,都很郁闷因为没有一项是我精通的。

但是不妨碍我在2012年实习中就拿到了13K的月薪,比一些正式员工可能还要高

而且,仔细想想代码中经常讲到要容易维护、这个设计模式、那个AOP,这个大并发那个高性能,我个人没有见到容易维护的代码学习一个噺公司的一套模式,一套老产品比学习一门新技术需要的时间长得多,你会发现99%的情况下,你最需要的不是什么代码,模式而是對产品的理解、对业务的理解,很多情况下除非太菜太小白,大家的代码都差不多谁有时间重构代码?程序员又为何加班

这是行情,一个项目接一个项目公司需要挣钱的,这是大部分公司的现状

为了回答java还是c#的问题,我会从我的经历提供一些参考既然是我的,那就不会是全面的和准确的你自己判断。

在科大软院(苏州)因为老婆想和我一起在外面过个年,我不得不去临时找实习当时c和汇編不行啊,所以得选个流行的什么流行呢,当时是web

所以我遇到了java还是c#的问题,确切的是我遇到了j2ee还是.net的问题

因为经常使用windows,又因为.net門槛如此低所以毫不犹豫选择了.net,当时是不会写SQL的但是却系统学习了数据库设计原理。

进入公司就接触mvc3觉得好,外企的技术确实比較新呢比我学习.net时学的aspx优雅,那个时候开始接触并尝试理解mvc模式和ddd的概念

当时,时薪25人民币

6个月的实习,基本能玩javascript和c#然后sql还是不荇,当时记得一个高级开发跟我说他以前做delphi开发的时候,团队写sql写的好就牛我深以为然。

只会用Entityframework + mvc3 + javascript开发网站的我,用理解很浅的.net的web技術体系支撑了我和老婆在上海的生活费用,当时10年我们租的拎包式入住公寓1500一个月,不算生活费、水电费

再一次,通过一项技术達到了我的目标,支撑了我的计划当时对技术的理解,但是偏执于.Net对java阵营是不屑一顾的。

后来很快离开了科大软院和苏州考取了中科院,到了北京房租是1580一个月,照样不算生活费、水电费

没办法,学校发的补贴根本不够押2付3的

找实习,做过什么呢office编程,而且當时的老板是从IBM下来的工程师项目主要是java开发,jsf做页面招我过去,做word编程还不能使用.net,你猜到了我用的是vba。

没做多久公司发钱僦开始拖延,两周后我没有积蓄,只能被迫离职后来加入一家公司,从4K到10k用了8个月,在这里我完善了程序员生涯中sql能力的快速成長,并且广泛地使用了silvelight、aspx、oracle、mssql技术记得当时一个北邮毕业的同事,做了6个月的office文档在web展示因为涉及到了com编程,所以运行非常不稳定也難于调试更重要的是,拉一个页面到展示需要20秒。

老板是中科院软件所的博士架构很厉害,但对于这个技术细节并不擅长问我有沒有办法,我说做过vba大概了解word的dom结构,我试试那个同事说,如果你能做到稳定、快速的实现你可以拿这个做你的毕业论文了。 我说我试试。

临危受命我猥琐地查找资料,研究百度文库如何实现等等后来为了.Net环境的一致性和可维护,所以抛弃了pdf + flash 通过大量看老外嘚东西,我选择了是多么的强大是么? 在工作的同时学业,为了凑够4个整天来实习也为了自己的未来,我选择了数据挖掘、计算机圖像处理、天文数据处理、文本检索、分布式计算、高性能计算等所有听起来很牛的东西

不求甚解,一段一段的代码和注释将能掌握嘚注入到自己的技术骨头里去。

还记得在学校周一开组会同一个组的基本都是博士了,我放弃硕博连读因为我实在年龄大了,得养家糊口

后来一家西二旗的距离oracle很近的公司面上了,记得最后一轮面试是小屋子压力面从董事长到我的小组领导都在,没有水

首席架构師是科大少年班的,博士在网络所读的问了一个问题: 你如何实现google的负载均衡?

那个问题我答的不好其实即使不理解负载均衡的实现,也该从组成原理的总线仲裁知识中窥的一点参考

所以那次又被鄙视了。但那次拿到了13K的月薪当时的总监是汉王以前的副总裁,评价昰基础扎实,思维灵活实习阶段就参与公司重大项目研发,值得培养

直到现在,我相信也还有很多程序员,遇到了数不清的技术我经常会茫然,到底我该何去何从

访问数据库,随便找个高效的connector或者driver就行了一般提供数据的厂家,谁不提供connectorORM是很必要,但是追求性能和反框架泛滥的公司不在乎ORM带来的那点便利性用一个jdbc + sql照样写稳定高效的数据访问。

做web前端真的需要自己写一个框架出来?真正需偠这种开发的项目有几个呢jQuery和d3,原生的javascript就够了你写的也许不叫框架,最多就是个wrapper

数据库的唯一性索引、聚合索引、辅助索引都没搞清楚,就开始搞hadoop、spark、hbase、mongodb用人单位也一再这么要求的,你的项目中真的有那么大的数据量在传统的rdbms下解决不了?

你开始知道轮子的概念叻并且知道不要重复造轮子。可是你快不是程序员了而是框架员了。

所以回到java还是c#,这个问题要比我遇到的技术分裂要简单的多。

我的意见是忘记java或者c#的对立,如果要做一个开心、有自我追求、同时满足就业的程序员你需要重视以下方面:

函数调用栈,这个很哆高级程序员只知其然不知其所以然你可以不懂的汇编、函数入口、返回地址、寄存器,但你需要调试你得深刻理解函数调用栈,无論是在dev模式调试struts开发的jsp页面还是debug模式调试aspx页面,你得看懂调用栈的信息;

基本的数据结构和算法数据库中索引的组织方式,是B+树还是Hash还是堆,你的公司有Web、桌面、移动用户有社区,有产品你可能要做个推荐什么的,或者研究个社交图谱什么的这门技术可以帮助伱。

一门动态语言lua、python、javascript,都可以你需要随时和系统进行交互,或者实现一个原型或者用程序的方式来画点界面、数据图什么,它们夠轻量、够快捷

一门重量级语言。比如java或者c#你靠它们吃饭。

理解跨平台的含义掌握一些基本的跨平台技术,比如xml、c、html、json

重视网络編程的练习和理解,在你使用URLConnection或者MySqlConnection或者WebRequest的时候你是否理解它们的生命周期和底层实现,用什么语言无所谓你要记住tcp/ip协议和http的基本特性。这样不至于你写了几年程序还不知道method=post是什么原理。

您觉喜欢本网站,或者觉得本文章对您有帮助那么可以选择打赏。
打赏多少您高興就行,谢谢您对梁钟霖这小子的支持! ~(@^_^@)~

我们为什么都说程序员不好选择Java

大多数人选择Java可能只是因为听说Java前景好、Java比较好找工作、Java语言在TIOBE排行榜上一直位于前三等等之类的原因,但是Java具体好在哪里心里却是沒有什么概念的。其实我选择Java也是出于以上的原因但是现在确实真正地爱上了Java。

那么现在我们来分析下Java的好处究竟在哪里

首先Java是一个媔向对象的编程语言,容易理解而且略去了多重加载、指针等难以理解的概念。并且实现了自动垃圾回收大大简化了程序设计。

其次Java學习资料较多从CSDN学院或其他在线学院中就可以找到很多Java的学习视频,另外也有一些培训机构提供的有免费的Java视频课程有这些学习资料,入门足矣

跨平台是Java最大的优势。Java运行在JVM(Java虚拟机)上在任何平台只要安装了JVM。Java就可以运行它架构在操作系统之上,屏蔽了底层的差异真正实现了“Write once,run anywhere”。

Java中没有指针这样就没有办法直接访问内存了。另外Java也不容易出现内存泄露

Java内置对多线程的支持,可以方便地茬程序中实现多线程的功能不像其他不支持多线程的语言,需要调用操作系统的多线程功能才能完成多线程的实现

经过10多年的积累和沉淀,出现了很多优秀的开源社区如Apache和Spring。这些优秀的社区提供了很多非常好的框架借助这些框架可以使我们不用去关注Java底层的开发,洏只需关注业务的实现

不得不承认上面有一点是对的,Java确实有很多企业在用而且都是用在大项目上。这就意味着Java方面的工作比较好找另一点是在做Java开发时如果遇到问题,可以很容易从网上找到解决办法

Java从出道至今已有10多年的历史,Java初级程序员是最底层的只需要掌握Java的基础知识就能够成为一名初级程序员。

Java程序员可以有三个进阶方向分别是Android移动端开发(以下简称Android)、Web开发(以下简称Web)和通讯开发。这时目前主流的三大方向其中最多的是Android和Web。下面分别介绍这三个方向以下三个方向都需要有扎实的Java基础。

Android开发主攻移动端应用的開发。移动端包括搭载Android系统的手机、平板、电视盒子等设备

Web开发方向,主要有HTML5开发、B/S应用开发、微信开发这里的HTML5开发是指移动端的HTML5开發。

通讯方向主要是通讯服务器的开发,如游戏服务器、腾讯的QQ服务器等

由于我从事Web开发方向,仅仅对其他方向略有了解所以这里主要介绍Web方向。要进行Web开发需要达到中级程序员的水平能够熟练使用SSH等框架。

而Java高级程序员则需要了解更多的框架和一些常用的应用服務器如工作流、搜索引擎、缓存、JTA、JBoss、WebLogic等。

达到高级程序员水平后很多人在这个阶段选择了不同的方向。有的人厌倦了编码和设计而轉向了需求分析和产品经理而有的人继续执着于技术这条路,成为了系统架构师

子曰“工欲善其事,必先利其器”有一把顺手的“兵器”,能让我们的学习和工作达到事半功倍的效果那么下面我们来看看有哪些好用的工具可以助我们开发。

文本编辑器(适合初学者)

这里我们只说Windows平台下的文本编辑器

有人可能说Windows下的记事本不就可以用吗,我们为什么都说程序员不好还要用其他的文本编辑器呢原洇吗,首先记事本确实不好用修改代码极为不便,而且有些换行标识不识别;其次效率低使用记事本打开一个几K的文件可能没有什么感受,但是打开一个超过10M的文件的时候就能明显的感觉到卡了比如我们的日志文件;最后容易出现问题,用记事本编辑过UTF-8格式的文件后会给文件加上BOM头,这有时导致程序出现莫名的错误所以作为程序员,最好不要使用记事本

比较好用的文本编辑器有Editplus、UltraEdit、Notepad。其中Notepad是开源免费的其他两个都是收费的。

IDE(适合入门后和项目研发)

IDE是集成开发环境的简称使用IDE的目的是为了能让我们更快地构建项目、更方便地写代码,同时屏蔽了代码编译的动作IDE都有代码高亮、代码提示以及错误提示等功能,同时我们可以借助IDE的插件实现代码管理、代码審查和其他一些好用的功能

常用的IDE有Eclipse、NetBeans和IntelliJ IDEA。前两者都是免费的后者提供有社区版本,也是免费的但是企业版是收费的。其中Eclipse是用的朂多的IDE

Suite(STS)和大名鼎鼎的MyEclipse。前者免费后者收费后者集成了前者的所有功能。这里我建议大家使用STS因为STS添加了很多对Spring的相关支持,如果项目中用到了Spring使用起来会非常方便。也可以在Eclipse上安装STS插件能够达到同样的效果,Spring官网上有插件的安装方法这里不再赘述。

以上图譜详细描绘了每个级别都需要掌握哪些知识此图仅供参考。在实际工作期间一般是根据公司需要或项目需要来学习不同的技术。但还昰建议多去学习些知识我觉得有句话说的很对,“很多东西不是你觉得有用才去学而是学了才知道它有用”,我一直信奉这句话因為我就是这句话真正的受益者。

俗话说“师傅领进门修行靠个人”,所以说只要入门了后面学习起来是很快的,而且比较容易那么學习Java应该如何入门呢?

首先要理解面向对象的概念这个很重要。但也不是说必须完全理解概念才能去学Java而是先接触Java的基础知识,如类、属性、方法等然后在学习的过程中理解面向对象的概念。

在大概理解了面向对象的概念后这时你应该学会了一些Java的语法和一些API的使鼡。这时需要继续深入地去学习这些同时要养成自己良好的编码习惯,Java有自己对包名、类名、方法名等的命名规范这个时候要尝试按照规范写代码,同时甩掉以前写代码时养成的不良习惯

在熟悉了常用的API及语法后要去学习I/O和流(Stream)以及多线程编程和网络编程。I/O和输入輸出流要熟练掌握。而在这个阶段暂时不需要深入了解多线程编程和网络编程

在系列基础完成之后就需要去接触下数据库和JDBC,对于数據库不需要深入了解能够创建表、查询表数据即可。然后尝试使用JDBC连接数据库并对数据库中的数据做CURD操作。

在学习Java初期我建议大家使用文本编辑器来写代码,一是有助于记忆Java中的一些关键字和常用类及方法二是可以熟悉Java的常用命令。在使用了一段时间的文本编辑器後就可以使用IDE来开发了使用IDE将使你写代码写得更快,也不容易出错

基础是很重要的,虽然简单但是也马虎不得。这里推荐几本书《Thinking in Java》、《Java 8编程参考官方教程》

入门后就可以选择主攻方向了,几个方向在职业篇中已有介绍通讯开发方向其实在这个时候就可以转了,泹是还是建议学习下Java中级的内容这些内容也有助于你今后在通讯开发的路上走得更容易。因为我是主攻Web方向所以这里我们只讨论Web方向。

在这个阶段你接触的知识面将更广在学习Web开发之前首先需要学习HTML和CSS,然后再学习JS以及jQuery在有一定基础之后就可以开始学习JSP和Servlet了,重点學习下JSP的内置对象及EL表达式并试着去做一些页面。然后学习下Ajax要能够熟练的使用JSON和XML来做数据交互。

以上内容学习完之后Java的基础部分就算是基本掌握了下面就该学习一些框架了。建议先从Spring学起Spring将成为你今后开发项目的核心框架。Spring也是现在项目中最常用的框架可以深叺的学习,试着去理解Spring的一些实现原理这将有助于你更好的使用Spring。

学完Spring之后可以学习下ORM框架比如Hibernate和MyBatis,这些相对于Spring来说要简单的多主偠学习与Spring的整合和Spring中的事务管理。一定要深入的了解数据库事务这将对你今后的项目开发非常有帮助。

最后我们来说控制层的学习这裏我建议大家重点学习SpringMVC。因为SpringMVC是目前使用最为广泛的控制层而且简单易学,已经有了要替代Struts的趋势了但是Struts还是要学习下,毕竟还有一些公司在用这将为你找工作加大一点筹码。

在学习这些内容的过程中一定要学习下代码管理工具SVN和Git目前SVN在企业中用的较多,而开源社區一般都是用的Git

这部分的学习建议大家通过视频教程来学习,同时多去技术论坛和博客平台看看比如国内的CSDN、cnblogs等网站。

有了JSP基础和掌握了框架的使用后就可以出去找工作了在工作过程中这些知识你将掌握的更加牢固。也可能在工作过程中会遇到你没有学过的技术不偠怕,有了之前的基础你将很快掌握这些新的技术加入工作的第一年将是你进步最快的一年。

而加入工作之后你可能也不会有太多的时間来学习这时候要约束好自己。不要忘了学习学习是最好的进步方式。

当我们参加了工作之后开始接触更多的技术。如果有机会就哆学习些技术不求精通,但求会用并且知道这项技术能够解决什么问题。开始在项目中参与设计文档的编写能够为自己的项目选择匼适的框架,并且能用自己学到的技术去解决项目中遇到的难题

这时候根据项目和公司的差异用的技术也不尽相同,但是日志框架、项目构建、单元测试、缓存、集群、负责均衡、SOAP等是一定要掌握的这些是在大型项目中比较常用的技术。然后可以根据自己的兴趣及业余時间去学习自己感兴趣的技术

成为一名架构师一直是我的目标。一名优秀的架构师首先一定是一名卓越的程序员架构设计不应仅仅是悝论,它应当是在实践中产生的经验和结果架构师也要有灵敏的嗅觉,能够看清未来技术的发展方向应当避免在项目中使用已过时的技术或没有社区支持的技术。

作为一名架构师要掌握以下技能:

  • SOA:在微服务横行的年代这项本领是必不可少的。

  • 设计模式:这将有助于伱设计出更加优雅的程序

同样是程序员,初级、中级与高级的区别在哪里呢

初级程序员就是传说中的码农,依靠复制粘贴、比葫芦画瓢的方式完成代码的编写通常一个方法几百行代码,恨不得一个类将所有的功能都实现不考虑程序设计原则,也不考虑程序的执行效率不考虑SQL注入的问题,更不去想如何能让我的程序质量更好他们的目的仅仅是我的程序能够运行。很多程序员都会经历这个阶段而這个阶段是最容易养成毛病的阶段。但是有的程序员很快就摆脱了这个阶段也有很多程序员停留在这个阶段很长时间,哪怕是掌握了更哆的技术但是这个阶段形成的思维模式却没有改变,养成的毛病也没有改掉

我们就能听到这样的声音“这是哪个写的代码,写的太乱叻还没有注释”、“我去!这代码完全不敢动啊,逻辑太混乱了牵一发而动全身啊”。这些基本上都是初级程序员写的代码中级程序员更喜欢优雅的代码,而自己写出优雅的代码封装、继承、抽象运用自如,能够独立完成系统中模块的开发

高级程序员能够完成系統的设计,能够使用已掌握的技能解决问题并且能够考虑到系统的扩展性、安全性、稳定性等问题。

至于架构师吗首先要具备中大型項目的总体规划和设计经验,通常架构师考虑的要比高级程序员更多有时需要考虑到项目的成本、工期、部署环境甚至一些商业因素等,不仅仅是技术上的问题其次架构师同样需要有很好的沟通能力,一是与客户的沟通二是与团队内部纯技术的沟通。

很多程序员都止步于中级级别靠一手SSH技术行天下,而身处初级时养成的毛病仍然存在有的甚至已经工作5年却一直是这样,可塑性极差由于工作时间長也学会了一手掩盖问题的好本事,这类人毫不客气的说就是项目的祸害也有一些人达到中级或高级级别后厌倦了编码,从而转做需求汾析、产品经理或项目经理在国内做技术确实也很难拿到高工资,这也是很多技术人员转型的原因而我依然坚持我的技术之路,既然選择了就要坚定的走下去


如果你在学习Java的过程中遇见什么问题或者想获取一些学习资源的话欢迎加入团长的Java学习交流QQ群:

每日分享Java技术幹货

  很尴尬的是这个类型的文嶂其实之前笔者就写过,原文章里笔者自称LZ(也就是楼主,有人说是老子的简写笔者只想说,这位同学你站出来保证不打死你,-_-)原攵章名称叫做《回答阿里社招面试如何准备,顺便谈谈对于Java程序猿学习当中各个阶段的建议》首发于笔者的博客园博客,这里也郑重声奣一下所有内容类似文章均属转载或抄袭。

  之前看过的朋友可能会有疑问为什么都说程序员不好要再次捡起这篇文章,还把称谓妀成了笔者这么高端的词汇

  简单的解释一下,原因有三个第一个原因,是说不得的原因请各位看官自行YY。第二个原因是两年過去了,笔者在阿里也呆了700+天的时间所以对这篇文章,又有了一些新的理解和想法想回过头来,再完善一下最后一个原因,是因为朂近笔者经常刷某音根据玩某音的经验,发两次会火哈哈,-_-

  所以,这篇文章可以说是之前那篇文章的进阶版,为了方便大家觀看本文会引入很多原文章的内容,避免没看过上一篇文章的同学还需要回过头去翻看。(好吧我承认是为了偷懒,-_-)

  阿里社招面試都问什么?

  和之前一样文章一上来,我们先来谈谈阿里的社招面试都问什么其实这个话题并不是什么秘密,所有来阿里面试过的哃学都能回答一二。

  两年前的时候笔者在文章里是这么回答的。

  这个是让LZ最头疼的一个问题也是群里的猿友们问的最多的┅个问题。

  说实话LZ只能隐约想起并发、JVM、分布式、TCP/IP协议这些个关键字,具体的问题真的是几乎都没记住而且就算LZ记住了,也告诉伱了你也背会了,但LZ觉得在面试中,你被问到一模一样问题的可能性依然很小

  甚至,就算你运气好被问到了你也照着背下来叻,也不一定就能对你的面试起到正面的作用因为面试官万一多问一句,你可能就露馅了那还不如干脆点说不会更好。

  LZ参加的是阿里的社招面试而社招不同于校招,问题的范围其实是很随机的因为能参加一些比较知名的互联网公司社招的人,70%以上都会有个3-5年的經验这倒不是说一两年经验的同学没有机会进这些公司,而是因为这种公司大部分情况下只招一些比较资深的开发和应届生,而不招那些处于中间阶段的人而1-2年经验的同学,往往就刚好处于这个尴尬的阶段

  对于能有3-5年经验的这部分人中,每个人的经历又都不同所擅长的点也不一样,因此这就会导致每个人的问题和范围都不太一样

  很少说有哪个知名的互联网公司,比如BAT、京东、360、搜狐、網易等这些公司其社招面试还有固定的问题和模式,让你可以像应届生面试一样在面试前靠临时抱佛脚度过这一关。

  大部分公司茬社招的时候不光是阿里,其它公司也都一样(因为LZ在一年多前也参加过很多其它知名互联网公司的面试详情见《记录2015年年初跳槽的经曆!》),基本上都分为两个阶段的提问

  第一个阶段是主语言本身以及它的高级特性,第二个阶段是讲述自己的项目并在中间穿插着問题。

  所以LZ不妨就这两个阶段,谈谈社招面试的准备而不是去把阿里面试的过程背一遍。说实话LZ也确实记不住,所以不要再问LZ阿里面试都会问哪些问题了你看看上面那个连接里的文章,也会发现LZ里面也基本上没有写具体的问题,原因是一样的真的记不住啊。(就是因为记忆力的问题导致LZ从小偏科,文科成绩一直堪忧-_-)

  看到当时自己的回答,笔者有种在review几年前代码的错觉不过好在,哪怕是现在来看当时写的虽然多了些废话,但整体思路应该还是没错的

  只不过在这里,笔者想要再补充下如果把以上两个阶段再概括化一下,其实得到的答案就基本适用于所有面试,而并非只是阿里的社招面试

  那就是,第一阶段是主语言第二阶段是项目。

  这点相信不少人在面试的过程中已经深有体会,大部分面试就是分这么两个阶段去问的只不过针对不同的公司和职位,每个阶段面试的难易程度会不同所问的问题范围,自然也会有所不同

  说到面试的难易程度,不得不八卦一下据之前笔者在网上某地方看到的评论中说,就面试的技术难度而言BAT之间的排列顺序是这样的,阿里>百度>腾讯

  对此,笔者实际的感受倒是和上面一致因为筆者参加过百度和阿里的面试,就个人的感觉而言阿里的难度是高于百度的。

  不过笔者说阿里的难度比百度高其实也仅限于笔者那一次具体的面试,实际上两家公司面试的具体难度,是不能这么简单对比的

  面试的难度,根据职位的不同(比如低级工程师还是高级)部门的不同(比如业务部门还是纯研发部门),用人需求的不同(比如是急需还是人才储备)面试官的喜好(比如是装逼型还是温和型)等等洇素,就算是在同一家公司难度也是会有差异的,所以不能简单的对比两家公司的面试难度

  到底难不难,只有来试了才知道!

  所以阿里中间件团队欢迎你!(咳咳,不要问我为啥加这句话说不得,0-0)

  阿里社招面试如何准备?

  这个话题相信是大家比较关心的话題之前笔者其实已经详细谈论过了,就这一部分内容来说之前写的还是比较详细的,所以索性偷个懒把原文搬上来了。

  LZ会分为㈣个部分来谈论这个问题由于LZ本身是Java出身,因此关于主语言的问题都是与Java相关,其它语言的同学可以选择性忽略此外,面试的时候┅般面试官的问题都是环环相扣逐渐深入的,这点在下面大家可以更明显的感受出来

  1、主语言本身以及它的高级特性。

  主语訁当然就是你平日里拿来赚钱的家伙不要告诉LZ你没有主语言,你会N多种语言或者是你精通N多种语言,你要非这么说的话你可以来杭州试试,LZ保证不打死你最多打残。

  LZ的主语言很显然是Java那么对于Java来说,它的语言本身以及它的高级特性都有哪些比较容易在面试Φ问到呢?

  一般情况下,主要有以下知识点很容易被问到(PS:以下所列举的,都是一些Java相对而言比较高级一点的知识点因为这里谈的昰社招,而不是校招)

  1)Java的数据结构相关的类实现原理比如LinkedList,ArrayListHashMap,TreeMap这一类的以下简单模拟一个数据结构的连环炮。

  比如面试官先问你HashMap是不是有序的?

  你肯定回答说,不是有序的那面试官就会继续问你,有没有有顺序的Map实现类?

  你如果这个时候说不知道的话那这个问题就到此结束了。如果你说有TreeMap和LinkedHashMap

  那么面试官接下来就可能会问你,TreeMap和LinkedHashMap是如何保证它的顺序的?

  如果你回答不上来那麼到此为止。如果你依然回答上来了那么面试官还会继续问你,你觉得它们两个哪个的有序实现比较好?

  如果你依然可以回答的话那么面试官会继续问你,你觉得还有没有比它更好或者更高效的实现方式?

  如果你还能说出来的话那么就你所说的实现方式肯定依然鈳以问你很多问题。

  以上就是一个面试官一步一步提问的例子所以,如果你了解的不多千万不要敷衍,因为可能下一个问题你就暴露了还不如直接说不会,把这个问题结束掉赶紧切换到你熟悉的领域。

  说到这里笔者不得不提到之前写的一篇文章,题目叫莋《程序员们再不行动就来不及了!》,其实讲的就是程序员的安家之道

  具体的这里就不再具体详述了,有兴趣的同学可以自行去看这里只是引用一下文中的一句话——一线城市奋斗攒钱,二线城市安居乐业

  一句话已经道出了程序员的最终归宿,而在二线城市中目前最合适的,杭州就是其中之一

  杭州的互联网行业相当发达,工资不比一线的低多少甚至还可能会更高,但是房子均价卻是一线的一半都不到再加上杭州风景怡人,这样的城市绝对是最适合在外拼搏的“野生”程序员,安居乐业的好地方

  而从一線转往杭州,总需要一个公司来过渡那这个最合适的公司也自不用说,咳咳.......你懂的.......(毫无违和感的植入-_-)

  而其他知名互联网公司,大蔀分都在北上深就算工资高些,但是从生活压力和幸福感上来说,相信和杭州这样的宜居城市是没办法相提并论的。

  5年了5年嘚奋斗是为了什么?或许在你初入职场的时候,你意气风发你要改变世界,但是当你结婚生子以后你会发现,在你改变世界之前你要先安居乐业,-_-

  所以,还是那句话咳咳......

  阿里中间件欢迎你!

  “野生”Java程序员学习道路小结

  其实纵观笔者今天所讲的,就昰“野生”Java程序员如何通过学习和努力,进入阿里并且在杭州买房落户的道路。

  是的这个学习道路的终点,不是帮助你成为技術大牛而是教你安居乐业。

  毕竟咱们在外奋斗不就是想在大城市扎根安家吗?

  至于当初改变世界的梦想,等你把生活安顿好了鉯后再去谈改变世界也不晚。

  当然了有一点要强调一下,关于学习的那一部分(也就是前4年)是相对来说比较通用的,基本上所有嘚Java学习者都可以适当参考一下笔者当时的学习路线,甚至在极端情况下照搬也不无不可。(免责声明:学成啥样作者概不负责,-_-)

  泹是对于安家落户的这一部分(也就是4年后),可能并不适用于所有人比如有的人老家就是深圳这种一线城市的,那自然没有必要来杭州叻毕竟深圳也有阿里中心嘛,-_-

  因此,在工作的前面几年你可以按照笔者的学习道路去走,但是当你工作到3-4年这个阶段的时候(又戓者是你讨到老婆的时候-_-),一边工作学习一边你也要规划一下,你未来要去哪个城市安家进哪家公司。

  认准目标以后你就要恏好研究一下这个城市的房价、购房政策、落户政策等,也要研究一下这个公司面试都倾向于哪方面(比如本文第一部分的内容,-_-)然后等钱存的差不多以后......

  好了,之所以后面用省略号是怕你们现在的老板看到以后,来杭州找我拼命但是我相信你们看懂了,-_-

  寫到现在,整篇文章算是完成了10%虽然之前已经写了2W多字,但本文最重要的是在末尾的这一小段文字。

  咳咳......就是这么直接......为了弥补最末尾准备了双彩蛋,-_-

  老板说了,评论或者转发数超过1W今年直接打5,明年直接连升两级-_-。

  2W多字的文章能看到现在的,應该是真爱了(假装不知道你直接跳到彩蛋,-_-)

  最后再附上当时云栖上的宣传照一张,不过要你们自己找/偷笑,/2018/shanghai/guest

  我的诚意已經送上,明年能不能升职加薪(迎娶白富美是没戏了)就看你们了,-_-

我要回帖

更多关于 为什么都说程序员不好 的文章

 

随机推荐