ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

网易2015校招Java笔试题深度拆解:四大核心考点与面试实战

网易2015校招Java笔试题深度拆解:四大核心考点与面试实战 每年到了金九银十总有人翻出各大厂的历年校招真题来刷。网易2015校招JAVA工程师笔试题虽然过去不少年头了但放到现在的面试环境下看依然很有参考价值。那会儿的题目风格和现在不太一样更偏向基础功底的考察没有那么多弯弯绕绕的场景题就是实实在在看你Java基础、集合、并发、JVM、算法这些底层能力。我当时刷这套题的时候很多知识点都是第一次系统性地去查漏补缺可以说这套题帮我打下了比较扎实的Java根基。所以今天想把这套题拿出来结合我后来作为面试官的经验好好拆解一下背后真正想考察的东西。不仅是题目本身更重要的是每类题目背后对应的知识体系以及在实际开发中我怎么理解这些知识点的。如果你是准备校招的Javaer或者工作了一两年想回头补基础的这篇文章值得你花些时间好好看看。它适合所有想进大厂做Java后端开发的人也适合那些觉得自己基础不牢、想系统梳理一遍知识体系的人。我尽量用当时做题的心路历程加上现在回头看的新理解把每一块都讲透。1. 网易2015校招Java笔试题的整体画像与考察主线先说这套题的整体风格。网易的笔试一直有自己的一套逻辑不像有些公司会出特别偏门的题网易更倾向于考察“你在这个语言上有没有真正下过功夫”。2015年那会儿移动互联网正是高速发展期Java后端岗位的需求量很大但他们家的笔试题并没有为了难而难而是在基础题里埋了很多“陷阱”这些陷阱恰恰是实际写代码时容易踩坑的地方。1.1 题型分布与试卷结构回顾从网上流传的版本和我当时的记忆来看网易2015校招Java工程师笔试题主要分为几个大块单选多选题、简答/论述题、编程题有的还会带一点逻辑推理题。选择题部分重点考察的是Java基础语法、集合框架、异常机制、多线程等基础概念。这里要注意的是网易的选择题很少会直接问你“下列说法正确的是”而是喜欢给你一段代码问输出结果是什么。这种题目考察的不只是背概念而是真正理解代码的执行流程。比如String相关的题几乎每年必考他们会把String、StringBuilder、StringBuffer混在一起出考察你对不可变类和字符串常量池的理解。简答题则侧重JVM、类加载、并发等相对进阶的内容。我记得当年有关于JVM内存模型的问题还有synchronized和Lock的区别这类经典问题。这些题目在现在看来已经算是“八股文”了但在当时确实是考察一个Java工程师是否合格的重要标准。因为这些问题背后涉及的知识直接决定了你能否写出高性能、线程安全的代码。编程题一般会有一两道算法题网易比较喜欢考排序、查找、字符串处理类的经典算法难度不会特别夸张但要求你能写出完整可运行的代码并且要考虑边界条件。1.2 这套题真正想考察的底层能力我现在以面试官的视角回头看网易这套笔试其实在筛选三方面的能力。第一是Java基础功底的扎实程度。这一点不过多解释基础不牢后面很多东西都是空中楼阁。比如对equals和hashCode的理解对异常处理机制的理解这些如果只是停留在背概念层面遇到稍微变形一点的题目就会露馅。第二是编程思维和代码风格。编程题部分能看出来一个人的代码组织能力。我当时自己觉得算法题写得不错但回头看代码里有很多可以优化的地方比如变量命名不够规范、没有考虑输入异常的情况、没有添加必要的注释等。网易的面试官阅卷时其实会关注这些细节因为一个能在笔试阶段就写出整洁代码的人在团队协作中也会更让人放心。第三是解决问题的思考深度。这一点主要从简答题中体现。比如同样问“HashMap的原理”有的人只会回答“数组加链表”但真正有深度的人会从哈希算法、扩容机制、线程安全、红黑树优化等多个层面展开而且能结合实际场景说明为什么用HashMap而不是Hashtable。这种思考深度靠临时抱佛脚是补不出来的。2. 核心考点深度拆解真正决定你笔试成绩的四大知识板块网易2015校招Java笔试题涉及的知识面挺广但核心考点比较集中。我把它们归纳为四个大板块JVM与内存管理、集合框架底层原理、并发编程、类加载机制。这四个板块基本覆盖了当时试卷的70%以上内容也是现在各大厂面试Java工程师时必问的范畴。2.1 JVM与内存管理从基础概念到排查实践JVM相关内容在笔试题里占比很高。选择题常考的是JVM内存区域的划分、哪些区域是线程共享的、哪些是线程私有的简答题则更偏向垃圾回收机制和内存溢出问题的排查思路。先说内存区域的划分。JVM的内存区域主要分为程序计数器、虚拟机栈、本地方法栈、堆、方法区其实在JDK 8之后改为元空间。其中程序计数器、虚拟机栈、本地方法栈是线程私有的堆和方法区是线程共享的。这个知识点看起来简单但笔试中经常会和垃圾回收机制结合出题考察你对“哪些区域需要回收、哪些区域不需要回收”的理解。我当时在实际开发中遇到过一个问题就是内存溢出OutOfMemoryError的排查。网易的题里会问“如果线上环境出现了OOM你怎么排查”。这个问题考察你的实战能力。标准的排查思路是先通过jstat、jmap、jvisualvm等工具导出堆内存快照然后结合日志分析具体情况。如果是堆溢出分析是不是有大对象长期占用内存如果是方法区溢出看是不是动态生成了大量的类如果是栈溢出看是不是有无限递归调用。垃圾回收这块网易喜欢考的是GC Roots可达性分析。很多新手会误以为引用计数法就是主流JVM的实现方式实际上HotSpot虚拟机采用的是可达性分析算法。从GC Roots出发通过引用链向下搜索能被搜索到的对象是存活的反之则是可以被回收的。GC Roots包括虚拟机栈中引用的对象、方法区中静态属性引用的对象、方法区中常量引用的对象、本地方法栈中JNI引用的对象。2.2 集合框架底层原理HashMap是永远的主角集合框架这块如果让我只说一个必考内容那一定是HashMap。网易2015年的笔试题里HashMap相关的选择题出现了不止一道从它的数据结构、put操作的过程、扩容机制、到为什么是线程不安全的都涉及到了。先说HashMap的底层数据结构。JDK 1.7及之前是数组加链表JDK 1.8之后是数组加链表加红黑树。当链表的长度超过8时会转换为红黑树当红黑树的节点数小于6时又转换回链表。这里有一个值得思考的问题为什么阈值是8这其实是基于泊松分布的统计结果在负载因子为0.75的情况下链表长度达到8的概率已经非常低了不到千万分之一所以用8作为链表的临界值是比较合理的。put操作的过程也是高频考点。大致流程是通过key的hashCode经过扰动函数处理得到hash值然后通过hash和数组长度减1的位运算来确定元素存放的位置。如果该位置为空直接存放如果有值则比较hash值以及通过equals方法比较key如果相同则覆盖旧值否则以链表或红黑树的方式处理冲突。这里有个很多人容易忽略的细节就是为什么HashMap的容量总是2的n次幂。因为这样在计算数组下标时可以使用hash和(length-1)做位与运算这样比取模运算效率更高而且只有当容量是2的n次幂时length-1的二进制位才全是1这样才能保证散列均匀。关于线程安全问题HashMap在多线程环境下扩容时可能会出现死循环问题这个在JDK 1.7时是真实存在的一个bug。虽然JDK 1.8通过改变扩容方式在一定程度上解决了这个问题但HashMap依然不是线程安全的。在笔试题中如果你需要回答线程安全版本的替代方案要能说出ConcurrentHashMap、Hashtable、Collections.synchronizedMap这几个选项的区别尤其是ConcurrentHashMap在JDK 1.7和1.8之后分别是如何通过分段锁和CAS加synchronized来实现线程安全的。2.3 并发编程从synchronized到JUC的进阶之路并发编程是Java面试的深水区也是网易笔试的必考板块。2015年的考题中关于线程的创建、生命周期、线程安全、锁机制都有涉及。而且网易比较喜欢把并发知识放在一个贴近业务场景的代码段里出题比如考虑“下面这段代码是否存在线程安全问题”。线程的几种创建方式应该算是送分题继承Thread类、实现Runnable接口、使用Callable和FutureTask以及通过线程池创建。但这里要理解得更深入一些比如Thread类和Runnable接口其实是一种组合与策略模式的体现使用Runnable接口能将任务与线程解耦更容易实现多线程间的资源共享。synchronized和Lock的区别是简答题的常客。我当时整理过一个比较全的对比synchronized是Java语言内置的关键字而Lock是JDK 5之后在java.util.concurrent.locks包下提供的接口synchronized在发生异常时会自动释放锁而Lock必须手动在finally块中释放synchronized在获取锁的等待过程中不能中断而Lock可以使用lockInterruptibly方法响应中断synchronized无法知道是否成功获取到锁而Lock可以通过tryLock方法非阻塞地尝试获取锁在性能方面如果竞争不激烈synchronized的性能与Lock差别不大但在竞争激烈时Lock的性能往往会更好因为synchronized在竞争激烈时可能会发生锁升级导致性能下降。如果深入聊synchronized的底层实现就要谈到锁的升级过程偏向锁、轻量级锁、重量级锁。JVM会通过CAS操作以及Mark Word头信息来管理锁状态尽量避免线程间不必要的上下文切换。这个知识点现在很多面试官喜欢深问但在2015年的笔试中能回答出synchronized基于监视器锁monitor实现的原理就已经算不错了。线程池这块网易的笔试也有涉及核心是要理解ThreadPoolExecutor的七个核心参数核心线程数、最大线程数、空闲线程存活时间、时间单位、阻塞队列、线程工厂、拒绝策略。以及在实际开发中为什么推荐使用ThreadPoolExecutor手动创建线程池而不是用Executors的静态方法因为Executors.newFixedThreadPool的阻塞队列是无界的当任务非常多时可能堆积大量的内存请求导致OOM。2.4 类加载机制与双亲委派模型类加载机制是Java比较有特色的一个知识点网易在简答题里出过“描述一下JVM加载class文件的原理机制”。这个问题如果只回答“加载、验证、准备、解析、初始化”这五个阶段可能只能得到基础分真正能加分的是对双亲委派模型的理解以及你能否例举掉坑实战。类加载的五个阶段中“准备”阶段是给类的静态变量分配内存并设置初始值的阶段注意这里使用的内存是方法区。一个容易出错的点就是准备阶段设置的初始值是零值而不是你在代码中写的值。比如static int x 10在准备阶段x的值是0只有到初始化阶段才会调用类构造器clinit方法把x赋值为10。双亲委派模型则是类加载的核心机制。当一个类加载器收到类加载请求时它不会自己先去加载而是先把请求委派给父类加载器去执行每一层都如此因此所有的加载请求最终都会传送到顶层的启动类加载器。只有当父加载器反馈自己无法加载这个类时子加载器才会尝试自己去加载。这个机制最大的好处就是保证了Java核心类库的安全。因为在双亲委派模型下即使你用自定义的java.lang.String类也不会被加载成功而是会使用JDK自带的String类避免了核心类被恶意覆盖。我记得在笔试里有一次出了“已知类加载的双亲委派模型如何实现一个类只被加载一次”这样的题目其实是考察你对类加载机制完整周期的理解。3. 经典题目逐题拆解从题干到采分点的完整分析整理了一些当时流传出来的真题我按类型挑几道代表性题目一题一题拆解一下命题人的思路和答题方向。这部分的题目我尽量还原题干的核心意思不一定逐字完全一致但考察点是一样的。3.1 Java基础语法与对象的生命之旅有一道典型的代码输出题考察的是静态代码块、构造代码块、构造方法的执行顺序。题目给出一个父类和一个子类各自都有静态代码块、实例代码块和构造方法让你输出创建子类对象时的执行顺序。这道题如果只靠背口诀“静态先行、父类先行”是不够的你需要真正理解类加载和对象创建的两个阶段。静态代码块是在类加载的初始化阶段执行的且只执行一次实例代码块和构造方法则发生在每次创建对象的时候。完整的执行顺序是父类静态代码块、子类静态代码块、父类实例代码块、父类构造方法、子类实例代码块、子类构造方法。我当时做这道题的时候一开始把“父类静态代码块、父类实例代码块、父类构造方法、子类静态代码块、子类实例代码块、子类构造方法”这样写结果是错的原因就是没有把静态代码块与创建对象的步骤分开理解。静态代码块是在类加载阶段执行的跟创建对象的过程是独立的必须先执行父类静态代码块再执行子类静态代码块只有类加载完成之后创建子类对象的时候才会轮到父类的实例代码块和构造方法。另一道关于String的经典题问String s new String(abc)创建了几个对象。这题的答案是“一个或两个”。如果字符串常量池中已经有“abc”字面量那只会在堆中创建一个String对象如果常量池中还没有“abc”那么会在常量池中创建一个字面量对象同时在堆中创建一个String对象。注意String s abc这种方式如果常量池中已有该字符串则直接返回常量池中的引用不创建新对象。深入一点还要理解String为什么是不可变的。因为String类是final的而且它内部使用final修饰的char数组来存字符。不可变带来的好处包括字符串常量池可以共享字符串对象不会被意外修改String对象可以作为HashMap的key哈希值可以缓存在多线程环境下String是线程安全的。这也是为什么很多面试官喜欢考“为什么String要设计成不可变”的原因。3.2 JVM相关题目从内存模型到对象存活判定简答题里有一道比较有区分度的题目描述一下JVM运行时数据区以及哪些区域会发生内存溢出。答案要能分点说明。程序计数器是当前线程所执行的字节码行号指示器此区域是唯一一个不会发生OutOfMemoryError的区域虚拟机栈描述的是Java方法执行的内存模型每个方法在执行的同时会创建一个栈帧如果线程请求的栈深度大于虚拟机所允许的深度会抛出StackOverflowError堆是被所有线程共享的区域存放对象实例这一块最容易发生内存溢出方法区用于存储已被虚拟机加载的类信息、常量、静态变量等数据在JDK 8之后由元空间实现如果加载的类太多也可能发生内存溢出本地方法栈服务于native方法使用内存溢出与虚拟机栈类似。还有一道关于判断对象是否存活的题目问的是“哪些对象可以作为GC Roots”。备选项一般包括虚拟机栈中引用的对象、方法区中静态属性引用的对象、方法区中常量引用的对象、本地方法栈中JNI引用的对象。这题本身不难但要注意的是很多人会把“所有还在使用的对象”当成GC Roots这是概念混淆。GC Roots本质上是引用的起点不是所有存活对象本身。3.3 并发经典从理论概念到代码层面的多线程应用有一道多线程的题很有意思题干大概是这样有四个线程分别是Thread1、Thread2、Thread3、Thread4其中Thread1在线程A执行完后执行Thread2在线程A执行完后执行Thread3在线程B执行完后执行Thread4在线程C执行完后执行。让你用一种方式实现这个执行顺序的控制。这道题考的是一个经典的线程依赖场景。最简单的实现方式是使用线程的join方法在主线程中按顺序调用相关线程的join确保前一个线程执行完后才会继续执行后续的逻辑。但更优雅的方式是使用CountDownLatch或者CyclicBarrier用计数器来控制线程的启动时机。我当时在笔试现场用的是join方式思路是把需要等待前一个线程完成的线程在前一个线程中调用它的join方法。不过后来再思考这种方式不够灵活因为在线程内部调用别的线程的join会让线程之间的关系变得隐含不好维护。更好的方式是使用CompletableFuture通过supplyAsync和thenApply等组合方式把线程间的依赖关系描述得更加清晰。还有一道关于线程安全的选择题很典型问的是你如何保证线程安全。备选答案有使用synchronized锁住需要同步的方法、使用volatile修饰成员变量、使用AtomicInteger等原子类、将成员变量定义为final。这里需要注意volatile只能保证可见性和有序性并不能保证原子性。如果把一个int变量用volatile修饰多个线程同时执行count依然会出现线程安全问题因为count在字节码层面其实是三步操作读取、加一、写回。如果要保证原子性应该使用AtomicInteger的incrementAndGet方法底层通过CAS实现。3.4 编程题手写排序与链表的思维实战网易2015年的编程题里有一道快速排序的题题目要求手写快排并分析时间复杂度还有一个链表相关的题要求反转链表或者判断链表是否有环。这类题在准备阶段一定要亲手写完整可运行的代码不能只在脑子上过一遍。手写快排时关键的边界条件特别容易出错。我当时写快排的时候每次递归调用都需要判断左指针是否小于右指针否则会栈溢出。另一个常见的坑就是选择基准值的方式如果每次选择最左边的元素作为基准值当数据已经有序时快排会退化成冒泡排序的时间复杂度O(n^2)。更稳妥的做法是使用三数取中法选择基准值或者在每一轮递归前将基准值与随机位置交换。链表反转这道题我建议至少掌握两种写法迭代法和递归法。迭代法使用三个指针pre、cur、next每次循环将cur的next指向pre然后三个指针依次后移。递归法的核心思路是假设当前节点之后的链表已经反转完成只需要将当前节点的下一个节点的next指向当前节点再将当前节点的next置为空。我最近在做面试复盘的时候发现很多候选人能写出链表反转的核心逻辑但对链表的边界检查意识不够比如没有考虑空链表和只有一个节点的链表。网易笔试的判卷系统如果是机器判题会有边界测试用例这类细节会直接影响通过率。4. 由网易笔试题引发的Java学习路线与避坑指南聊完具体的题目我还是忍不住想说一下这套题背后反映出来的学习思路。当年我刷这套题的时候完全是靠死记硬背很多东西虽然能答上来但并没有真正理解。后来在工作里踩了不少坑回头再想这些题目才明白了“原来网易考的是这么一层意思”。所以这一部分我结合自己多年来的实际经验给准备参加校招或者想提升Java基础的朋友一些具体的学习路线和建议。4.1 基础复习不要只看面经要回归源码与官方文档现在的学生很喜欢在网上背“Java面试八股文”这确实是一种快速应对笔试的方法但它有一个很严重的问题你背的是别人咀嚼过的二手知识一旦题目稍微变一下说法你可能就认不出来了。就像网易这套题同样一个知识点它不直接考你定义而是给你一段代码让你分析结果。如果你对源码的运行机制没有真正的理解就很难答对。所以我的建议是阅读源码一定要放在背八股文的前面。比如HashMap你可以先看官方文档对HashMap的描述然后去GitHub或者本地JDK源码里一行一行跟读put方法的实现。第一次看可能很吃力但一旦读明白你会对整个哈希表的设计思想有质的理解。这种理解不是背题能替代的。4.2 并发编程需要感性理解建议从业务场景入手并发编程知识如果不结合场景去学很容易学成空中楼阁。网上很多人问“Java并发编程到底怎么学才能学会”我的建议是先不要碰那些抽象的理论而是从模拟一个真实场景开始。比如你自己写一个简单的库存扣减服务用多线程模拟高并发请求然后你就会亲眼看到超卖现象这时候再引入synchronized、ReentrantLock、Atomic类你就能真正理解它们的作用。回到网易的笔试题并发部分常考的知识点其实都可以通过实践来加深理解。你可以用自己的电脑写一个简单的生产者消费者模型把synchronized的wait和notify机制用熟再写一个抢票场景用ReentrantLock和Condition来实现公平锁和非公平锁的切换然后再用ThreadPoolExecutor自定义一个线程池看看不同参数组合下程序的表现。做完这些你会发现笔试题目反而变得简单了。4.3 刷题过程中的常见误区与排查思路引导刷题时一个很常见的误区是只刷选择题不写编程题。选择题能帮你快速检查知识点但编程题才是真正拉分的地方。网易的笔试中编程题占比有时候不大但它往往决定你是否能进入面试环节。因为技术面试官从编程题中能看到你的代码风格和问题拆解能力这不是选择题能体现出来的。另外在刷题时遇到不理解的代码要亲手运行调试。我当年刷很多并发相关的选择题只靠想象推演出输出结果这样效率很低而且很多时候推演结果是错的。比如Thread.sleep和Object.wait的区别只有写代码运行过才能真正感知到sleep不会释放锁而wait会释放锁。自己在IDE里打断点一行一行看线程的切换过程比死记硬背十遍都管用。4.4 面向笔试准备的实用学习框架如果时间有限我建议按照下面这个框架来安排复习这基本是对网易这类大厂校招Java笔试题考点的覆盖面。Java语言基础数据类型与包装类型、String相关类、异常体系、泛型、反射、注解、枚举集合框架List、Set、Map接口区别ArrayList与LinkedList区别HashMap底层原理与扩容机制ConcurrentHashMap的演进JVM内存区域划分、对象创建过程、GC算法与收集器、类加载机制与双亲委派模型、JVM调优参数并发编程线程创建方式、线程生命周期、synchronized与Lock、volatile、AQS、线程池、CAS算法与数据结构二分查找、快速排序与归并排序、链表操作、二叉树遍历、动态规划入门、字符串处理网络与操作系统基础TCP连接与断开、HTTP协议、进程与线程的区别按照这个框架每天解决一个重点再配合刷题和看源码坚持两个月左右应付大厂笔试的Java技术栈部分问题不大。5. 从真题到实战一套高效掌握Java核心知识的实操计划很多人觉得看完了这篇文章收藏了就算学会了。实际上知识只有经过输出和实践才能变成自己的。最后一个部分我给大家整理一个大概三周到四周的实操计划直接用网易2015这套笔试题作为靶子一步步把相关知识吃透。5.1 第一周以题带学建立知识图谱第一周的目标是“看题不慌见到关键词能迅速定位到对应知识点”。做法很简单把网易2015这套题的每一道题当成一个节点不管这道题做对没有都去查一下它涉及的知识点并整理出自己的知识图谱。我当时用了一个笨但非常有效的方法拿一张白纸把题目涉及的知识点全部手写下来然后用箭头标注它们之间的关系。比如String的题目会牵扯到字符串常量池、不可变类、equals与hashCode然后又从equals与hashCode引申到HashMap再从HashMap延伸到红黑树和哈希冲突。一天整理一个板块一周后就能形成一张完整的知识网络。这里要特别提醒一下不要只整理自己会的知识点不会的反而要花更多时间去补充。笔试前暴露问题比面试时暴露问题好得多。5.2 第二周源码研读与画图理解第二周开始啃源码我推荐优先阅读这几个类String、ArrayList、HashMap、ConcurrentHashMap、ThreadPoolExecutor。这五个类基本覆盖了Java日常开发最核心的底层逻辑。读源码的时候建议一边读一边画图。比如HashMap的put操作流程图从计算hash值到数组下标定位再到链表遍历和红黑树插入每一步都画出来。画图这个过程会让你发现理解上的盲区比如有没有考虑扩容的触发条件有没有考虑key为null时的特殊处理。把这些细节补上之后考试遇到任何变形题都不用怕。以画图的方式读源码还有一个好处就是能帮你真正理解复杂问题的拆解思路。例如ConcurrentHashMap在JDK 1.8之后为什么放弃分段锁改用CAS加synchronized画图之后你就能看到链表长度很短时CAS失败的代价很低而链表长到一定程度时升级为synchronized锁的效率比大量CAS自旋更好。5.3 第三周编程题专项训练第三周集中精力做编程题。网易笔试题的编程题一般不会太难但特别重视代码的完整性和边界条件。这个阶段建议不要用IDE的自动补全进行编码直接在LeetCode的模拟面试模式或者文本编辑器里手写这能训练面试时的“裸写”能力。编程题训练要坚持“先思考再动键盘”给自己10分钟思考时间想清楚时间复杂度和空间复杂度然后直接写代码。写完之后再对照题解分析自己的代码有哪些可以优化的地方。比如排序算法至少把冒泡、选择、插入、快排、归并都手写一遍并分析它们的时间复杂度和稳定性。我当年还会专门拿一个本子记录每次的手写代码。这个方法看起来原始但对加深记忆非常有效。每次写完再去优化能明显感受到自己的进步。5.4 第四周模拟笔试与错题复盘最后一周的核心是模拟考试环境和错题复盘。找两套难度相当的Java笔试题定时90分钟模拟真实的笔试节奏。做完之后千万不要只对答案而是要把每道题背后涉及的原理梳理一遍尤其是错题。对于错题我建议按照下面的思路来复盘为什么做错是知识点没掌握还是审题不清或者是时间分配不合理导致后面大题没做完如果是知识点的问题回到前两周的知识图谱和源码笔记中重新学习如果是时间分配问题下次模拟测试就要调整策略。我还发现一个特别实用的办法把错题自己给自己讲一遍假装面前有一个面试官你要用口语把这道题的来龙去脉讲清楚。如果你能讲得让“面试官”听懂说明你真的掌握了如果讲着讲着卡住了说明那个位置的认知还有缺口马上回去补。这个方法我一直推荐身边的人用效果比闷头刷题好很多。6. 补充一个实战小技巧最后再分享一个我自己用得很顺手的小技巧准备面试或者刷题的时候建一个云笔记按主题把每次遇到的高频问题和自己的思考记录下来不需要长几句话就行。比如遇到一道关于HashMap扩容的问题就记下当天自己的理解然后等一个月后再回来看看你会发现当时的认知有偏差或者可以补充的地方这就是成长。这套方法不管你是准备校招、跳槽还是单纯想提升Java技术水平都值得一试。网易2015年的笔试题虽然是老题但经典的考察点永远不会过时真正把这块基础打牢了不管以后面试什么公司都能游刃有余。
返回列表