转载出处

本人也一直在关注互联网,觉得还是有些了解。互联网要求是越来越高了,竞争的人太多了,不过你不用担心,个人觉得,你到了中层的水平,拿二线offer应该没问题,人多也有人多的好处,我比别人多努力一点,我就超过了很多人了,个人觉得需要具备以下条件,如图所示:

1、Java语言基础

1.1 刷基础题库,读JDK源码

首先你就能想到String就有很多坑,比如String s = new String(“abc”);这里会产生几个字符串呢。两个首先会去常量池中查找有没有字符串abc,首次肯定是没有的,然后会去常量池放一个abc做缓存,然后再去堆上创建一个字符串abc,然后把引用给s。我对坑的理解是要去读源码和了解底层原理,高级语言就是这样的,很多事都帮你做好了,也叫作语法糖吧!写着用着很方便,但是不利于理解和成长。对于这块的建议,真正的小白,看传智的视频,1.5倍播速,自己跟着敲,代码一定要多敲,敲多了或许你感觉自然不一样了。然后去牛客对着Java基础题库来刷。这样过一遍应该已经很扎实了,然后去看JDK的源码。

1.2 读JVM,并发编程

基础当然不仅仅指语言基础了,concurrent包下的面试官也很喜欢问,估计能用的好也不多,基于实现原理都是采用CAS+volatile,比如CountDownLatch,CyclicBarrier让你模拟五个运动员跑步场景,包括提供各种有界,无界阻塞队列都有他自己应用场景。JVM就不用说了,这是必问的,我想除了理论知识很扎实之外,自己最好动手玩玩,比如用Jmeter去做压力测试,自己设置JVM堆大小,栈大小,使用不同的垃圾收集器做对比,这样自己应该体会更深的,我们码农啊!一定要理论+实践双管齐下。书籍很常见的是就是《深入理解Java虚拟机》、《Java并发编程艺术》和《Java并发编程实战》(此书我还需要看第二遍)。

2、算法

我自己是计划LeetCode刷300题刷两遍,应该很稳了。我想这是大厂的基本条件吧!别扯那些没用的,工作中这些用不到什么的。对于一个应届生来说,你项目经验缺乏,代码能力不够,我为何招你进来的,大厂对应届上看重更是可塑性,那我为何招你不招别人,就是对计算机基础知识的比拼,可塑性体现在哪呢。算法牛逼,至少说明你逻辑思维牛逼,分析能力强等。比如LeetCode有到merge K list,它的原型不就是常见的大文件,但是服务器内存有限,让你如何来设计排序。写算法时候尽量不要用编译器,比如idea,eclipse等快捷键用着太爽了,爱不释手,但是面试时候,基本都是手写无编译器给你爽了,要做刻意的适应,前两周参加头条的实习生招聘,六道算法题,就发了四张A4纸给你,平时用习惯了的筒子们,估计会难受的。我觉得好好刷LeetCode就够了。

3、数据库

作为Java后台研发工程师,他们对数据库要求还是很高的,建议看《高性能Mysql》和《数据库存储引擎内幕》。比如Mysql底层索引原理,事务隔离级别,对应着解决脏读,不可重复读,幻读(虚读),看到这时候你不是应该拿数据库做实验,理论和实战结合会让你理解更加深刻。比如行锁采用的Record Lock, Gap Lock,Record Lock + Gap Lock = Next-key Lock。Mysql分布式事务采用的两阶段提交协议,这种协议高并发情况下,不行,一般采用消息队列。

4、操作系统和网络

这一块看面试官吧,可能有些很喜欢问,有些不怎么问!我个人是在看《Unix操作系统设计》一书,讲的操作系统内核,已经算比较深入了。最基本操作系统一些原理要清楚,就怕问到了,比如页式存储管理,段页式存储管理,给你个逻辑地址你要会算的出来物理地址吧!再就是我们对Unix基本操作肯定要会的,可能会问怎么找到java进程(ps -ef | grep java)等等,你直接去搜每天一个Linux命令,每天玩一个,应该问题不大了。网络看谢希仁《计算机网络》或者自顶向下计算机网络,我打算看的是TCP/IP详解。至少你知道TCP/IP数据报文格式,三次握手和四次挥手,能画的出来,包括每个阶段是什么状态,滑动窗口协议,拥塞控制机制。因为精力的确有限啊,连着每天2点多睡了,有点虚了。

5、高并发,系统设计题

这对于应届生的确很难,我觉得至少我们要做对这些概念都清楚,理论方案都熟悉,应该就可以了。比如常用的Nginx负载均衡,反向代理,Redis做缓存,用lua脚本实现它的原子操作,分库,分表,用消息队列限流提高并发能力,常用设计模式要会吧,还有Netty等等!设计模式之禅一书我看了一半实在看不下去了。真的很难理解的,或者说当时知道,过后就忘了。场景题,我个人觉得至少提出两种解决方案,根据不同业务需求说不同方案,比你泛泛而谈要很多,比如秒杀系统超卖的控制,传统公司可能就会用存储过程,互联网公司可能会用乐观锁+时间戳来实现,适用于读多写少的场景,当乐观锁失败太多了,那就改为悲观锁吧!用for update的X锁。

6、总结

感觉啊就是多看书,多搬砖,入门阶段会有很多困难,你会怀疑人生,怀疑自己适不适合代码(我应该是适合放牛吧,别人为何那么厉害),刚开始基本上靠毅力支持,等你坚持做一段时间,发现你更之前进不许多,会有成就感,从此你会爱上搬砖,这是很有可能,我好像也爱上搬砖了。累了,疲了找好朋友聊聊人生,抱怨一下,但是第二天依旧要搬砖,告诉自己,稳住,我们能赢!多想多对比,这些理论知识最终为了我们实践服务的。
作为支持附上传智17年的视频:链接:https://pan.baidu.com/s/1cnXpHc 密码:skau
很多视频自己可以去闲鱼买的,都很便宜的。划算的。

最新文章

  1. 【cs229-Lecture16】马尔可夫决策过程
  2. 在 Visual Studio 2013 中创建 ASP.NET Web 项目(0):专题导航 [持续更新中]
  3. hdu 4252 A Famous City
  4. 我的微软.net演进路线图
  5. python中将两个list合并为字典
  6. webgl鱼眼算法
  7. UML语言中五大视图和九种图形纵览
  8. codeforces div2 220 解题
  9. vue 打印功能
  10. iOS 12 tabbar 从二级页面返回时,出现跳动解决办法
  11. bash中的pasue
  12. cocos开发学习记录
  13. json 异常
  14. linux指令统计日志出现的次数
  15. linux下搭建hexo环境
  16. Android开发者选项 介绍
  17. 《DSP using MATLAB》Problem 4.14
  18. SLAM会被深度学习方法取代吗?
  19. 渐入OO课的深处,探索多线程的秘密——OO第二次博客总结
  20. java二维码工具类,中间带LOGO的,很强大

热门文章

  1. iOS:PrefixHeader / 头文件 / 宏定义(18-03-02更)
  2. FreeImage 生成带透明通道的GIF
  3. ORACLE GOLDEN GATE oracle同步数据至kafka
  4. jar包导入本地maven库的操作
  5. Elasticsearch 5.x安装
  6. 分页插件pagehelper ,在sql server 中是怎么配置的
  7. Mysql是否开启binlog日志&开启方法
  8. php的基础知识(三)
  9. IO流之字符流
  10. 如何分析Mysql慢SQL