名互联网商家校招 Java 开发岗面试知识点解析

上的道,损有余而补不足,是故虚胜实,不足胜有余。

正文作者以同年之内到过多街面试,应聘岗位都为 Java
开发方向。在频频的面试中,分类总结了 Java 开发岗位面试中之一对知识点。

要不外乎以下几单部分:

  1. Java 基础知识点
  2. Java 常见集合
  3. 高并发编程(JUC 包)
  4. JVM 内存管理
  5. Java 8 知识点
  6. 网络协议相关
  7. 数据库相关
  8. MVC 框架相关
  9. 好数目有关
  10. Linux 命令相关

面试,是豪门打全校走向社会之率先步。

互联网公司的校园招聘,从形式上说,面试一般分为 2-3 车轮技术面试 +1 轮 HR
面试。但是有柜真正是未曾 HR 面试的,直接就是三轮技术面。

技能面试中,面试官一般会先行就您所应聘的岗位开展连锁文化之考察,也被基础知识和工作逻辑面试。只要您回复的非是特别差,面试官通常会说:“咱们写个代码吧”,这个上就从头了算法面试。

也就是说,一车轮技术面试 = 基础知识和业务逻辑面试 + 算法面试。

每当本篇文章被,我们第一从技术面试聊起。技术面试包括:业务逻辑和基础知识面试。

先是是业务逻辑面试 ,也就算是说道项目。

面试官会对君简历及勾的多单种类里面某拿出去与公聊天。在里面,会指向你所开的事物进行深挖掘。

连:为什么要这么做?优缺点分析,假如重新为你开相同次等,你打算怎么开?
等等。这个环节要考察我们对自己做了之类别(实习项目或者校内项目)是否发生一个清的认。

关于业务逻辑面试的备选,建议于平时多考虑总结,对品种之数来源、整体运行框架还应该熟悉掌握。

如你于某局见习过程被,就可以展开总结,而不必等交快离职的时刻慌慌张张的去总结该项目。

紧接下去是基础知识面试。

Java
开发属于后台开发方向,有人说晚大开发大坑,因为需要上的事物顶多矣。没错,这个岗位虽是急需上学多东西。包括:本语言(Java/C++/PHP)基础、数据库、网络协议、Linux
系统、计算机原理甚至前端相关文化且足以洞察你,而且,并无超纲 。

偶,你报的是后台开发岗,并且熟悉的凡 Java 语言,但是面对试官却是 C++
开发方向的,就是这样无奈~

吓了,闲话少说,让咱初步分类讲解常见面试知识点。

(一) Java 基础知识点

1)面向对象的风味产生哪些?

报经:封装、继承与多态。

2)Java 中盖与重载是呀意思?

解析:覆盖与重载是比关键的基础知识点,并且爱混淆,所以面试中泛。
报:覆盖(Override)是凭子类对父类方法的平栽重写,只能于父类抛来还少之老大,访问权限不克比较父类的有些。

吃蒙的措施不可知是 private
的,否则只是于子类中重新定义了一个艺术;重载(Overload)表示与一个像样中可发差不多单名称相同的方法,但这些方法的参数列表各不相同。

面试官: 那么做重载的尺码发生哪?

报经:参数类型不同、参数个数不同、参数顺序不同。

面试官: 函数的归值不同得组成重载吗?为什么?

报经:不可以,因为 Java 中调用函数并不需要强制赋值。举例如下:

正如两独主意:

    void f(){}
    int f(){ return 1;}

一旦编译器可以依据语境明确判断出语义,比如以 int x =
f();中,那么的确可以这区分重载方法。不过,
有时你并无体贴道的归来值,你想要之是办法调用的外力量 (这常被称为
“为了副作用要调用”),这时你可能会见调用方法要忽略其归来值,所以如果如下的调用:

    fun();

此刻 Java 如何才能够判定调用的凡呀一个 f()
呢?别人怎样理解这种代码呢?所以,根据章程返回值来分别重载方法是废的。

3)抽象类和接口的别有安?

答:

  1. 虚幻类吃得没有抽象方法;接口中之不二法门要是空泛方法;
  2. 泛类吃得以出常见的积极分子变量;接口中之变量必须是 static final
    类型的,必须于初始化 , 接口中只有常量,没有变量。
  3. 空洞类只能单继承,接口可以连续多单父接口;
  4. Java8 中接口中见面时有发生 default 方法,即方法可以于实现。

面试官:抽象类和接口如何挑选?

答:

  1. 若是一旦创造不带其他方式定义及分子变量的基类,那么即使当选择接口而非是抽象类。
  2. 要掌握有类应该是基类,那么首先独挑选的该是吃它们化一个接口,只有以必须要有道定义和分子变量的时候,才应选择抽象类。因为虚无类中允许存在一个还是多单叫现实贯彻之不二法门,只要方法没有让所有贯彻该类就本是抽象类。

4)Java 和 C++ 的区别:

剖析:虽然咱无绝懂
C++,但是就是是会见这样问,尤其是三面对(总监级别)面试中。

答:

  1. 都是面向对象的语言,都支持封装、继承与多态;
  2. 指南针:Java 不提供指针来一直看内存,程序更加安全;
  3. 继续: Java 的好像是单继承的,C++ 支持多重继承; Java
    通过一个类似实现多个接口来贯彻 C++ 中的不胜枚举继承; Java
    中类似非得以基本上延续,但是!!!接口可以多累;
  4. 内存: Java 有机动内存管理机制,不需程序员手动释放无用内存。

5)Java 中之价值传递和援传递

剖析:这类题材,面试官会手写一个例证,让您说出函数执行结果,详细举例请查阅自己之博客:Java
值传递与援传递基础分析。

答:值传递是因目标吃值传递,意味着传递了对象的一个副本,即使副本为移,也非会见影响源对象。引用传递是据目标被引用传递,意味着传递的并无是实在的靶子,而是对象的援。

从而,外部对援对象的改观会反映至有的对象上。

6)JDK 中常用的保来什么?

