以过来人的身份谈谈我的感受。
首先如果只是ssh框架的话,是没有理由能拿到bat及这层次之上的offer的。因为这样的人太多了,而且框架的使用也比较简单,除非:对该框架非常了解,具备根据公司情况开发适用于公司框架的能力,即要求你对java反射机制、设计模式、多线程要有较深理解,最好熟悉jvm相关机制。(其实对着有较深理解的情况下也不会对“ssh”这个关键字这么在意了)
其次,我觉得java体系可以分成四个部分,从高到低:框架开发,网络协议,java语言,jvm。深度却是递增的。
从我个人的角度看(我对框架开发不是很了解,只是实习的时候因为公司的要求试用了spring,所以框架就不谈了),对网络协议是需要比较了解就行了,比如分层,每层传输的数据结构,每层的对等关系(port to port, host to host),然后tcp的三次握手、四次挥手,拥塞控制(快启动、慢恢复等),如果还对http了解的话就更好了,因为大部分的应用开发需要应用到,websocket等也了解下。
然后是java语言,其中collection接口、map接口是最常用也最常问到的,比如hashmap(呵呵),比如implementes queue的类有哪些(应该说出双端队列和阻塞队列的多种实现);然后是重点和难点,也是面试官区别你和一般面试者的地方:JUC包与NIO的理解。这个就比较多了,重点是线程池的理解和异步并发的理解(这里最好着重理解epoll函数与select/poll的区别)。当然,前面说过了,设计模式和java反射也是通常会被问到的,尤其是单例模式,你最好能默写出双重校验锁、enum、内部类三种实现方式。
最后是JVM的理解,推荐你买本《深入理解JVM》认真阅读一下吧,好像是一个中国人写的,还是很不错的,基本都讲到了,主要理解jvm分代回收、java类加载机制,jmm内存模型,最后能扯点并发优化当然更好了。这本书里中间好多降到了java字节码的部分,你可以不用记住,但是看一遍有个映像是最好的。面试的时候一般你能非常清楚的描述分代回收机制的话就可以默认你对jvm很熟悉了,如果还了解jmm,能够描述的话应该就完全达到了阿里终面的水平了。。。
最后,就是除开语言能力之外的能力了,着重体现在算法、新兴技术。
算法各自看各自造化了,我只看了《编程之美》中间数字和字符串的两章,感觉受益匪浅,如果能再看看《剑指offer》(不喜欢这本书,感觉太功利了,根本就是历年笔试题集合嘛,哈哈)就更好了,然后就在leetcode上刷刷题吧。
至于新兴技术,最好是跟你项目相关的技术,结合我自己的情况,主要是把nosql了解了一下,redis, cassandra, mangodb, neo4j,以及一致哈希、类聚、mapreduce等,一定要有集群部署实验,推荐根据《nosql精粹》认真学习一下。然后我在vmware实习了,对vmware的vchs产品的架构了解了一下,对自己以后再服务器开发有非常大的帮助(其实就是在吹自己项目的时候先“升级”一下)。
其实,语言都是通用的,感觉java对比c++主要是在编译层面多了很多安全的check,在oo设计上有些不同,主要是因为jit。
最最后,如果选择java,一般做高性能中间件,后台开发之类的,如果选择c++,呵呵,都能做!而且还有游戏开发等是专门针对c++招生的。。。
好了,自己做选择吧。
【 在 tyr1235831 的大作中提到: 】
: Lz研二狗,明年找工作,看到师兄师姐找工作找的如此痛苦,我也开始审视自己,要早做准备。
: 奈何lz技术渣,在实验室一年只做过一个web的项目,而且感觉有些拿不出手的那种。其实Lz实验室的项目跟web完全不相关,但是刚好就被分配到了这个任务,就做下来了,而且基本都是拿以前的东西改的。
: 所以下定决心好好学Java。其实以前就学过,只是学的不认真,很多都是徒有其表,再学一遍发现自己真的啥都不会!现在打算把Servlet、JSP学一学,再学主流的框架,主要是ssh吧,把自己之前的项目用这些高大上的框架包装一下(ps:看之前师兄的简历他貌似就是这么做的!)
: ...................