年过完了,大多数同仁们应该已返回并进入了工作状态,估计这个时候,有很多小伙伴也在开始准备年后跳槽的事情了,对于一些做传统项目的同仁,不知道如何复习迎接面试是肯定存在的,那在此,我今天为大家准备准备下需要了解和学习的内容吧。
简单梳理一下现在互联网公司面试的技术内容,同时也希望和大家一起交流讨论,一起学习,如果不对之处欢迎指正一起学习。本文即是复习思路,亦可当做学习思路。
目前 JAVA 工程师复习分为如下几个方向:
1,Java基础(重点) : JVM原理,排序算法,Java 集合及工具类,多线程及 并发包,设计模式(23种);
2,存储相关:MySQL、Redis、MongoDB等;
3,项目框架:Spring,SpringMVC,Spring Boot;
4,分布式相关:Dubbo,Spring Cloud,Zookeeper,Eureka;
5,其他:Linux,代码优化,文件服务器(如:FastDFS)等;
下面,我就简单的对这个内容介绍下如何去复习,但具体能否有效,这个因人而异,这里仅提供给大家作为学习的建议和参考。
Java基础
说到Java,首先就是JVM ,这个还是建议大家去深入的看下书籍,因为这是每一个开发人员必备的技能,推荐国内中文版的《深入理解 Java 虚拟机:JVM 高级特性与最佳实践(第 2 版)》,当然了如果你的英文好强烈推荐看 Oracle 最新发布的 JAVA 虚拟机规范。在阅读的时候切记不能图快,要对知识的积累不是通过看书的数量来决定,而是看书的深度。不过对于一些初中级的Coder,如果想快速了解复习,那建议还是网上找个培训的视频,多看几遍,这样效率更高。
再次,多线程和并发包,重要性就不累述了,直接说一下学习方法。你首先要理解多线程不仅仅是 Thread 和 Runnable 那么简单,整个并发包下面的工具都是在为多线程服务。对于多线程的学习切不可看几篇面试文章,或者几个关键字 CountDownLatch,Lock 巴拉巴拉就以为理解了多线程的精髓。
数据存储作为每个软件项目的重点,因此数据库也是我们必须学习的重点内容。基于Mysql数据库,从简单的SQL优化,函数的使用,到数据库索引、事务锁、触发器、存储过程等,这些都是面试官可能要问你的话题。这个重点还得看之前的工作经验,一时半会也学不了太多,只能了解皮毛。推荐书籍《高性能 MySQL》,可以认真学习巩固下。
不过现在内存式存储工具也是面试中的重点,如:Redis,MongoDB,Memcached。它们作为高速缓存,目前使用最多的要属Redis了。关于Redis的书籍可以推荐阅读《Redis设计与实现 (数据库技术丛书)》。那我们说说常见的面试题吧!
1)Redis有哪些数据结构?
2)Redis与MongoDB、Memcached的区别?
3)使用redis有哪些好处?
4)Redis如何做持久化的?
5)是否使用过Redis集群,集群的原理是什么?
一谈框架就想起来 Spring,一说 Spring 就想起来 IOC,AOP。因为大家都在用这个框架,所以对于框架也不需要看一些其他的,直接就深入了解一下 Spring 就可以了。通过上面的叙述你已经了解了小编的思路,看什么都要看他的实现原理,所以直接推荐你一本书《Spring 技术内幕》然后对着自己现有的 Spring 项目 Debug,从请求的流转梳理知识点。Spring 出来这么久大家对基本的知识已经了然于胸,重要的是看其解决问题的思路和原理。
比如需要实现在 Bean 刚刚初始化的时候做一些操作,是不是需要使用InitializingBean?那么具体怎么使用,它的原理是什么,Spring Bean 的生命周期是什么样子,通过具体的使用场景逐步展开说明。这样复习效果会更好一些,然后再逐步的思考每一个知识点里面涉及的更多的知识点,比如 AOP 里面的 Proxy 都是基于什么原理实现,有什么优缺点。
目前网络公司,只要是分布式开发,SpringBoot就是个热门面试的话题。这个大家一定的学习了解,要知其然知其所以然。比如面试官问你,什么是SpringBoot,为什么要用SpringBoot,SpringMVC和SpringBoot有什么区别,及SpringBoot配置等相关?这是面试官最常见的问题。
Java项目目前最流行的莫过于分布式开发了,而却这也是一个老生常谈的话题,近几年非常的火,说起分布式,如果你只知道Dubbo,那可真就out了。目前流行的分布式开发有:Dubbo和SpringCloud,他们在很多地方有很大的区别。首先,他们都是用来解决分布式服务治理,都需要注册中心来注册服务(提供者和消费者模式)。
主要区别:
1)dubbo由于是二进制的传输(RPC协议),占用带宽会更少;而springCloud是 http协议传输,带宽会比较多,同时使用http协议一般会使用JSON报文,消耗 会更大;
2)dubbo的开发难度较大,原因是dubbo的jar包依赖问题很多大型工程无法解 决;而Springcloud的接口协议约定比较自由且松散,需要有强有力的行政措施 来限制接口无序升级;
3)dubbo的注册中心可以选择zk,redis等多种,springcloud的注册中心只能用 Eureka或者自研
基于Dubbo和Spring Cloud的技术栈比较:
Dubbo | Spring Cloud | |
---|---|---|
服务注册中心 | Zookeeper | Spring Cloud Netflix Eureka |
服务调用方式 | RPC | REST API |
服务监控 | Dubbo-monitor | Spring Boot Admin |
服务网关 | 无 | Spring Cloud Netflix Zuul |
断路器 | 不完善 | Spring Cloud Netflix Hystrix |
分布式配置 | 无 | Spring Cloud Config |
服务跟踪 | 无 | Spring Cloud Sleuth |
消息总线 | 无 | Spring Cloud Bus |
数据流 | 无 | Spring Cloud Stream |
批量任务 | 无 | Spring Cloud Task |
目前国内的中小民营科技公司,大多数都在使用Dubbo作为分布式开发的服务治理,而合资和外资公司基本都在使用SpringCloud。但目前由于Dubbo技术栈瓶颈问题,导致好多中小公司的项目做着做着就出现很多问题,如:服务跟踪、服务熔断等无法解决,现在也有部分公司在慢慢向SpringCloud转型。但这里我要申明的是,技术选型都是基于项目的需求和业务,并非SpringCloud就比Dubbo好,各有各的优势,毕竟Dubbo也在阿里这个大型电商平台服役过多年。
Java程序员面试,不是把上面我说的那些学好就可以的,如果你有这想法就大错特错。我曾经的一次面试,由于对Linux操作经验不足直接就被人家指走。人家还告诉我,Linux应作为每个开发者必备的技能。所以,在平时的开发中,一定要多了解和学习Linux的使用,不要认为Linux下的环境配置和服务发布是运维的事情。其次,对一个有一两年及以上工作经验的面试者,代码优化和项目规范等可能也是某些面试官常问的问题。在此我大概总结一下,供大家参考。
1)Linux操作及基本命令;
2)代码优化及范及;
3)WebService相关问题;
4)接口安全(涉及加密算法)(高级工程师);
5)高并发、集群及负载均衡(高级工程师);
6)其他开放性问题;
说了这么多,我想大家大概也知道该复习该看什么了。但也不要忘了自己工作经历的项目,在准备跳槽面试前,一定得认认真真总结一下,尤其是用到的一些技术,曾经遇到的技术难点和突破点,都是如何解决的,这是面试官很看重的。我们学了这么多,最终都是要去解决技术问题的,这才是我们的价值所在。
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有