答:java.lang、java.util、http://java.io、http://java.net、java.sql。

7)JDK,JRE 和 JVM 的维系与区分:

报:JDK 是 java 开发工具包,是 java
开发环境的主干零部件,并提供编译、调试以及运行一个 java
程序所待的有所工具,可执行文件和二进制文件,是一个阳台特定的软件。

JRE 是 java 运作时环境,是 JVM 的实践实现,提供了运转 java
程序的平台。JRE 包含了 JVM,但是不含有 java 编译器 /
调试器之类的开发工具。

JVM 是 java 虚拟机,当我们运行一个先后时,JVM
负责将配节码转换为特定机器代码,JVM 提供了内存管理 /
垃圾回收及安体制当。

这种独立为硬件与操作系统,正是 java 程序可以等效差编写多地处执行的故。

区别:

  1. JDK 用于开发,JRE 用于运行 java 程序;
  2. JDK 和 JRE 中都带有 JVM;
  3. JVM 是 java 编程语言的主干并且有平台独立性。

Others:限于篇幅,面试中 Java 基础知识点还有:反射、泛型、注解等。

总:本节着重阐述了 Java
基础知识点,这些题材主要是一面面试官在考察,难度不十分,适当复习生,应该没什么问题。

(二)Java 中时表现集合

汇聚这方面的观测相当多,这有些是面试中必然考的知识点。

1)说说普遍的集有哪吧?

报:Map 接口和 Collection 接口是有所集合框架的父接口:

  1. Collection 接口的子接口包括:Set 接口及 List 接口;
  2. Map
    接口的落实类似重点出:HashMap、TreeMap、Hashtable、ConcurrentHashMap
    以及 Properties 等;
  3. Set 接口的贯彻类似重点出:HashSet、TreeSet、LinkedHashSet 等;
  4. List 接口的实现类似重点出:ArrayList、LinkedList、Stack 以及 Vector
    等。

(2)HashMap 和 Hashtable 的区别有安?(必问)

答:

  1. HashMap 没有考虑并,是线程不安全的;Hashtable 使用了 synchronized
    关键字,是线程安全的;
  2. 前者允许 null 作为 Key;后者不同意 null 作为 Key。

3)HashMap 的底部实现而掌握为?

报经:在 Java8 之前,其底层实现是几度组 + 链表实现,Java8 使用了反复组 + 链表

  • 瑞黑树实现。此时而得略的以纸上画画分析:

SQL Server 1

4)ConcurrentHashMap 和 Hashtable 的区别? (必问)

报:ConcurrentHashMap 结合了 HashMap 和 HashTable 二者的优势。HashMap
没有设想并,hashtable 考虑了合的题材。但是 hashtable
在每次同步施行时都使锁住满结构。 ConcurrentHashMap
锁的办法是有些细粒度的。 ConcurrentHashMap 将 hash 表分为 16
独桶(默认值),诸如 get,put,remove 等常用操作只锁当前亟需使用的桶。

面试官:ConcurrentHashMap 的切实落实亮吧?

答:

  1. 此类包含两单静态内部类 HashEntry 和
    Segment;前者用来封装映射表的键值对,后者用来当锁之角色;
  2. Segment 是同等种植而重入的锁 ReentrantLock,每个 Segment 守护一个
    HashEntry 数组里得元素,当对 HashEntry
    数组的数额进行修改时,必须首先得到对应之 Segment 锁。

5)HashMap 的长短为什么是 2 的幂次方?

答:

  1. 透过将 Key 的 hash 值与 length-1 进行 & 运算,实现了眼前 Key
    的固化,2 底幂次方可以抽冲(碰撞)的次数,提高 HashMap
    查询效率;
  2. 要是 length 为 2 的次幂 则 length-1 转化为二进制必定是
    11111……的花样,在于 h 的二进制与操作效率会大之抢,而且空间不浪费;
  3. 设 length 不是 2 的次幂,比如 length 为 15,则 length-1 为
    14,对应的二进制为 1110,在于 h 与操作,最后一各类还为 0,而
    0001,0011,0101,1001,1011,0111,1101
    这几独岗位永远都无可知存元素了,空间浪费相当可怜。

再度不行的凡这种状况屡遭,数组可以用的职务较数组长度小了过多,这表示越增加了冲击的几乎率,减慢了询问的效率!这样虽见面造成空间的浪费。

6)List 和 Set 的分别是什么?

报:List 元素是有序的,可以重复;Set 元素是无序的,不得以另行。

7)List、Set 和 Map 之启幕容量与加载因子

答:

  1. List

  2. ArrayList 的始发容量是 10;加载因子为 0.5; 扩容增量:原容量的 0.5
    倍 +1;一蹩脚扩容后长为 16。

  3. Vector 初始容量为 10,加载因子是 1。扩容增量:原容量的 1 加倍,如
    Vector 的容量也 10,一差扩容后是容量也 20。

  4. Set

HashSet,初始容量也 16,加载因子为 0.75; 扩容增量:原容量的 1 倍; 如
HashSet 的容量为 16,一赖扩容后容量也 32

  1. Map

HashMap,初始容量 16,加载因子为 0.75; 扩容增量:原容量的 1 倍增; 如
HashMap 的容量也 16,一涂鸦扩容后容量也 32

8)Comparable 接口和 Comparator 接口有啊分别?

答:

  1. 前者简单,但是要是急需还定义比较类型时,需要修改源代码。
  2. 后任不需修改源代码,自定义一个比较器,实现自定义之比较艺术。
    切实分析参考我之博客:Java 集合框架—Set

9)Java 集合的短平快砸机制 “fail-fast”

答:它是 java
集合的一样栽错误检测机制,当多独线程对聚集进行组织及之改动之操作时,有或会见起
fail-fast 机制。

例如 :假设是个别单线程(线程 1、线程 2),线程 1 通过 Iterator
在遍历集合 A 中之元素,在某某时候线程 2 修改了集 A
的布局(是结构方面的改,而未是概括的修改集合元素的情),那么这上程序就算会丢来
ConcurrentModificationException 异常,从而产生 fail-fast 机制。

