Java学习经验(转自北邮人)

以过来人的身份谈谈我的感受。 
     首先如果只是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++招生的。。。 
     好了,自己做选择吧
实验1 类的定义、对象数组的使用 1. 定义一个学生类(Student), 属性有 1)非静态属性String studentNumber 2)非静态属性String studentName 3)非静态属性int markForMaths 4)非静态属性int markForEnglish 5)非静态属性int markForScience 方法有: 1)构造方法Student(String number, String name) 2)构造方法Student() 3)String getNumber() 4)String getName() 5)void enterMarks(int markForMaths, int markForEnglish, int markForScience) 6)int getMathsMark() 7)int getEnglishMark() 8)int getScienceMark() 9)double calculateAverage() 10)String toString() 返回学生信息,包括学号、姓名、数学成绩、英语成绩、科学成绩、平均成绩。 注意:为了保证calculateAverage返回double类型,需要把三个分数的和除以3.0,而不是3. 另外,分数的初始值是什么?如果每个分数初始值为0,会造成混淆,分数为0表示还没有输入分数,还是分数确实为0?有更好的初始值吗? 编写Student类,并且编写一个StudentTest类,对Student类进行测试。 StudentTest类运行效果如下: 请输入学生学号:2011211301 请输入学生姓名:王晓 请输入学生三门课成绩(数学,英语,科学):88,79,90 学生信息如下: 学号:2011211301 姓名:王晓 数学成绩:88 英语成绩:79 科学成绩:90 平均成绩:85.66666666666667 2.定义一个StudentList类用来存储Student对象 属性有 1)Student[] list; //list存储学生对象 2)int total; //学生总人数 方法有: 1)StudentList(int length) //length是数组长度 2)boolean add(Student stu) //增加stu到数组中,成功,返回true,否则false 3)boolean remove(int no) //删除第no个数组元素,删除成功,返回true,否则false 4)boolean remove(Student number) //删除学号为number的学生,删除成功,返回true,否则false 5)boolean isEmpty() //判断数组是否为空,若是,返回true,否则false 6)Student getItem(int no) //返回第no个学生 7)Student getItem(Student number) //返回学号为number的学生,若该生不存在,返回null。 8) int getTotal() 返回学生总人数 编写StudentList类,并且编写一个StudentListTest类,对StudentList类进行测试。 StudentListTest类运行效果: 菜单如下,请输入 1~8代表您要执行的操作: 1. 增加1个学生 2. 根据学号删除学生 3. 根据位置删除学生 4. 判断是否为空 5.根据位置返回学生 6.根据学号返回学生 7. 输出全部学生信息 8.退出程序 请输入您的操作:1 请输入学生信息: 学号:2011211301 姓名:王晓 数学成绩:88 英语成绩:79 科学成绩:90 ---目前有1个学生,信息为---: 学号:2011211301 姓名:王晓 数学成绩:88 英语成绩:79 科学成绩:90 平均成绩:85.66666666666667 请输入您的操作:1 学号:2011211311 姓名:李辉 数学成绩:80 英语成绩:79 科学成绩:93 ---目前有2个学生,信息为---: 学号:2011211301 姓名:王晓 数学成绩:88 英语成绩:79 科学成绩:90 平均成绩:85.66666666666667 姓名:李辉 数学成绩:80 英语成绩:79 科学成绩:93 平均成绩:84.0 请输入您的操作:5 请输入学生位置:10 对不起,没有对应的学生 请输入您的操作:5 请输入学生位置:2 学生信息如下: 姓名:李辉 数学成绩:80 英语成绩:79 科学成绩:93 平均成绩:84.0 请输入您的操作:3 请输入要删除第几个学生:2 删除成功 ---目前有1个学生,信息为:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值