有的是刚入职的程序员,有的是在校学生,多多少少对企业级开发熟悉了,面临深入学习时候就再框架和基础之间不知道如何选择了。
文章目录
- 前言
- 一、大厂面试
- 校招大厂面试内容
- 非校招面试内容
- 二、一些建议
- 三、Java基础进阶
- 四、多款开源框架中Netty
- 五、行业选择Netty的原因?
前言
不管是基础还是框架都是解决问题用的,但是工具一定是有好坏之分的。前提就是场景,在职人员还好说,抓住自己公司的核心业务。在校生呢?没有方向,建议都学!
一、大厂面试
校招大厂面试内容
一面:某一知识点底层原理、现在手上的项目介绍,计网、消息中间件等
二面:双十一场景、JVM优化、项目优化问题,某些热点框架的源码。参赛情况等;
三面:某语言和某语言的区别,目前做过的项目,负责模块,再根据项目问问题。某模块是做什么的,缓存是干嘛呢?一般,还会问回到Java基础。
三面过后基本上就上岸了。四面是交叉面试;
非校招面试内容
一面:并发问题、消息中间件、JVM、项目的主要负责模块。
二面:做题一九是并发、算法、设计模式
三面:各种解决方案
四面:项目相关技术以及设定场景,如何解决问题。
以上内容就是一些互联网公司面试的一个大概流程,想说这些就是,不管是基础原理还是框架,都是需要付出时间和经历去学习的。根据上面面试流程给到大家一些建议。
二、一些建议
原理+理论+时间缺一不可。顺序:理论–实践–原理–理论–实践,不是学完了理论就去研究原理。校招面试一般都会考数据结构和算法。Java基础+数据库+SSM面试都会问到。其次就是在校期间做了什么项目,具体负责什么部分用到了什么技术,该技术实现了什么功能,其原理是什么。对项目的优化方案是什么。
大学生想要在人群中突出的话,就是你熟悉前沿技术(缓存+并发+性能优化+微服务),再者就是竞赛奖可以参加竞赛或者就是多跟导师一起做项目。
三、Java基础进阶
1、Core Java,Java基础、JDK的类库,很多童鞋都会说,JDK我懂,但是懂还不足够,知其然还要知其所以然,JDK的源代码写的非常好,要经常查看,对使用频繁的类,比如String,集合类(List,Map,Set)等数据结构要知道它们的实现,不同的集合类有什么区别,然后才能知道在一个具体的场合下使用哪个集合类更适合、更高效,这些内容直接看源代码就OK了
2、多线程并发编程,现在并发几乎是写服务端程序必须的技术,那对Java中的多线程就要有足够的熟悉,包括对象锁机制、synchronized关键字,concurrent包要非常熟悉。
3、I/O,Socket编程,首先要熟悉Java中Socket编程,以及I/O包,再深入下去就是Java NIO,再深入下去是操作系统底层的Socket实现,了解Windows和Linux中是怎么实现socket。
4、JVM要了解,拓展眼界, 了解之后眼界会更宽阔,比如Java内存模型(会对理解Java锁、多线程有帮助)、字节码、JVM的模型、各种垃圾收集器以及选择、JVM的执行参数(优化JVM)等,可以去oracle网站上查看具体版本的JVM规范。
5、设计模式,如单例、模板方法、代理、适配器等等,以及在Core Java和一些Java框架里的具体场景的实现,这个可能需要慢慢积累,先了解有哪些使用场景,见得多了,自己就自然而然会去用。
6、常用数据库(Oracle、MySQL等)、SQL语句以及一般的优化。
7、JavaWeb开发的框架,如Spring、iBatis等框架,熟知原理。
8、其他一些有名的用的比较多的开源框架和包,Netty网络框架,Apache common的N多包,Google的Guava等等,也可以经常去Github上找一些代码看看。
四、多款开源框架中Netty
阿里分布式服务框架Dubbo的RPC框架使用Dubbo协议进行节点间通信,Dubbo 协议默认使用 Netty 作为基础通信组件,用于实现各进程节点之间的内部通信。
淘宝的消息中间件 RocketMQ 的消息生产者和消息消费者之间,采用 Netty 进行高性能、异步通信。
Hadoop 的高性能通信和序列化组件 Avro 的 RPC 框架,默认采用 Netty 进行跨节点通信,它的 Netty Service 基于 Netty 框架二次封装实现。除了 Dubbo、RocketMQ、Hadoop,还有开源集群运算框架Spark、分布式计算框架Storm、构建 JVM 上的并发应用和分布式应用 Akka,都采用了 Netty 作为通信基础。Netty 基本是 Java 语言处理网络 IO 的首选框架,性能和稳定性都有保障,社区比较活跃,基于 Netty 进行二次定制服务成本小。
五、行业选择Netty的原因?
举个例子:普通的服务器 100000 个连接需要 100000 个线程,服务器可能就直接卡住了,但对于 Netty 服务器,也许几个线程就够了,请求放线程池,服务器面对电商促销,应用推送服务,完全无压力。
从电商、游戏、大数据、企业软件再到通信行业,Netty 的各种特性都能够很好的支持和帮助业务快速发展,Netty 满足了过去用 Socket 进行网络编程时的几乎所有美好愿景。
设计:统一的 API,适用于不同的协议、基于灵活、可扩展的事件驱动模型、高度可定制的线程模型、可靠的无连接数据 Socket 支持(UDP)。
性能:更好的吞吐量、低延迟、省资源、减少不必要的内存拷贝;
安全:完整的 SSL/TLS 和 STARTTLS 的支持;
健壮性:不再因过快、过慢或超负载连接导致 OutOfMemoryError、不再有在高速网络环境;下 NIO 读写频率不一致的问题;
易用:完善的 JavaDoc,用户指南和样例,更有活跃的社区支持;
各位同学们,码字不易,再提醒一下所有知识点横线点进去都是课程。如果纯文字费劲,日后再来优化。辛苦大家点赞支持,提前比心。