因: 迭代器在全部历时直接看集合中之始末,并且于遍历过程中使用一个
modCount 变量。集合在吃遍历期间只要情节发生变化,就见面转移 modCount
的价。

每当迭代器使用 hashNext()/next() 遍历下一个元素之前,都见面检测 modCount
变量是否也 expectedmodCount
值,是的讲话就是回遍历;否则抛出异常,终止遍历。

解决办法:

  1. 在遍历过程遭到,所有涉嫌到反 modCount 值得地方全抬高
    synchronized;
  2. 使用 CopyOnWriteArrayList 来替换 ArrayList。

总结:本小节凡是 Java 中有关集合的观,是 Java
岗位面试中一定考之知识点,除了当掌握以上的题目,包括各个集合的平底实现为建议各位同学看,加深了解。

(三)高并发编程-JUC 包

以 Java 5.0 提供了 java.util.concurrent(简称 JUC
)包,在是包被增加了于出现编程中那个常用的实用工具类,用于定义类似于线程的自定义子系统,包括线程池、异步
IO 和轻量级任务框架。

1)多线程和单线程的别与联络:

答:

  1. 当单核 CPU 中,将 CPU
    分为大粗的时空片,在列一样时刻只能有一个线程在实行,是一样种微观上轮番占用
    CPU 的建制。
  2. 多线程会存在线程上下文切换,会导致程序执行速度变慢,即以一个拥有两只线程的经过执行所待的流年较一个线程的历程执行两潮所需要的年月一旦多片。

敲定:即以多线程不见面增进程序的尽进度,反而会降低速度,但是于用户来说,可以抽用户之应时间。

2)如何指定多单线程的履行各个?

浅析:面试官会给您推个例证,如何被 10 单线程按照顺序打印
0123456789?(写代码实现)

答:

  1. 设定一个 orderNum,每个线程执行了以后,更新
    orderNum,指明下一个如果实行之线程。并且唤醒所有的等候线程。
  2. 以各一个线程的起来,要 while 判断 orderNum
    是否等于自己之要求值!!不是,则 wait,是虽然履行本线程。

3)线程和过程的区分:(必考)

答:

  1. 进程是一个 “执行中的次”,是系统开展资源分配和调度的一个单身单位;
  2. 线程是过程的一个实体,一个历程遭到装有多单线程,线程之间共享地址空间与另外资源(所以通信及齐等操作线程比进程进一步爱);
  3. 线程上下文的切换比进程上下文切换要抢多。

  4. (1)进程切换时,涉及到即过程的 CPU 环境的保留及初为调度运行过程的
    CPU 环境的装置。

  5. (2)线程切换仅需要保留及安少量的寄存器内容,不关乎存储管理方面的操作。

4)多线程产生死锁的 4 个必要条件?

答:

  1. 互斥条件:一个资源每次只能为一个线程使用;
  2. 央与保障标准:一个线程因要资源使围堵时,对都收获的资源保持不放;
  3. 切莫剥夺条件:进程已经沾的资源,在非采取完毕之前,不克强行剥夺;
  4. 巡回等条件:若干线程之间形成相同种植头尾相接的轮回等资源事关。

面试官:如何避免死锁?(经常就问之题目啊~)

报经:指定获取锁之次第,举例如下:

  1. 按部就班某线程只有获得 A 锁跟 B
    锁才会对某个资源进行操作,在多线程条件下,如何避免死锁?
  2. 得到锁之次第是迟早的,比如规定,只有取得 A 锁的线程才发生身份获得 B
    锁,按顺序获取锁就是足以免死锁!!!

5)sleep( ) 和 wait( n)、wait( ) 的区别:

答:

  1. sleep 方法:是 Thread 类的静态方法,当前线程将睡眠 n
    毫秒,线程进入阻塞状态。当睡眠时及了,会去掉阻塞,进行可运行状态,等待
    CPU 的来临。睡眠不释放锁(如果有话);
  2. wait 方法:是 Object 的方,必须和 synchronized
    关键字并下,线程进入阻塞状态,当 notify 或者 notifyall
    被调用后,会败阻塞。但是,只有重新占用互斥锁之后才见面进入但运行状态。睡眠时,释放互斥锁。

6)synchronized 关键字:

答:底层实现:

  1. 上时,执行 monitorenter,将计数器 +1,释放锁 monitorexit
    时,计数器-1;
  2. 当一个线程判断及计数器为 0
    时,则当前锁空闲,可以占据;反之,当前线程进入等状态。

含义:(monitor 机制)

Synchronized
是当加锁,加对象锁。对象锁是同等栽重量锁(monitor),synchronized
的锁机制会根据线程竞争状况于运作时会时有发生偏于锁(单一线程)、轻量锁(多个线程访问
synchronized
区域)、对象锁(重量锁,多只线程存在竞争的场面)、自旋锁等。

该要字是一个几乎栽锁之包裹。

7)volatile 关键字

答:该要字可以包可见性不包原子性。

功能:

  1. 主内存和劳作内存,直接与主内存产生交互,进行读写操作,保证可见性;
  2. 禁绝 JVM 进行的通令重排序。

剖析:关于指令重排序的题材,可以查 DCL 双检锁失效相关材料。

8)ThreadLocal(线程局部变量)关键字:

报经:当以 ThreadLocal
维护变量时,其为每个使用该变量的线程提供单身的变量副本,所以各一个线程都足以独自的更动自己之副本,而不见面影响其它线程对应之副本。

ThreadLocal 内部贯彻机制:

  1. 每个线程内部还见面维护一个好像 HashMap 的目标,称为
    ThreadLocalMap,里边会含有多了 Entry(K-V
    键值对),相应的线程被叫做这些 Entry 的属主线程;
  2. Entry 的 Key 是一个 ThreadLocal 实例,Value
    是一个线程特有对象。Entry 的企图就是:为夫属于主线程建立起一个
    ThreadLocal 实例与一个线程特有对象中的照应关系;
  3. Entry 对 Key 的援是去世引用;Entry 对 Value 的援是青出于蓝引用。

