前两天大学同学聚会,和几个在BAT的同学聊了聊技术,发现自己在创业公司这几年,完全是吃老本的状态,没有什么机会精进技术,同样是工作了三年,和同学的差距却越来越大。
但真正让我受打击的是六月份的一次面试...
“面的是阿里,面试官问了很多问题,一大半的问题我都是一知半解,回答上来问题也是特没底。
大概回顾了这场面试:上来先是问了Java基础知识,jvm、字符串、集合、线程等等,这部分我还算准备的充分。第二部分开始复杂了,主要是线程、设计模式、缓存方面的问题,像是分布式、集群环境中,缓存如何刷新,怎么保持同步?我之前工作上经历的少,加上自己技术储备浅薄,到这部分时我就感觉自己快凉了。面试到最后,问了设计方案相关的,当时已经懵了,我只记得一个问题:假设服务器经常宕机,你从哪些方面去排查问题?我。。。。“
面完后觉得自己在技术上欠了很多债,最惨的是,在这之前我根本不知道。
我的经历,正是很多1-3年的Java工程师的困扰,想够一够 3w月薪的岗位,但在底层技术上却有很大的问题:
做了几年的Java,表面上用过很多技术,但都没能深入学习,一年的工作经验,干了好几年。结果就是遇到实际问题时无从下手,最终还是走着普通工程师的道路,和高手的距离越来越远。
都说三年是程序员的一个坎,能否晋升或者提高自己的核心竞争力,这几年就十分关键。那么到底该如何学习呢,下面是我死磨硬泡我大厂的同学们给我做的一份对标大厂的学习路线图,在这里分享给大家
JVM学习路线+教学视频+PDF
多线程与高并发学习路线+教学视频+PDF
设计模式学习路线+教学视频+PDF
Spring Cloud+Dubbo+Docker
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。
K8S+Lvs
k8s全称kubernetes,这个名字大家应该都不陌生,k8s是为容器服务而生的一个可移植容器的编排管理工具,越来越多的公司正在拥抱k8s,并且当前k8s已经主导了云业务流程,推动了微服务架构等热门技术的普及和落地,正在如火如荼的发展。
Zookeeper+Mycat
ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。
分布式+Kafka
Kafka是由Apache软件基金会开发的一个开源流处理平台,由Scala和Java编写。Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者在网站中的所有动作流数据。 这种动作(网页浏览,搜索和其他用户的行动)是在现代网络上的许多社会功能的一个关键因素。
字节一面:
括号匹配算法;
统计一个日志文件(里面存放的是id,每访问一次会有一行id)前10个出现的id;
OK,继续优化,如果这个日志文件很大,那我们内存放不下,放在外存你会怎么做(先分块,再把id相同的映射到同一个块,hash,或者取模可以做到,面试官提示的);
字节二面:
最长不重复子串(双指针就可以了,这里我比较蠢,用了一个set,不过也可以解出来);
机器人走路算法(DFS+标记算法,可以写伪代码解释,我写了代码,但面试官说回溯有点标记问题),左上角走到右下角,求可能的路径中和最小的那个值;
字节三面:
也不说什么了,既然操作系统页面置换算法有LRU,那么我们手撕一个LRU算法吧(Java内部LinkedHashMap实现了,但是如果用,就0分,面试官说的,手动模拟LRU,这个建议大家好好写一下吧,我实验室朋友前面面的另外一个部门也有手撕):需要一个put和get方法,具体的是需要HashMap和双链表去实现的,感兴趣的可以看看LeetCode有原题(在面试官的指导下完成,之前写的有些忘记了)。
面试内容:
数据库:
四种隔离级别;
三种问题(脏读,不可重复读,幻读的问题);
如果不用串行化,如何解决三种存在的问题(不用串行化,如何保持高的效率,也不会出现问题);
MySQL有哪些索引,介绍一下B+树具体的结构;
聚集索引和非聚集索引;
用过哪些数据库。
操作系统:内存,外存,虚拟内存,Cache的作用以及相关的原理(自述);
缺页中断有哪些算法;
同样的问题,外部有个大文件,内存放不下,我们应该如何处理(分块,多线程mmap,(可以用Hash映射,招银也会问)),mmap如何进行内存映射的;
说一下栈和堆吧,栈的效率会比较高,那么栈和堆有哪些用处和区别(首先答了多线程共享资源问题,从Java角度解释,多线程每个线程维护自己的栈,但堆是共享,会出现资源争夺的问题。其次从资源回收角度介绍了一下, 堆中的对象需要我们手动释放或者JVM回收,栈中的数据通常伴随着方***压栈或者弹出,从两个角度介绍)。
计算机网络:
打开一个URL经过哪些流程,顺带说一下协议;
HTTP的无状态是什么意思;
TCP和UDP的区别是什么,是什么导致了TCP效率比较慢;
拥塞避免具体的四个过程,每个过程如何实现的;
Java相关:
Spring框架中,说一下IOC和AOP吧;
线程池说一下实现原理;
说一下你了解的Java中的map的线程安全问题(HashMap, HashTable, ConcurrentHashMap,说一下底层原理);
什么时候会发生垃圾回收;
Volatile的原理;
NIO;
同步异步,阻塞和非阻塞,四个概念。
还有一些自己项目相关的问题以及其它的印象不是很深刻的就不说了。
BAT作为国内顶尖的大厂,一直都是程序员梦寐以求的殿堂,怎样才能拿到大厂的offer?没有掌握绝对的技术,那么就要不断的学习相关知识以及拼命的刷题!
对标BATJ大厂学习资料
这段时间一直都在针对学习路线找相关的资料,也通过一位阿里的朋友要到了一份阿里内部流传的面试宝典(284篇)我把这份Java面试宝典啃完了,从而还找了Java后端以及一些大厂的面试场景和面试题不断刷题提高自己的眼界
资料获取方式:加VX:bjmsb03领取
Java突击面试宝典
这本Java突击面试把面试提出的各种问题解析的很深,对大家应该很有帮助,它把大部分的Java难点集结在一起深入的解析出来(非常建议大伙看一看)
加VX:bjmsb03领取获取往期Java高级架构资料、源码、笔记、视频。Dubbo、Redis、设计模式、Netty、zookeeper、Spring cloud、分布式、高并发等架构技术
spring
Mybatis
Docker
数据结构与算法
收集整理的各个大厂面试真题
大厂必备学习知识点
结束语
为什么某些人会一直比你优秀,是因为他本身就很优秀还一直在持续努力变得更优秀,而你是不是还在满足于现状内心在窃喜!加VX:bjmsb03
获取免费Java架构学习资料(里面有高可用、高并发、高性能及分布式、Jvm性能调优、Spring源码,MyBatis,Netty,Redis,Kafka,Mysql,Zookeeper,Tomcat,Docker,Dubbo,Nginx等多个知识点的架构视频学习资料以及电子书资料)
合理利用自己每一分每一秒的时间来学习提升自己,不要再用"没有时间“来掩饰自己思想上的懒惰!趁年轻,使劲拼,给未来的自己一个交代!