SQL Server 2

9)Atomic 关键字:

报:可以要基本数据列因原子的办法实现自增自减等操作。参考我之博客:concurrent.atomic
包下的类 AtomicInteger 的施用。

10)线程池有了解吗?(必考)

报经:java.util.concurrent.ThreadPoolExecutor 类就是一个线程池。客户端调用
ThreadPoolExecutor.submit(Runnable task)
提交任务,线程池内部维护的劳动力线程的数据就是该线程池的线程池大小,有 3
种形态:

  • 眼前线程池大小 :表示线程池中实际上工作者线程的数目;
  • 绝要命线程池大小
    (maxinumPoolSize):表示线程池中允许有的劳力线程的多寡上限;
  • 着力线程大小 (corePoolSize
    ):表示一个非超过最特别线程池大小的劳动力线程数量上限。

  • 使运行的线程少于 corePoolSize,则 Executor
    始终首选添加新的线程,而非进行排队;

  • 如果运行的线程等于或多于 corePoolSize,则 Executor
    始终首选将请在队列,而不是补充加新线程;
  • 假如无法用请求参加队列,即行已经载了,则创造新的线程,除非创建是线程超出
    maxinumPoolSize, 在这种情形下,任务将为拒。

总结:本小节情涉及到 Java
中多线程编程,线程安全等知,是面试中的严重性及难题。

(四)JVM 内存管理

既是是 Java 开发面试,那么对 JVM
的相当然也是要的,面试官一般会问您对 JVM 有询问呢?

自平常还见面把自身所了解之且说一样满,包括:JVM 内存划分、JVM
垃圾回收的含义,有什么样 GC 算法,年轻代和一直年代各自的特点都阐述一不折不扣。

1)JVM 内存划分:

  1. 方法区(线程共享):常量、静态变量、JIT(即经常编译器)
    编译后之代码也还当方法区;
  2. 堆内存(线程共享):垃圾回收的重要场地;
  3. 程序计数器: 当前线程执行之配节码的职指示器;
  4. 编造机栈(栈内存):保存有变量、基本数据类变量和堆内存中某个对象的援变量;
  5. 地方方法栈 :为 JVM 提供利用 native 方法的劳务。

2)类似-Xms、-Xmn 这些参数的意义:

答:

堆积如山内存分配:

  1. JVM 初始分配的外存由-Xms 指定,默认是大体内存的 1/64;
  2. JVM 最深分配的内存由-Xmx 指定,默认是大体内存的 1/4;
  3. 默认空余堆内存小于 40% 时,JVM 就会见叠加堆直到-Xmx
    的最好深范围;空余堆放内存大于 70% 时,JVM 会减少堆直到 -Xms
    的极致小范围;
  4. 所以服务器一般安装-Xms、-Xmx 相等以避免以历次 GC
    后调整堆的高低。对象的堆积内存由称为垃圾回收器的自行内存管理体系回收。

非堆内存分配:

  1. JVM 使用-XX:PermSize 设置非堆内存初始值,默认是大体内存的 1/64;
  2. 出于 XX:MaxPermSize 设置极端深非堆内存的高低,默认是情理内存的 1/4;
  3. -Xmn2G:设置年轻代表大小为 2G;
  4. -XX:SurvivorRatio,设置年轻代表中 Eden 区与 Survivor 区的比值。

3)垃圾回收算法有哪些?

答:

  1. 引用计数
    :原理是这目标来一个引用,即增加一个计数,删除一个援则缩减一个计数。垃圾回收时,只用收集计数为
    0 的目标。此算法最致命的凡无力回天处理循环引用的问题;
  2. 标志-清除
    :此算法执行分点儿路。第一路从引用根节点开始标记所有被引用的目标,第二阶段遍历整个堆,把未标记的对象清除;

此算法需要暂停一切应用,同时,会出内存碎片;

  1. 复制算法
    :此算法把内存空间划为少单相当的区域,每次就利用中一个区域。垃圾回收时,遍历当前运区域,把正在以受到的目标复制到另外一个区域中;

此算法每次只处理在利用被之对象,因此复制成本比较粗,同时复制过去从此还会拓展相应的内存整理,不见面并发
“碎片” 问题。当然,此算法的毛病也是好明白的,就是得简单加倍内存空间;

  1. 标志-整理 :此算法结合了 “标记-清除” 和 “复制”
    两只算法的独到之处。也是分点儿等,第一等于根节点开始标记所有受引用对象,第二号遍历整个堆,把清除不标记对象又把现有对象
    “压缩” 到堆的内同样块,按顺序排放。

此算法避免了 “标记-清除” 的零散问题,同时也避免了 “复制”
算法的半空中问题。

4)root 搜索算法中,哪些可以看作 root?

答:

  • 于启动类(bootstrap 加载器)加载的切近和创的目标;
  • JavaStack 中的援的对象 (栈内存中引用的目标);
  • 方法区中静态引用指向的靶子;
  • 方法区中常量引用指向的目标;
  • Native 方法被 JNI 引用的靶子。

5)GC 什么时起?

报经:GC
经常来的区域是堆区,堆区还可以细分为新生代、老年代,新生代还分为一个
Eden 区和少独 Survivor 区。

  1. 目标优先在 Eden 中分配,当 Eden 中并未足够空间时,虚拟机将有同样不好
    Minor GC,因为 Java 大多数靶还是朝生夕灭,所以 Minor GC
    非常累,而且速度吗迅速;
  2. Full GC,发生在直年代的 GC,当总年代没有足够的长空时就是有 Full
    GC,发生 Full GC 一般还见面出一致不成 Minor GC。

那个目标直接上老年代,如大丰富之字符串数组,虚拟机提供一个;XX:PretenureSizeThreadhold
参数,令大于此参数值的对象直接当镇年代被分红,避免以 Eden 区和少个
Survivor 区发生大气的内存拷贝;

  1. 产生 Minor GC
    时,虚拟机会检测之前每次晋升至镇年代的平分大小是否超过老年代的剩下空间尺寸,如果超过,则进行同样不成
    Full GC,如果低于,则翻 HandlePromotionFailure
    设置是否同意保险失败,如果允许,那就会进展同样差 Minor
    GC,如果无同意,则转移吧进行同样软 Full GC。

6)内存泄漏和外存溢出

答:

概念:

  1. 外存溢出指的凡内存不够用了;
  2. 内存泄漏是依靠目标可是及,但是没用了。即应受 GC
    回收的靶子并无受回收;
  3. 内存泄露是促成内存溢出底原由有;内存泄露积累起将招致内存溢出。

内存泄漏的因由剖析:

  1. 增长生周期的对象引用短生命周期的目标;
  2. 并未以无济于事对象置否 null。

总:本小节涉到 JVM
虚拟机,包括针对内存的管制等于知,相对比较生。除了以上问题,面试官会继续问您有些于坏的题目,可能也是为了省您的终点在哪吧。
比如:内存调优、内存管理,是否碰到了内存泄漏的骨子里案例、是否真的关注过内存等。由于我实际项目经验不足,这些很层次问题并没有碰了,各位有得可以上网查看。

(五)Java 8 相关知识点

关于 Java8 中初知识点,面试官会受您说说 Java8
你了解小,下边要阐述自己所了解,并且以面试中对的 Java8 新增知识点。

1)HashMap 的脚实现有生成:HashMap 是一再组 + 链表 + 红黑树(JDK1.8
增加了红黑树有)实现。

2)JVM 内存管理方面,由第一空间代替了永恒替代。

区别:

  1. 首空间并无在虚拟机中,而是利用当地内存;
  2. 默认情况下,元空间的大小就于地方内存限制;
  3. 呢得以经过-XX:MetaspaceSize 指定元空间大小。

3)Lambda
表达式(也叫做闭包),允许我们以函数当成参数传递给某个方法,或者把代码本身作为数据处理。

4)函数式接口:指的凡只有生一个函数的接口,java.lang.Runnable 和
java.util.concurrent.Callable 就是函数式接口的例子;java8
提供了一个异样的注释 @Functionallnterface 来表明该接口是一个函数式接口。

5)引入重复注解:Java 8 中运用 @Repeatable 注解定义再度注解。

6)接口中得兑现方式 default 方法。

7) 注解的用状况拓宽:
注解几乎可以以其他因素上:局部变量、接口类型、超类和接口实现类似,甚至可就此当函数的怪定义及。

8) 新的包 java.time 包

  1. 饱含了装有关于日期、时间、时区、持续时间和时钟操作的类;
  2. 这些看似都是不可变的、线程安全之。

总结:Java8
的片新特性,面试官一般景象下未求而来多么精通,主要是看看您出无发生局部询问。

(六)网络协议相关

网络协议方面,考察最多的不外乎服务器和客户端在三赖握手、四潮挥手过程被之状态变化;还有网不通控制,及其解决办法等。

1)三不善握手、四不善挥手示意图:

SQL Server 3

一共有四种状态:主动建立连接、主动断开连接、被动建立并和被动断开连接

少数简单结缘或 4 种组合:

  1. 主动建立连接、主动断开连接会经历之状态:
    SYNC_SENT——ESTABLISHED—-FIN_WAIT_1—-FIN_WAIT_2—-TIME_WAIT
  2. 积极建立连接、被动断开连接会更之状态:
    SYNC_SENT——ESTABLISHED—-CLOSE_WAIT—-LAST_ACK
  3. 消极建立连接、主动断开连接会更之状态:
    LISTEN—-SYN_RCVD—-ESTABLISHED—-FIN_WAIT_1—-FIN_WAIT_2—-TIME_WAIT
  4. 被动建立连接、被动断开连接会经历的状态:
    LISTEN—-SYN_RCVD—-ESTABLISHED—-CLOSE_WAIT—-LAST_ACK

2)滑动窗口机制

由发送方和接收方在三涂鸦握手阶段,互相将协调的太特别而接收的数据量告诉对方。也尽管是友好之数据接受缓冲池的分寸。这样对方可因现已发送的数据量来算是否好随着发送。

当处理过程中,当收到缓冲池的轻重缓急发生变化时,要给对方发送更新窗口大小的通知。

3)拥塞避免编制

卡住:对资源的需超过了可用之资源。若网络被很多资源而供应不足,网络的特性就假设肯定变充分,整个网络的吞吐量随着负荷的增大而落。

堵塞控制:防止了多的多寡注入及网络中,使得网络被的路由器或链路不致过载。

死控制方法:

  • 迟迟起 + 拥塞避免;
  • 快重传 + 快恢复。

SQL Server 4SQL Server 5

4)浏览器中输入:“www.xxx.com” 之后还起了呀?请详细阐述。

分析:经典的网络协议问题。

答:

  1. 由域名→IP 地址
    摸索 IP 地址之历程依次通过了浏览器缓存、系统缓存、hosts
    文件、路由器缓存、 递归搜索根域名服务器。
  2. 树 TCP/IP 连接(三软握手具体经过)
  3. 是因为浏览器发送一个 HTTP 请求
  4. 经过路由器的倒车,通过服务器的防火墙,该 HTTP 请求到达了服务器
  5. 服务器处理该 HTTP 请求,返回一个 HTML 文件
  6. 浏览器解析该 HTML 文件,并且显示在浏览器端
  7. 这边要注意:

  8. HTTP 协议是平等种基于 TCP/IP 的应用层协议,进行 HTTP
    数据要必须先成立 TCP/IP 连接

  9. 得如此理解:HTTP 是小汽车,提供了包装或者显示数据的切实可行形式;Socket
    是发动机,提供了网络通信的力量。
  10. 区区只电脑中的交流就是零星个端口之间的数额通信 ,
    具体的数据会以什么的花样表现是坐不同的应用层协议来定义之。

5)常见 HTTP 状态码

  1. 1xx(临时响应)
  2. 2xx(成功)
  3. 3xx(重定向):表示如果完成请求需要越来越操作
  4. 4xx(错误):表示求或出错,妨碍了服务器的拍卖
  5. 5xx(服务器错误):表示服务器在品味处理要时发出内部错误
  6. 常见状态码:

  7. 200(成功)

  8. 304(未修改):自从上次请后,请求的网页未修改了。服务器返回此应时,不见面回来网页内容
  9. 401(未授权):请求要求身份验证
  10. 403(禁止):服务器拒绝请求
  11. 404(未找到):服务器找不顶要的网页

6)TCP 和 UDP 的区别:

答:

  1. 应发送数据前是否是建立连接的长河;
  2. TCP过认同机制,丢包可重发,保证数据的是;UDP不包科学,只是独自的承负发送数据包;
  3. UDP 是面向报文的。发送方的 UDP
    对应用程序交下去的报文,在累加首部后哪怕为下交给给 IP
    层。既不拆分,也非联合,而是保存这些报文的边际,因
    此,应用程序需要选择适用的报文大小;
  4. UDP 的头部,只有 8 个字节,相对于 TCP 头部的 20
    单字节信息管之额外开销很有些。

压篇幅,更多网络协议相关知识,请参见我之博客:TCP/IP
商讨面试时叩知识点,倾心总结

总:必须熟练掌握 TCP 和 UDP
的分、三不善握手和季糟糕挥手的状态切换,必考。

(七)数据库知识点

既是是后端开发,那么与数据库相关的知识点也是不可或缺的。

1)MySQL 和 MongoDB 的区分有安?如何选?

2)MongoDB 的利弊有什么样?

(ps
本人对就无异于块不是老大熟悉,就不沾参考答案了,请各位小伙伴自行学习哈~)

3)听说了业务也?(必考)

报经:作为单个逻辑工作单元执行之同一多重操作,满足四好特色:

  1. 原子性(Atomicity):事务作为一个整为执行
    ,要么全部实行,要么全部不履行;
  2. 一致性(Consistency):保证数据库状态从一个同一状态转变为任何一个一律状态;
  3. 隔离性(Isolation):多个业务并发执行时,一个业务之行不应影响其它业务的实行;
  4. 持久性(Durability):一个工作一旦付出,对数据库的改该永久保存。

4)事务之出现问题发生哪几栽?

报:丢失更新、脏读、不可再读与幻读。

5)数据库中之沿有哪几种?
报经:独占锁、排异锁和创新锁。

6)事务的隔离级别有啊几种植?

答:读不提交、读就交给、可另行读与序列化。

恢宏问题:MySQL 事务默认隔离级别是哪位?

答:可还读。

剖析:关于问题(4)(5)(6)的事无巨细解答,请参见我的博客:数据库并发机制同作业之隔离级别详解

(ps,关于数据库事务方面的杀层次考察还有分布式事务即有限段子提交和老三段子提交等,限于自家水平,请各位自行学习)

7)数据库的目有什么打算?(必考)
底层数据结构是呀,为什么以这种数量结构?

答:

  1. 索引
    是本着数据库表中同排或多排的值进行排序的一模一样种植结构,使用索引可快速访问数据库表中的一定信息;
  2. 底层数据结构是 B+ 树;
  3. 运用 B+
    树的原故:查找速度快、效率高,在找的历程遭到,每次都能丢弃掉一部分节点,减少遍历个数。(
    此时,你该在白纸上打来什么是 B+ 树 )

恢宏问题:聚簇索引和非聚簇索引的别?

8)MyISAM 和 InnoDB 的界别有什么?

答:

  • MyISAM 不支持工作,InnoDB 是事情型的储存引擎;
  • MyISAM 就支持表级锁,BDB 支持页级锁和表级锁,默认为页级锁;而 InnoDB
    支持行级锁和表级锁,默认为行级锁;
  • MyISAM 引擎不支持外键,InnoDB 支持外键;
  • MyISAM 引擎的阐发在大方高并发的读写下会经常出现表损坏的事态;
  • 对此 count( ) 查询来说 MyISAM 更产生优势;
  • InnoDB 是也处理巨大数据量时的绝老性设计,它的 CPU
    效率可能是任何其它基于磁盘的关系数据库引擎所未能够媲美的;
  • MyISAM 支持全文索引(FULLTEXT),InnoDB 不支持;
  • MyISAM 引擎的阐明底询问、更新、插入的频率要比较 InnoDB 高。

无限要的分是:MyISAM 表不支持工作、不支持行级锁、不支持外键。 InnoDB
表支持工作、支持行级锁、支持外键。(可一直答复这个)

9)数据库被 Where、group by、having 关键字:

报: 关键字图:

  1. where 子句子用来罗 from 子句被指定的操作所生的的履行;
  2. group by 子句子用来分组 where 子句的出口;
  3. having 子句用来打分组的结果中筛选行;

having 和 where 的区别:

  1. 语法类似,where 搜索条件在进行分组操作前运用;having
    搜索条件在开展分组操作下采取;
  2. having 可以蕴涵聚合函数 sum、avg、max 等;
  3. having 子词限制的是组,而未是履行。

当又富含 where 子句、group by 子句 、having
子句及聚集函数时,执行各个如下:

  1. 施行 where 子句查找符合条件的数码;
  2. 动 group by 子句子针对数码进行分组;对 group by
    子句形成的组运行聚集函数计算各国一样组的价值;最后所以 having
    子句去丢不符合条件的组。

10)还有一对题目,如 MySQL 和 SQL Server 用法及的区分、limit
关键字之以等题材。

小结:数据库方面要政工机制、隔离级别比较重要,当然矣数据库索引是必考的问题。偶尔吧会叫你几乎独说明,让您现场写
SQL 语句,主要考察 group by 和 having 等要害字。

(八)MVC 框架相关知识点

自身当类型受到动用的框架来 Spring MVC 和
MyBatis,所以当简历及仅写了立即半种框架,面试官主要对这片种植框架进行提问。以下问题供小伙伴等参考。

JavaWeb 开发经典的 3 层框架:Web 层、Service 层(业务逻辑层)和 Dao
层(数据访问层)

  • Web 层:包含 JSP 和 Servlet 等和 Web 相关的情节;
  • 业务层:只关心业务逻辑;
  • 数据层:封装了针对数据库的走访细节。

Spring 知识点

1)Spring 的 IOC 和 AOP 有了解吗?

答:

  • IOC:控制反转,(解耦合)将对象中的赖关系交给 Spring
    容器,使用安排文件来创造所负之对象,由主动创建对象改以被动方式;
  • AOP:面向切面编程,将功能代码从业务逻辑代码中分离出去。

2)AOP 的兑现方式产生哇几种植?如何抉择?(必考)

报经:JDK 动态代理实现和 cglib 实现。

选择:

  1. 倘目标靶实现了接口,默认情况下会采取 JDK 的动态代理实现
    AOP,也得强制行使 cglib 实现 AOP;
  2. 设目标靶没实现接口,必须用 cglib 库,Spring 会自动在 JDK
    动态代理和 cglib 之间变换。

扩大:JDK 动态代理如何促成?(加分点)

报经:JDK
动态代理,只能对促成了接口的类生成代理,而不是针对类,该对象项目实现的接口都将吃摄。原理是透过以运转中创建一个接口的贯彻类似来成功对目标靶的代办。

  1. 概念一个兑现接口 InvocationHandler 的接近;
  2. 由此构造函数,注入被代理类;
  3. 实现 invoke( Object proxy, Method method, Object[] args)方法;
  4. 于主函数着得被代理类的好像加载器;
  5. 使用 Proxy.newProxyInstance( ) 产生一个摄对象;
  6. 通过代理对象调用各种艺术。

分析:关于 IOC 和 AOP 的详尽阐释,请各位参阅我的博客:Spring 核心
AOP(面向切面编程)总结,Spring 框架上—控制反转(IOC)

3)Spring MVC 的中心控制器是啊?消息处理流程发生怎样?

报:核心控制器为 DispatcherServlet。消息流程如下:

SQL Server 6

4)其他题目概括:重定向与转化的分别、动态代理及静态代理的别等。

Mybatis 知识点

有关 MyBatis 主要考察占位符#跟 $ 的区分,区别如下:

  1. 号将盛传的多少都当做一个字符串,会指向电动传入的数量加以一个双引号;
  2. $ 符号将盛传的数目直接显示生成 SQL 中;
  3. 符存在预编译的历程,,对问号赋值,防止 SQL 注入;
  4. $ 符号是直译的措施,一般用当 order by ${列名}语句被;
  5. 能用#声泪俱下便不要因此 $ 符号。

总:限于作者水平,MVC
框架方面了解不是极其多,实战能力欠缺。面试官偶尔问框架底层实现原理等都知之甚少,有能力的同伙可以基本上加学习。

(九)大数据有关知识点

老数额相关是盖自之简历及勾了 KafKa 相关项目,所以面试官会进行咨询
KafKa
相关知识点,我哉拓展了一部分大概概念总结,深层次之兑现原理为并无特别多的实战经验,所以并无打听。

以下概念总结供小伙伴参考。

1)KafKa 基本特色:

报经:快速持久化、支持批量念写消息、支持信息分区,提高了起能力、支持在线增加分区、支持啊每个分区创建多独副本。

扩大:为什么可以兑现迅速持久化?

报经:KafKa
将信息保存于磁盘中,并且读写磁盘的措施是各个读写,避免了随便读写磁盘(寻道时间了长)导致的特性瓶颈;磁盘的次第读写速度超过内存随机读写。

2)核心概念:

答:

  • 生产者(Producer): 生产消息,并且以一定之规则推送至 Topic
    的分区中。
  • 消费者(Consumer): 从 Topic 中牵涉去信,并且开展消费。
  • 主题(Topic): 用于储存信的逻辑概念,是一个音集合。
  • 分区(partition):

  • 每个 Topic 可以划分也多独分区,每个消息在分区中都见面发出一个唯一编号
    offset

  • kafka 通过 offset 保证信息在分区中之逐条
  • 同一 Topic 的差分区可以分配在不同之 Broker 上
  • partition 以文件之形式储存在文件系统中。

副本(replica):

  1. KafKa
    对信息进行了冗余备份,每个分区有多单副本,每个副本中隐含的音信是
    “一样” 的。
  2. 每个副本中还见面选产生一个 Leader 副本,其余为 Follower 副本,Follower
    副本仅仅以数据由 Leader 副本拉去到当地,然后一并到祥和之 Log 中。

消费者组(Consumer Group): 每个 consumer 都属于一个 consumer
group,每条信息只能为 consumer group 中的一个 Consumer
消费,但好为多独 consumer group 消费。

Broker:

  1. 一个独门的 server 就是一个 Broker;
  2. 最主要工作:接收生产者发过来的信,分配 offset,并且保留及磁盘中;

Cluster&Controller:

  1. 大抵个 Broker 可以组合一个 Cluster,每个集群选举一个 Broker 来作为
    Controller,充当指挥为主
  2. Controller 负责管理分区的状态,管理每个分区的副本状态,监听
    ZooKeeper 中多少的转移等工作

保存策略与日志压缩:

  1. 任凭消费者是否就花费了音讯,KafKa
    都见面直接保存这些信(持久化到磁盘);
  2. 透过保留策略,定时删除陈旧的音信;
  3. 日记压缩,只保留最新的 Key-Value 对。

关于副本机制:(加分点)

ISR 集合 :表示手上 “可用” 且消息量与 Leader
相差不多的副本集合。满足条件如下:

  1. 副本所当节点必须保持在与 ZooKeeper 的连年;
  2. 副本最终一漫长信息之 offset 与 Leader 副本的结尾一修信息之 offset
    之间的差值不克跨越指定的阈值。

HW&LEO:

  1. HW 标记了一个非常之 offset,当顾客处理消息的时节,只能拉取到 HW
    之前的信;
  2. HW 也是出于 Leader 副本管理的;
  3. LEO(Log End Offset)是有所副本都见面有一个 offset 标记。

ISR、HW 和 LEO 的劳作相当:

  1. producer 向此分区中推送消息;
  2. Leader 副本将消息追加到 Log 中,并且递增其 LEO;
  3. Follower 副本从 Leader 副本中拉取消息进行共同;
  4. Follower 副本将信息更新到地面 Log 中,并且递增其 LEO;
  5. 当 ISR 集合中的备符合本都完成了对 offset 的消息SQL Server并,Leader
    副本会递增其 HW

KafKa 的容灾机制: 通过分区的入本 Leader 副本和 Follower
副本来提高容灾能力。

总:请稍伙伴根据自己之简历自动准备学很数量相关知识点。

(十)Linux 常见命令

笔者对及时一边不是异常会,知识点来源于网络总暨面试官的讯问,仅供小伙伴参考。

1)grep、sed 以及 awk 命令

剖析:awk 命令如果得以掌握,是面试中之一个 加分点。

2)文件和目录:

pwd 显示当前目录

ls 显示当前目录下的文本以及目录:

  1. ls -F 可以分文件和目录;
  2. ls -a 可以管潜伏文件及通常文书共展示出来;
  3. ls -R 可以递归显示子目录中之文书及目录;
  4. ls -l 显示长列表;
  5. ls -l test 过滤器,查看有特定文件信息。可以仅查看 test
    文件之音讯。

3)处理公事端的命有:touch、cp、 In、mv、rm、

4)处理目录者的下令:mkdir

5)查看文件内容:file、cat、more、less、tail、head

6)监测程序命令:ps、top

eg. 找有过程名受到包括 java 的拥有进程:ps -ef | grep java

top 命令 实时监测进程

top 命令输出的率先有:显示系统的包。

  1. 率先尽显示了即时、系统的周转时、登录的用户数和系的平均负载(平均负载有
    3 独价值:最近 1min 5min 15min);
  2. 仲实践显示了经过的大意信息,有些许进程处于运行、休眠、停止或僵化状态;
  3. 其三行是 CPU 的大意信息;
  4. 季推行是系内存的状态。

7)ps 和 top 命令的区分:

  1. ps 看到的凡命令执行瞬间的经过信息 , 而 top 可以穿梭的监视;
  2. ps 只是查看过程 , 而 top 还足以监视系统性能 , 如平均负载 ,cpu
    和内存的淘;
  3. 除此以外 top 还可以操作过程 , 如改变优先级 (命令 r) 和关闭进程 (命令
    k);
  4. ps 主要是查过程的,关注点在于查看需要查阅的进程;
  5. top 主要看 cpu,
    内存使用状态,及占用资源最为多之过程由大至没有排序,关注点在于资源占用情况。

8) 压缩数量

  1. tar -xvf 文件名;
  2. tar -zxvf 文件名;
  3. tar -cvzf 文件名。

9)结束进程:kill PID 或者 kill all

时至今日,从十单不同的点阐述了 Java
开发面试岗位被所涉及到之重中之重知识点。加上自身上次披露的 关于算法面试的
chat,我大致用近来相同年之时刻外之面试笔试经验为大家做了总分享。

对接下去,为了让大家提供更多之援,我眷恋对简历方面和豪门聊,主要概括:
制作简历及送简历两端。

打造简历:

先是,我眷恋先介绍下自己之简历都囊括什么有:

  1. 个人信息
  2. 春风化雨背景
  3. 私亮点
  4. 实习项目
  5. 校内项目
  6. 奖励、语言及 IT 能力
  7. 村办综述

简历应该突出显现好好之地方,所以自己拿个人技术博客及 github
地址放到了相对靠前的职,使面试官或者 HR 可以一眼望。

诸君小伙伴如果在校期间到了啊大型竞技并且获奖,也足以形容在醒目的岗位。

为大家一个稍稍提示,那就是得对简历及所勾画的知识点有得了解,不知底的就算不用写上去了,因为您晤面于提问底不胜无助(即使一面面试官不问,三面面试官也会见问之)。

诸如你以简历及描绘了一个艺 A,说自己于列面临利用过技术
A,那么面试官就会咨询该技术 A 的底实现、原理等等。

倘您答应出,确实,这是加分项,但是不少早晚咱们是回答不出去的。

送简历

送简历同样好关键,对于并无是身家名校的同伴来说,在递送一些互联网商家之下,可能会见面临着简历被刷的或。这时候内推的重要性就反映出来了。

内推动是其中推荐的意, 内推的便宜一般有一定量种植:

  1. 内推免简历筛选,直接进去笔试环节;
  2. 内推动好一直拿走面试资格,面试失败可以继续与继续校招大流程。

内推时间点:

  1. 暑期实习校园招聘的内推一般由历年 3 月份初始;
  2. 秋招的内推从历年 8 月份开始,持续到九月份。

哪些内推?

内推,意味着你而找到商店内部人员进行推荐,内推渠道重点是寻找好的师兄师姐。另外可以时不时关注号称
“全国最要命之大学论坛”- 北邮人论坛 。

北邮人论坛资源一定长,每年招聘季的内推帖子数不胜数,各位如果发生要,可以关注一下。在牛客网以及赛码网的讨论区内也是正在大量之内推消息,大家好关心。

结束语

这是同首特别丰富的文章,然而,再长之章也道不尽我这无异年被面试笔试的富有经历。找工作是同等庙持久战,坚持到最终的才是胜利者。

对于各级位志在置身 Java
开发岗位的伴儿们的话,本文所提到的知识点绝对是面试中的要,希望各位可使得控制。

(限于作者水平,文中如发生错误的处,烦请各位指出,我们联合前行。)

本身有一个微信公众号,经常会面分享部分Java技术有关的干货。如果你喜欢我之享用,可以就此微信搜索“Java团长”或者“javatuanzhang”关注。

相关文章