{eval=Array;=+count(Array);}
由于我每年都会面试不少程序员,其中就包括相当数量的Java程序员,所以就这个问题,跟头条的广大网友交流一下。
Java工程师面试也是有一定的侧重点,做不同的研发方向,问题上也有所区别。另外,初级程序员与主力程序员的面试问题也有很大的不同,总的来说就是方向与定位相结合,下面为大家一一描述。
面试Java初级程序员的流程相对来说比较简单,通常是两轮面试,首轮面试一般进行技术面试,次轮面试通常是有HR统一安排关于职业规划以及心理方面的面试(大部分情况是走个流程),这两轮面试中,技术面试起到了关键的作用。
面试初级程序员(2-3级)一般从技术细节入手,要通过面试,首先要知道初级程序员都需要具备哪些能力。下面先描述一下作为一个Java初级程序员(2-3级,Web方向为主)应该满足哪些要求:
清晰Java面向对象编程步骤,理解封装、继承、多态等核心概念,理解基本的前端内容(HTML、CSS、JavaScript)。
能理解程序流程图描述的功能需求,能独立完成功能模块的编写、部署,能理解功能模块之间的交互关系,能完成功能模块之间的消息传递和处理。
能理解MVC、DAO等框架,并在实际开发中熟练使用,能独立完成前后台的数据处理,能完成各种认证功能的处理。
能使用数据库连接池等基本优化方式提高程序运行效率。
能理解容器在程序运行中的作用,能配置各种容器的基本参数。
对程序的安全性有一定的理解,能避免初级的安全性问题。
能处理一定数量的并发问题,能解决多线程情况下的数据安全问题。
能理解不同角色的任务分配,能进行有效沟通。
常见框架的使用,比如SpringMVC等。
初级程序员的工作往往是编写程序基本功能组件,是保证程序质量的一个重要环节,所以团队的整体能力往往并不是由架构师决定的,反而是由众多的初级程序员决定的。
主力程序员的面试通常要3轮或4轮,当然如果你走到了后面的两轮,基本上选择权就在你手里了,后面的两轮面试公司会给你安排一个看似比较美好的职业发展规划,因为主力程序员不仅要编码通常还承担者一部分管理工作(项目责任人),也是管理层比较倚重的。
主力程序员的技术面试流程并没有那么多细节问题,首先要了解一下做过哪些项目,在项目中都承担了什么任务,项目中遇到了哪些问题,怎么解决的等等。通常主力程序员的面试时间也比较长(2至3个小时),面试的氛围也比初级程序员要轻松很多。
主力程序员大部分是推荐上来的,有人力资源公司推荐的,也有公司内推上来的,当然也有主动投送简历要求面试的。一般对主力程序员都会有背景调查,这一方面是对公司负责,另一方面也是对应聘者应有的尊重。
希望通过我的回答,大家能对Java程序员的面试有一个基本的了解。
我是悟空问答的签约作者,致力于为头条网友提供优质的科技类问题解答,关注我,跟我一起交流关于科技类的问题吧。
谢邀~
从第二家单位开始,就负责社招的面试工作(技术方面),近两两年,也开始负责校招的工作,和大家分享一下我一般会问的问题,和一些我比较看重的地方,大家可以借鉴。
其实说实话,我们单位校招没有什么优势,一般来面试我们公司开发岗位的,最好也就是中等偏上的985学校(最低要求是一本)。所以一般来说,只要不是沟通能力特别差的,基本都会通过。但是面试流程还是要走的,我一般问的都特别简单:
我主要是面试乙方(外包),初级基本上要两年以上工作经验;基本上简历上写什么,我就问什么,所以我建议,如果你不会的东西,不要随便写在简历上。
先做自我介绍,主要看一下表达能力和第一印象,所以我建议大家面试之前都准备一套自我介绍的词儿。
基本上还是从项目出发,先问一下业务上的流程,这个阶段的开发,我对整个项目的流程问的少,还是主要问单个模块的业务流程。
技术方面主要以使用为主,就是看看你是否到底使用过。比如写了使用过Mybatis,那么我可能会问#和$的区别,如果写了使用过Spring的话,那么我可能会问依赖注入有几种方式,诸如此类。
SQL方面会问一些复杂SQL的写法,比如一些数据库函数,左连接右连接之类的。
工作三到五年的。
还是从项目出发,问的可能会稍微的多一些,希望对方可以对整个项目甚至是某一个行业有着整体的了解。
技术方面不仅仅要求是使用过了,我的要求可能会更高一些。如果还是Mybatis,那么我就可能会问到一级二级缓存,甚至是自定义缓存,如果是Spring的话,可能就会问到Bean是如何被管理的。
一些主流技术和框架,可能你没写在简历上,但是我也会问一问。比如现在很常见的内存数据库、Spring Boot等。
Java基础知识可能会问,比如JVM相关、Java的集合等。
SQL方面,优化是我主要问的,比如索引失效的问题。
高级的一般都招不来,哈哈,没有面试过。
java基础,反射,多线程,static的作用,集合,数据库等基础知识,还有就是数据库,前端,java web(servlet,xml),ajax是面试的时候问的比较多的,以及一些主流框架的使用。还有做过的项目,以及在项目中遇到哪些比较难解决的问题,最后是怎么解决的。
学习java是在“如鹏网”上学习的,有详细的课程体系,有网络的地方就可以学习,每个章节的后面都有相应的练习题和面试口才题,需要以录音的方式进行提交,实时把控学习质量,为面试做准备。java重要知识点列举。
在准备面试之前,简历是很必要的,怎么写简历,投简历,才能吸引面试官的眼球,简历上哪些内容可以写,哪些内容是不能写的。
在面试的过程中,应该注意哪些问题,对于面试官提出来的问题,应该怎么去回答。
看过“如鹏网”的免费公开课《程序员找工作的六大环节揭秘》,从写简历,投简历,面试,签协议等方面进行讲解,分析的挺透彻的,可以去看看。
需要java视频教程和“程序员找工作的六大环节揭秘”视频教程的可在评论区留言哦。
换个角度,谈谈我们招人时,都会问那些问题:
面试Java初级工程师:我们通常会问Java基础知识,包括Java语法、Java工程化的一些知识,重点看面试人的综合素质,是否可以培养;
面试Java中级工程师:我们通常会问Java常用框架的掌握情况,sql语法,Mysql等知识,做过哪些项目?比如:MyBatis和Hibernate的区别,sql关联查询等等;
面试Java高级工程师:我们通常会问Java如何调优,Spring Cloud、Dubbo等分布式开发框架是否用过?微服务的理解等等;
不管初中高级工程师都会问到的问题是:沟通能力?逻辑思维能力?
给你列举了以下几项: 如果以下都高清楚了,你已经是一个顶尖的java工程师了!
一、Java基础
1. String类为什么是final的。
1.线程安全2.支持字符串常量池数据共享,节省资源,提高效率(因为如果已经存在这个常量便不会再创建,直接拿来用)
2. HashMap的源码,实现原理,底层结构。
总的来说,HashMap就是数组+链表(哈希表或者散列函数)的组合实现,每个数组元素存储一个链表的头结点,本质上来说是哈希表“拉链法”的实现。
HashMap的链表元素对应的是一个静态内部类Entry,Entry主要包含key,value,next三个元素
主要有put和get方法,put的原理是,通过hash&length-1计算index,此时记作Entry[index]=该元素。如果index相同
就是新入的元素放置到Entry[index],原先的元素记作Entry[index].next
get就比较简单了,先遍历数组,再遍历链表元素。
null key总是放在Entry数组的第一个元素(允许存放一个空键值对的原因)
解决hash冲突的方法:链地址法
再散列rehash的过程:确定容量超过目前哈希表的容量,重新调整table 的容量大小,当超过容量的最大值时
HashMap的容量size乘以负载因子[默认0.75] = threshold 将会触发扩容
3. 说说你知道的几个Java集合类:list、set、queue、map实现类咯。。。
queue的实现类: AbstractQueue, ArrayBlockingQueue, ConcurrentLinkedQueue, LinkedBlockingQueue, DelayQueue, LinkedList, PriorityBlockingQueue, PriorityQueue和ArrayDqueue
4. 描述一下ArrayList和LinkedList各自实现和区别
5. Java中的队列都有哪些,有什么区别。
Queue: 基本上,一个队列就是一个先入先出(FIFO)的数据结构
Queue接口与List、Set同一级别,都是继承了Collection接口。LinkedList实现了Deque接 口。
Queue的实现
1、没有实现的阻塞接口的LinkedList: 实现了java.util.Queue接口和java.util.AbstractQueue接口
内置的不阻塞队列: PriorityQueue 和 ConcurrentLinkedQueue
PriorityQueue 和 ConcurrentLinkedQueue 类在 Collection Framework 中加入两个具体集合实现。
PriorityQueue 类实质上维护了一个有序列表。加入到 Queue 中的元素根据它们的天然排序(通过其 java.util.Comparable 实现)或者根据传递给构造函数的 java.util.Comparator 实现来定位。
ConcurrentLinkedQueue 是基于链接节点的、线程安全的队列。并发访问不需要同步。因为它在队列的尾部添加元素并从头部删除它们,所以只要不需要知道队列的大 小, ConcurrentLinkedQueue 对公共集合的共享访问就可以工作得很好。收集关于队列大小的信息会很慢,需要遍历队列。
2)实现阻塞接口的:
java.util.concurrent 中加入了 BlockingQueue 接口和五个阻塞队列类。它实质上就是一种带有一点扭曲的 FIFO 数据结构。不是立即从队列中添加或者删除元素,线程执行操作阻塞,直到有空间或者元素可用。
五个队列所提供的各有不同:
* ArrayBlockingQueue :一个由数组支持的有界队列。
* LinkedBlockingQueue :一个由链接节点支持的可选有界队列。
* PriorityBlockingQueue :一个由优先级堆支持的无界优先级队列。
* DelayQueue :一个由优先级堆支持的、基于时间的调度队列。
* SynchronousQueue :一个利用 BlockingQueue 接口的简单聚集(rendezvous)机制。
6. 反射中,Class.forName和classloader的区别
class.forName()除了将类的.class文件加载到jvm中之外,还会对类进行解释,执行类中的static块。
而classLoader只干一件事情,就是将.class文件加载到jvm中,不会执行static中的内容,只有在newInstance才会去执行static块。
Class.forName(name, initialize, loader)带参函数也可控制是否加载static块。并且只有调用了newInstance()方法采用调用构造函数,创建类的对象
7. Java7、Java8的新特性(baidu问的,好BT)
java7有一些比较重要的更新,如异常处理增加了被抑制的异常、捕获多异常、try-with-resource自动释放资源等,还有应用了G1垃圾回收器、switch可以使用String类型、泛型自动判断类型、fork/join框架把任务细分并使用多处理器处理、支持二进制字面量等
毫无疑问,Java 8是自Java 5(2004年)发布以来Java语言最大的一次版本升级,Java 8带来了很多的新特性,比如编译器、类库、开发工具和JVM(Java虚拟机)。在这篇教程中我们将会学习这些新特性,并通过真实例子演示说明它们适用的场景。
最最重要的是Java8开始支持了Lambda表达式
8. Java数组和链表两种结构的操作效率,在哪些情况下(从开头开始,从结尾开始,从中间开始),哪些操作(插入,查找,删除)的效率高
9. Java内存泄露的问题调查定位:jmap,jstack的使用等等
10. string、stringbuilder、stringbuffer区别
11. hashtable和hashmap的区别
HashMap是非线程同步的,HashTable是线程同步的。
HashMap允许null作为键或者值,HashTable不允许
HashTable中有个一个contains方法,HashMap去掉了此方法
效率上来讲,HashMap因为是非线程安全的,因此效率比HashTable高
hashTable继承Dictionary,而HashMap继承Abstract
13 .异常的结构,运行时异常和非运行时异常,各举个例子
14. String a= “abc” String b = “abc” String c = new String(“abc”) String d = “ab” + “c” .他们之间用 == 比较的结果
编译时优化
15. String 类的常用方法
16. Java 的引用类型有哪几种
对象的强、软、弱和虚引用(四种引用)
在JDK 1.2以前的版本中,若一个对象不被任何变量引用,那么程序就无法再使用这个对象。也就是说,只有对象处于可触及(reachable)状态,程序才能使用它。从JDK 1.2版本开始,把对象的引用分为4种级别,从而使程序能更加灵活地控制对象的生命周期。这4种级别由高到低依次为:强引用、软引用、弱引用和虚引用。
⑴强引用(StrongReference)
强引用是使用最普遍的引用。如果一个对象具有强引用,那垃圾回收器绝不会回收它。当内存空间不足,Java虚拟机宁愿抛出OutOfMemoryError错误,使程序异常终止,也不会靠随意回收具有强引用的对象来解决内存不足的问题。 ps:强引用其实也就是我们平时A a = new A()这个意思。
⑵软引用(SoftReference)
如果一个对象只具有软引用,则内存空间足够,垃圾回收器就不会回收它;如果内存空间不足了,就会回收这些对象的内存。只要垃圾回收器没有回收它,该对象就可以被程序使用。软引用可用来实现内存敏感的高速缓存(下文给出示例)。
软引用可以和一个引用队列(ReferenceQueue)联合使用,如果软引用所引用的对象被垃圾回收器回收,Java虚拟机就会把这个软引用加入到与之关联的引用队列中。
⑶弱引用(WeakReference)
弱引用与软引用的区别在于:只具有弱引用的对象拥有更短暂的生命周期。在垃圾回收器线程扫描它所管辖的内存区域的过程中,一旦发现了只具有弱引用的对象,不管当前内存空间足够与否,都会回收它的内存。不过,由于垃圾回收器是一个优先级很低的线程,因此不一定会很快发现那些只具有弱引用的对象。
弱引用可以和一个引用队列(ReferenceQueue)联合使用,如果弱引用所引用的对象被垃圾回收,Java虚拟机就会把这个弱引用加入到与之关联的引用队列中。
⑷虚引用(PhantomReference)
“虚引用”顾名思义,就是形同虚设,与其他几种引用都不同,虚引用并不会决定对象的生命周期。如果一个对象仅持有虚引用,那么它就和没有任何引用一样,在任何时候都可能被垃圾回收器回收。
虚引用主要用来跟踪对象被垃圾回收器回收的活动。虚引用与软引用和弱引用的一个区别在于:虚引用必须和引用队列 (ReferenceQueue)联合使用。当垃圾回收器准备回收一个对象时,如果发现它还有虚引用,就会在回收对象的内存之前,把这个虚引用加入到与之 关联的引用队列中。
ReferenceQueue queue = new ReferenceQueue ();
PhantomReference pr = new PhantomReference (object, queue);
程序可以通过判断引用队列中是否已经加入了虚引用,来了解被引用的对象是否将要被垃圾回收。如果程序发现某个虚引用已经被加入到引用队列,那么就可以在所引用的对象的内存被回收之前采取必要的行动。
17. 抽象类和接口的区别
18. java的基础类型和字节大小。
19. Hashtable,HashMap,ConcurrentHashMap 底层实现原理与线程安全问题(建议熟悉 jdk 源码,才能从容应答)
20. 如果不让你用Java Jdk提供的工具,你自己实现一个Map,你怎么做。说了好久,说了HashMap源代码,如果我做,就会借鉴HashMap的原理,说了一通HashMap实现
21. Hash冲突怎么办?哪些解决散列冲突的方法?
开放地址法 插入元素时,如果发生冲突,算法会简单的从该槽位置向后循环遍历hash表,直到找到表中的下一个空槽,并将该元素放入该槽中(会导致相同hash值的元素挨在一起和其他hash值对应的槽被占用)。查找元素时,首先散列值所指向的槽,如果没有找到匹配,则继续从该槽遍历hash表,直到:(1)找到相应的元素;(2)找到一个空槽,指示查找的元素不存在,(所以不能随便删除元素);(3)整个hash表遍历完毕(指示该元素不存在并且hash表是满的)
拉链法(hashMap采用的是该种方法)
再散列(双重散列,多重散列)
建立一个公共溢出区
22. HashMap冲突很厉害,最差性能,你会怎么解决?从O(n)提升到log(n)咯,用二叉排序树的思路说了一通
23. rehash
24. hashCode() 与 equals() 生成算法、方法怎么重写
如何重写equals()方法
如果你决定要重写equals()方法,那么你一定要明确这么做所带来的风险,并确保自己能写出一个健壮的equals()方法.一定要注意的一点是,在重写equals()后,一定要重写hashCode()方法.具体原因稍候再进行说明.
我们先看看 JavaSE 7 Specification中对equals()方法的说明:
It is reflexive: for any non-null reference value x, x.equals(x) should return true.
It is symmetric: for any non-null reference values x and y, x.equals(y) should return true if and only if y.equals(x) returns true.
It is transitive: for any non-null reference values x, y, and z, if x.equals(y) returns true and y.equals(z) returns true, then x.equals(z) should return true.
It is consistent: for any non-null reference values x and y, multiple invocations of x.equals(y) consistently return true or consistently return false, provided no information used in equals comparisons on the objects is modified.
For any non-null reference value x, x.equals(null) should return false.
这段话用了很多离散数学中的术数.简单说明一下:
1. 自反性:A.equals(A)要返回true.
2. 对称性:如果A.equals(B)返回true, 则B.equals(A)也要返回true.
3. 传递性:如果A.equals(B)为true, B.equals(C)为true, 则A.equals(C)也要为true. 说白了就是 A = B , B = C , 那么A = C.
4. 一致性:只要A,B对象的状态没有改变,A.equals(B)必须始终返回true.
5. A.equals(null) 要返回false.
相信只要不是专业研究数学的人,都对上面的东西不来电.在实际应用中我们只需要按照一定的步骤重写equals()方法就可以了.为了说明方便,我们先定义一个程序员类(Coder):
[java] view plain copy
class Coder {
private String name;
private int age;
// getters and setters
}
我们想要的是,如果2个程序员对象的name和age都是相同的,那么我们就认为这两个程序员是一个人.这时候我们就要重写其equals()方法.因为默认的equals()实际是判断两个引用是否指向内在中的同一个对象,相当于 == . 重写时要遵循以下三步:
1. 判断是否等于自身.
[java] view plain copy
if(other == this)
return true;
2. 使用instanceof运算符判断 other 是否为Coder类型的对象.
[java] view plain copy
if(!(other instanceof Coder))
return false;
3. 比较Coder类中你自定义的数据域,name和age,一个都不能少.
[java] view plain copy
Coder o = (Coder)other;
return o.name.equals(name) && o.age == age;
看到这有人可能会问,第3步中有一个强制转换,如果有人将一个Integer类的对象传到了这个equals中,那么会不会扔ClassCastException呢?这个担心其实是多余的.因为我们在第二步中已经进行了instanceof 的判断,如果other是非Coder对象,甚至other是个null, 那么在这一步中都会直接返回false, 从而后面的代码得不到执行的机会.
上面的三步也是<Effective Java>中推荐的步骤,基本可保证万无一失.
如何重写hashCode()方法
在JavaSE 7 Specification中指出,"Note that it is generally necessary to override the hashCode method whenever this method(equals) is overridden, so as to maintain the general contract for the hashCode method, which states that equal objects must have equal hash codes."
如果你重写了equals()方法,那么一定要记得重写hashCode()方法.我们在大学计算机数据结构课程中都已经学过哈希表(hash table)了,hashCode()方法就是为哈希表服务的.
当我们在使用形如HashMap, HashSet这样前面以Hash开头的集合类时,hashCode()就会被隐式调用以来创建哈希映射关系.稍后我们再对此进行说明.这里我们先重点关注一下hashCode()方法的写法.
<Effective Java>中给出了一个能最大程度上避免哈希冲突的写法,但我个人认为对于一般的应用来说没有必要搞的这么麻烦.如果你的应用中HashSet中需要存放上万上百万个对象时,那你应该严格遵循书中给定的方法.如果是写一个中小型的应用,那么下面的原则就已经足够使用了:
要保证Coder对象中所有的成员都能在hashCode中得到体现.
对于本例,我们可以这么写:
[java] view plain copy
@Override
public int hashCode() {
int result = 17;
result = result * 31 + name.hashCode();
result = result * 31 + age;
return result;
}
其中int result = 17你也可以改成20, 50等等都可以.看到这里我突然有些好奇,想看一下String类中的hashCode()方法是如何实现的.查文档知:
"Returns a hash code for this string. The hash code for a String object is computed as
s[0]*31^(n-1) + s[1]*31^(n-2) + ... + s[n-1]
using int arithmetic, where s[i] is the ith character of the string, n is the length of the string, and ^ indicates exponentiation. (The hash value of the empty string is zero.)"
对每个字符的ASCII码计算n - 1次方然后再进行加和,可见Sun对hashCode的实现是很严谨的. 这样能最大程度避免2个不同的String会出现相同的hashCode的情况.
重写equals()而不重写hashCode()的风险
在Oracle的Hash Table实现中引用了bucket的概念.如下图所示:
从上图中可以看出,带bucket的hash table大致相当于哈希表与链表的结合体.即在每个bucket上会挂一个链表,链表的每个结点都用来存放对象.Java通过hashCode()方法来确定某个对象应该位于哪个bucket中,然后在相应的链表中进行查找.在理想情况下,如果你的hashCode()方法写的足够健壮,那么每个bucket将会只有一个结点,这样就实现了查找操作的常量级的时间复杂度.即无论你的对象放在哪片内存中,我都可以通过hashCode()立刻定位到该区域,而不需要从头到尾进行遍历查找.这也是哈希表的最主要的应用.
如:
当我们调用HashSet的put(Object o)方法时,首先会根据o.hashCode()的返回值定位到相应的bucket中,如果该bucket中没有结点,则将 o 放到这里,如果已经有结点了, 则把 o 挂到链表末端.同理,当调用contains(Object o)时,Java会通过hashCode()的返回值定位到相应的bucket中,然后再在对应的链表中的结点依次调用equals()方法来判断结点中的对象是否是你想要的对象.
下面我们通过一个例子来体会一下这个过程:
我们先创建2个新的Coder对象:
[java] view plain copy
Coder c1 = new Coder("bruce", 10);
Coder c2 = new Coder("bruce", 10);
假定我们已经重写了Coder的equals()方法而没有重写hashCode()方法:
[java] view plain copy
@Override
public boolean equals(Object other) {
System.out.println("equals method invoked!");
if(other == this)
return true;
if(!(other instanceof Coder))
return false;
Coder o = (Coder)other;
return o.name.equals(name) && o.age == age;
}
然后我们构造一个HashSet,将c1对象放入到set中:
[java] view plain copy
Set<Coder> set = new HashSet<Coder>();
set.add(c1);
再执行:
[java] view plain copy
System.out.println(set.contains(c2));
我们期望contains(c2)方法返回true, 但实际上它返回了false.
c1和c2的name和age都是相同的,为什么我把c1放到HashSet中后,再调用contains(c2)却返回false呢?这就是hashCode()在作怪了.因为你没有重写hashCode()方法,所以HashSet在查找c2时,会在不同的bucket中查找.比如c1放到05这个bucket中了,在查找c2时却在06这个bucket中找,这样当然找不到了.因此,我们重写hashCode()的目的在于,在A.equals(B)返回true的情况下,A, B 的hashCode()要返回相同的值.
我让hashCode()每次都返回一个固定的数行吗
有人可能会这样重写:
[java] view plain copy
@Override
public int hashCode() {
return 10;
}
如果这样的话,HashMap, HashSet等集合类就失去了其 "哈希的意义".用<Effective Java>中的话来说就是,哈希表退化成了链表.如果hashCode()每次都返回相同的数,那么所有的对象都会被放到同一个bucket中,每次执行查找操作都会遍历链表,这样就完全失去了哈希的作用.所以我们最好还是提供一个健壮的hashCode()为妙.
二、Java IO
1. 讲讲IO里面的常见类,字节流、字符流、接口、实现类、方法阻塞。
2. 讲讲NIO。
3. String 编码UTF-8 和GBK的区别?
4. 什么时候使用字节流、什么时候使用字符流?
5. 递归读取文件夹下的文件,代码怎么实现
三、Java Web
1. session和cookie的区别和联系,session的生命周期,多个服务部署时session管理。
2. servlet的一些相关问题
3. webservice相关问题
4. jdbc连接,forname方式的步骤,怎么声明使用一个事务。举例并具体代码
5. 无框架下配置web.xml的主要配置内容
6. jsp和servlet的区别
四、JVM
1. Java的内存模型以及GC算法
2. jvm性能调优都做了什么
3. 介绍JVM中7个区域,然后把每个区域可能造成内存的溢出的情况说明
4. 介绍GC 和GC Root不正常引用。
5. 自己从classload 加载方式,加载机制说开去,从程序运行时数据区,讲到内存分配,讲到String常量池,讲到JVM垃圾回收机制,算法,hotspot。反正就是各种扩展
6. jvm 如何分配直接内存, new 对象如何不分配在堆而是栈上,常量池解析
7. 数组多大放在 JVM 老年代(不只是设置 PretenureSizeThreshold ,问通常多大,没做过一问便知)
8. 老年代中数组的访问方式
9. GC 算法,永久代对象如何 GC , GC 有环怎么处理
10. 谁会被 GC ,什么时候 GC
11. 如果想不被 GC 怎么办
12. 如果想在 GC 中生存 1 次怎么办
五、开源框架
1. hibernate和ibatis的区别
2. 讲讲mybatis的连接池。
3. spring框架中需要引用哪些jar包,以及这些jar包的用途
4. springMVC的原理
5. springMVC注解的意思
6. spring中beanFactory和ApplicationContext的联系和区别
BeanFactory特点
BeanFactory常用的实现类是DefaultListableBeanFactory,调用者只需要使用getBean()方法就可以获得指定的引用,无须关心Bean的实例化过程。创建Spring容器的实例时,必须提供Spring容器管理的Bean的详细配置信息。Spring的配置信息通常采用XML配置文件来设置,因此,创建BeanFactory实例时,应该提供XML配置文件作为参数。XML配置文件通常使用Resource对象传入。
Resource isr = new ClassPathResource("beans.xml");
//Resource isr = new FileSystemResource("beans.xml");
DefaultListableBeanFactory beanFactory = new DefaultListableBeanFactory();
new XmlBeanDefinitionReader(beanFactory).loadBeanDefinition(isr);
ApplicationContext特点
ApplicationContext常用的实现类是FileSystemXmlApplicationContext、ClassPathXmlApplicationContext和AnnotationConfigApplicationContext。如果在Web应用中使用Spring容器,则通常使用XmlWebApplicationContext、AnnotationConfigApplicationContext两个实现类。如果需要使用多个XML配置文件创建Spring容器,可以使用FileSystemXmlApplicationContext或者是ClassPathXmlApplicationContext。
除了提供BeanFactory所支持的所有功能外,ApplicationContext还有额外的功能
默认初始化所有的Singleton,也可以通过配置取消预初始化。
继承MessageSource,因此支持国际化。
资源访问,比如访问URL和文件。
事件机制。
同时加载多个配置文件。
以声明式方式启动并创建Spring容器。
由于ApplicationContext会预先初始化所有的Singleton Bean,于是在系统创建前期会有较大的系统开销,但一旦ApplicationContext初始化完成,程序后面获取Singleton Bean实例时候将有较好的性能。也可以为bean设置lazy-init属性为true,即Spring容器将不会预先初始化该bean。
7. spring注入的几种方式(循环注入)
8. spring如何实现事物管理的
set注入(通常也叫属性注入),构造函数注入,接口注入(这个现在基本不用),注解注入(@Autowire)
9. springIOC
10. spring AOP的原理
11. hibernate中的1级和2级缓存的使用方式以及区别原理(Lazy-Load的理解)
12. Hibernate的原理体系架构,五大核心接口,Hibernate对象的三种状态转换,事务管理。
六、多线程
1. Java创建线程之后,直接调用start()方法和run()的区别
2. 常用的线程池模式以及不同线程池的使用场景
3. newFixedThreadPool此种线程池如果线程数达到最大值后会怎么办,底层原理。
4. 多线程之间通信的同步问题,synchronized锁的是对象,衍伸出和synchronized相关很多的具体问题,例如同一个类不同方法都有synchronized锁,一个对象是否可以同时访问。或者一个类的static构造方法加上synchronized之后的锁的影响。
5. 了解可重入锁的含义,以及Lock 和synchronized的区别
1. lock是一个接口,而synchronized是java的一个关键字,synchronized是内置的语言实现;(具体实现上的区别在《Java虚拟机》中有讲解底层的CAS不同,以前有读过现在又遗忘了。)
2. synchronized在发生异常时候会自动释放占有的锁,因此不会出现死锁;而lock发生异常时候,不会主动释放占有的锁,必须手动unlock来释放锁,可能引起死锁的发生。(所以最好将同步代码块用try catch包起来,finally中写入unlock,避免死锁的发生。)
3. lock等待锁过程中可以用interrupt来终端等待,而synchronized只能等待锁的释放,不能响应中断;
4. lock可以通过trylock来知道有没有获取锁,而synchronized不能;
5. Lock可以提高多个线程进行读操作的效率。(可以通过readwritelock实现读写分离)
6. 同步的数据结构,例如concurrentHashMap的源码理解以及内部实现原理,为什么他是同步的且效率高
7. atomicinteger和Volatile等线程安全操作的关键字的理解和使用
8. 线程间通信,wait和notify
9. 定时线程的使用
10. 场景:在一个主线程中,要求有大量(很多很多)子线程执行完之后,主线程才执行完成。多种方式,考虑效率。
11. 进程和线程的区别
12. 什么叫线程安全?举例说明
13. 线程的几种状态
14. 并发、同步的接口或方法
15. HashMap 是否线程安全,为何不安全。 ConcurrentHashMap,线程安全,为何安全。底层实现是怎么样的。
16. J.U.C下的常见类的使用。 ThreadPool的深入考察; BlockingQueue的使用。(take,poll的区别,put,offer的区别);原子类的实现。
17. 简单介绍下多线程的情况,从建立一个线程开始。然后怎么控制同步过程,多线程常用的方法和结构
18. volatile的理解
19. 实现多线程有几种方式,多线程同步怎么做,说说几个线程里常用的方法
七、网络通信
1. http是无状态通信,http的请求方式有哪些,可以自己定义新的请求方式么。
2. socket通信,以及长连接,分包,连接异常断开的处理。
3. socket通信模型的使用,AIO和NIO。
4. socket框架netty的使用,以及NIO的实现原理,为什么是异步非阻塞。
5. 同步和异步,阻塞和非阻塞。
6. OSI七层模型,包括TCP,IP的一些基本知识
7. http中,get post的区别
8. 说说http,tcp,udp之间关系和区别。
9. 说说浏览器访问www.taobao.com,经历了怎样的过程。
10. HTTP协议、 HTTPS协议,SSL协议及完整交互过程;
11. tcp的拥塞,快回传,ip的报文丢弃
12. https处理的一个过程,对称加密和非对称加密
13. head各个特点和区别
14. 说说浏览器访问www.taobao.com,经历了怎样的过程。
八、数据库MySql
1. MySql的存储引擎的不同
2. 单个索引、联合索引、主键索引
3. Mysql怎么分表,以及分表后如果想按条件分页查询怎么办(如果不是按分表字段来查询的话,几乎效率低下,无解)
4. 分表之后想让一个id多个表是自增的,效率实现
5. MySql的主从实时备份同步的配置,以及原理(从库读主库的binlog),读写分离
6. 写SQL语句。。。
7. 索引的数据结构,B+树
8. 事务的四个特性,以及各自的特点(原子、隔离)等等,项目怎么解决这些问题
9. 数据库的锁:行锁,表锁;乐观锁,悲观锁
10. 数据库事务的几种粒度;
11. 关系型和非关系型数据库区别
九、设计模式
1. 单例模式:饱汉、饿汉。以及饿汉中的延迟加载,双重检查
2. 工厂模式、装饰者模式、观察者模式。
3. 工厂方法模式的优点(低耦合、高内聚,开放封闭原则)
十、算法
1. 使用随机算法产生一个数,要求把1-1000W之间这些数全部生成。(考察高效率,解决产生冲突的问题)
2. 两个有序数组的合并排序
3. 一个数组的倒序
4. 计算一个正整数的正平方根
5. 说白了就是常见的那些查找、排序算法以及各自的时间复杂度
6. 二叉树的遍历算法
7. DFS,BFS算法
9. 比较重要的数据结构,如链表,队列,栈的基本理解及大致实现。
10. 排序算法与时空复杂度(快排为什么不稳定,为什么你的项目还在用)
11. 逆波兰计算器
12. Hoffman 编码
13. 查找树与红黑树
十一、并发与性能调优
1. 有个每秒钟5k个请求,查询手机号所属地的笔试题(记得不完整,没列出),如何设计算法?请求再多,比如5w,如何设计整个系统?
2. 高并发情况下,我们系统是如何支撑大量的请求的
3. 集群如何同步会话状态
4. 负载均衡的原理
5 .如果有一个特别大的访问量,到数据库上,怎么做优化(DB设计,DBIO,SQL优化,Java优化)
6. 如果出现大面积并发,在不增加服务器的基础上,如何解决服务器响应不及时问题“。
7. 假如你的项目出现性能瓶颈了,你觉得可能会是哪些方面,怎么解决问题。
8. 如何查找 造成 性能瓶颈出现的位置,是哪个位置照成性能瓶颈。
9. 你的项目中使用过缓存机制吗?有没用用户非本地缓存
————————————————
版权声明:本文为CSDN博主「zhouwei1818」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/zhouwei1818/article/details/80180872
如果可以的话,**建议以一个和面试官交流的心态去面试**。而且普通面试大部分问答都是有一些套路的。
面试的过程中,肯定会有答不上来的时候,这个时候,坦然的说不知道,就行了;或者再说出来点你知道的,例如思路。**重点** 答不出来的时候一定要淡定,你和面试官是平等的!反过来让你问面试官,他也肯定有答不上来的!
java基础必考,线程、集合(list、map、linklist、array,什么无key遍历map啊,链表倒置啊,这几个东西的数据结构和插入查询特性啊,线程创建方式和同步啊)相关必问。最好能说清楚常见的设计模式、要能手写一个单列模式。
**框架** :主要说你熟练的,会问一些,但是一般都比较基础,只要找;除非,你说你看过这个框架的源码,刚好面试官也比较了解。
**数据库** 可能会问你都用过什么,最好有一个用的熟练的,没事儿去配置一下主从数据库费不了多少时间,然后就好答这个问题了。sql,一般是必考的,分组查询,排序,连结查询。很可能会让你手写sql语句。我还遇到了一个让你查前多少行的,以及不用框架实现分页查询的。
**源码** 其实源码没有那么的高大上,即使你说你熟练源码,刚好面试官也熟悉,他最多也只能问问你这框架从启动到配置完成,从接收请求,到处理完成再返回的 ** 流程**然后再问一下,你从这些源码里学到了什么?这个问题,建议去百度(我都是临面试了才去百度这些有套路的问题)。
**前端** 你要是像我一样,嚣张到简历写的连前端你都会不少,(不过现在确实很多公司的招聘后端的要求也要会一些前端)那就很可能要多面你一会儿了,再问问你简历里写的用过的框架,手写几串js的代码啊,还有可能会通过js代码考察下对DOM概念的理解。正则表达式也是有可能的。
一般算法和数据结构是必考的,操作系统也经常被问。如果是校招的话,笔试中还会有一些排列组合啊,语文表达啊,思维拓展啊(你咋不去高中招?高中刚毕业的时候比较符合需求!!),其次,笔试过了还会有好几轮面试,不管你说你扣过源码,还是跟过还可以的项目,都会被往深里问,再往深里问,再再往深里问!
下边是一个简单的面试记录
问:说说你的突出点
答:java基础扎实(这个慌说的次数多了,现在说起来都没感觉了,哈哈),框架使用熟练(这个慌说了你们也发现不了,所以也没啥感觉),熟悉Tomcat源码,springMVC源码和结构。
问:如果想要统计springMVC每一个访问时长,放到log文件里,你在哪里做这个统计?为什么?
答:在preHandle拦截器里记录访问开始的时间,在postHandle里判断是哪个访问,计算访问时间并存储。
问:在posthandler里计算,并存储是吧。答:是。
问:为什么?
答了一个错误答案,然后又是一顿鄙视。,,
再问:用一个什么变量存?ThreadLocal?还是一个函数内部局部变量,?
答:线程内,(其实是在猜)。
问:为什么? 你不要猜,也不用在乎我的反应,无论你答什么我都会问你为什么。
答:函数内变量可能会不能覆盖整个访问的历程,,一顿鄙视,然后突然反应过来,不对,我说的有问题,外层函数是可以的,那就放在函数内局部变量里,节省资源。
问:如果我想把计算结果存到log里,在哪里做这个事情?
答:(悠长的停顿) 在posthandler处理结束,返回请求之前
问:为什么?
答:不占用处理请求的资源,(错误答案,已经慌乱)
问:确定?
答:不确定,,,停顿,,不对 ,还是会占用资源。
问:然后呢
答:(不说话了,,,)(后来想想,这事儿应该另起一个线程去做)
(鄙视状,,,)
问:恩,说说Tomcat
答:(内心:幸亏没问tomcat优化,JVM优化,,不过,说说?说啥啊?难道说说这个干啥用的?还是说说哪个公司出的?说这些会不会直接赶人啊,,,就这样过了最少一分钟,哈哈)然后我就说了下tomcat的结构,和启动过程。
接着问:Tomcat和里面的Servlet是一个进程还是多个进程,
答:一个进程内
一顿鄙视,再问:为什么,,,??
答:因为我觉得进程是分配资源的基本单位,一般来讲,一个应用就是一个进程。
问:你确定?
(内心:大爷的,估计已经挂了,那我还怕个球,,,于是乎,坐直,平视,语气和神态突然就平静了)
答:确定。
问:你大学什么专业?学过操作系统吗?
答:计算机科学与技术,当然学过,我清楚的记得这一点,进程是分配资源的基本单位,不过,可能太久了,记不清了(其实内心是:你长的美,你说的都对)。
问:ok,一个应用可以启多个进程吗?
答:不可以
问:(鄙视状)确定?
答:(平静状)不太确定
问:呵呵
答:麻烦您给讲讲吧,我不太懂。
问:一个应用当然是可以启多个线程的,更何况还有跨应用的线程调用,资源也是可以动态分配的,,,(当时没听太懂,也记不清了。)。末了来一句,难道你就没打开过你的资源管理器看过吗?
答:当然看过,不过都是卡了才看,看哪个程序占用太高,给结束了。(内心:看过,但是跟这个问题有毛关系吗??)
上边是俩个长问题,还有一些其他的,例如:
问:你觉得要做一个厉害的程序员应该具备哪些特点?
这个就是一些,FQ啊,工具啊,总结啊,交流啊什么的;比如说,善用google,要至少对一个跨平台的工具很了解,善于学习最新的技术,善于掌握有力的工具,多逛各大社区,善于总结。(我就随便一写,找工作的话,要提前准备类似问题。)
问:我看你学了这么多东西,但是好像没有认真的去思考过为什么,你有没有想过当你记忆达到一个上限时你还能学什么?你还能干什么?
这个当然是要反驳的,我说我当然有思考,然后问你思考的啥,然后答当时就想知道Tomcat到springMVC的衔接是怎么衔接的,然后被鄙视:那你直接打几个断点调试一下不完了吗,java的调试不是很强吗?(貌似这个他也不太确定。而我也不知道断点打到哪去,更不用提怎么调试,哈哈)。
问:我看你这写的有一个了解分布式处理,分布式处理是什么?我怎么没听过。(这个就是一个概念问题,不重要。)
java面试主体分为两个部分:
(1).如何理解面向对象的编程
(2).如何理解内存中的堆栈和静态存储区的用法
(3).是否可以继承String 类
(4).String和StringBuilder、StringBuffer区别?
等等这些常见的java基础类题目
(1).spring mvc 工作机制原理
(2).Struts工作机制?为什么要使用Struts?
(3).如何优化Hibernate?
现在只是简单的列举几个面试题目,很多公司的面试直接都没有笔试,因为水平的高低通常意义上讲几句话就能测试出水平的深浅,所以在面试需要注意以下几点:
1.简历上面不要掺杂太多的水份
2.面试过程中要懂得实事求是,不要吹的太厉害,中间遇上一个技术高手几句话就能让自己下不了台
3.对于一些没有工作经验的初学者能做的事情,就是老老实实把基础做好,没有经验能证明自己的只有基础,也只有打好自己的基础才靠谱。
觉得有收获就点赞
作为从事java开发6年的程序猿,参于的面试有七八十场吧,程序猿面试问题是根据企业的招聘需求而定的,三年和五年的程序员遇到的问题是有区别的,所以不能一概而论。
五年开发经验的程序员问道的问题会更趋向于原理方面,当然三年经验的问题依然会问道,但是侧重点不一样了
ConcurrentHashMap的实现原理
java并发中的最佳实践有哪些
volatile关键字的用途
是否用过消息队列
是否用过zookeeper和dubbo
zookeeper的选举机制说一下
以上就是一些面试会遇到的问题,当然只是列举了一些,因为每个面试官的侧重点不一样,有的面试官喜欢连环炮是的发问,问完一个接着深入问另一个相关的问题,知道自己回答不上来为止,有的是东一个问题西一个问题,所以没有什么面试宝典,唯一能做的就是加深自己的修炼
我是北漂coder,以上就是我的回答,欢迎关注,一起探讨交流
多线程,集合,jvm调优,gc ,spring 套餐,dubbo,主流框架。还有数据结构。设计模式。
小面是我面试的经历。
【【冷酷到底】面试深受打击,感觉迷茫了。一个程序员的自白】https://m.zjurl.cn/item/6529754521017516552/?iid=26166306190&app=news_article×tamp=1521475420&tt_from=copy_link&utm_source=copy_link&utm_medium=toutiao_ios&utm_campaign=client_share
2021年很多公司都在问黑红树,数据结构与算法一定要看哦~
尚硅谷Java大厂面试题第3季,跳槽必刷题目+必扫技术盲点(周阳主讲)_哔哩哔哩_bilibili
https://www.bilibili.com/video/BV1Hy4y1B78T?
尚硅谷Java大厂面试题第2季,面试必刷,跳槽大厂神器_哔哩哔哩_bilibili
https://www.bilibili.com/video/BV18b411M7xz?
尚硅谷经典Java面试题第一季(java面试精讲)_哔哩哔哩_bilibili
https://www.bilibili.com/video/BV1Eb411P7bP?
强烈推荐一个网站:
Java面试题-帮助你通过Java面试 (zwmst.com)
https://zwmst.com/
1.常用的数据结构
2.数据里有{1,2,3, 4,5,6,7.8,9},请随机打乱顺序,生成一个新的数组(请以代码实现)
3.写出代码判断一 个整数是不是2的阶次方( 请代码实现,谢绝调用API方法)
4.假设今日是2015年3月1日,星期日,请算出13个月零6天后是星期几,距离现在多少天(请用代码实现,谢绝调用API方法)
5.有两个篮子,分别为A和B,篮子A里装有鸡蛋,篮子B里装有苹果,请用面向对象的思想实现两个篮子里的物品交换(请用代码实现)
1.知识点汇总
2.知识点详解:
3.类加载与卸载
4.简述一下JM的内存模型
5.堆和栈的区别
6.什么时候会触发FullC
7.什么是Java虚拟机?为什么Java被称作是“平台无关的编程语言
8.Java内存结构
9.对象分配规则
10.描述一下J加载class文件的原理机制?
11.Java对象创建过程
12.类的生命周期
13.简述Javs的对象结构
14.如何判断对象可以被回收?
15.JVM的永久代中会发生垃圾回收么?
16.垃圾收集算法
17.调优命令有哪些?
18.调优工具
19.Minor GC与Full GC分别在什么时候发生?
20.你知道哪些JM性能调优
21.JYM内存分哪几个区,每个区的作用是什么?
22.简述J ava垃圾回收机制?
23.什么是类加载器,类加载器有哪些?”
24.你有没有遇到过OutOfMemory问题?你是怎么来处理这个问题的?处理过程中有哪些收获?
26.跟JTM内存相关的几个核心参数图解
27.如何启动系统的时候设置JVM的启动参数
1.Java中实现多线程有几种方法
2.如何停止-个正在运行的线程
3.noti fy 0和noti fyAll 0有什么区别?
4.sleep 0和waitO有什么区别
5.volatile是什么?可以保证有序性吗?
6.Thread 类中的start0和run0方法有什么区别?
7.为什么wait, notify 和notifyA11这些方法不在thread类里面?
8.为什么wai t和noti fy方法要在同步块中调用?
9.Java中interrupted和isInterruptedd方法的区别?
10.Java中synchronized和Reentr antLock有什么不同?
11.有三个线程T1, T2, T3,如何保证顺序执行?
12.Symchr oni Ie dMap和C oncurrentHashMap有什么区别?
13.什么是线程安全
14.Thread类中的yi el a方法有什么作用?
15.Java线程池中submitO和execute 0方法有什么区别?
16.说-说自己对于synchronized关键字的了解
17.说说自己是怎么使用symchronized关键字,在项目中用到了吗synchr oni zed关键字最主要的三种使用方式:
18.什么是线程安全? Vector是一个线程安全类吗?
19.volatile关键字的作用?
20.常用的线程池有哪些?
21.简述一下你对线程 池的理解
22.Java程序是如何执行的
23.说一说自己对于synchronized关键字的了解
24.说说自己是怎么使用synchronized关键字,在项目中用到了吗
25.讲一下synchronired 关键字的底层原理
26.为什么要用线程池?
27.实现Runnabl e接口和Callable接口的区别
28.执行execute 0方法和submi t0方法的区别是什么呢?
29.如何创建线程池
1.Java语言有哪些特点
2.面向对象和面向过程的区别
3.八种基本数据类型的大小,以及他们的封装类
4.标识符的命名规则。
5.instanceof 关键字的作用
6.Java自动装箱与拆箱
7.重载和重写的区别
8.equa1s与==的区别
9.Hasheode的作用
10.String String StringBuffer和StringBuilder 的区别是什么?
11.ArrayList和1inke aList的区
12.HashMap和HashT able的区别
13.Collecti on包结构,与Collecti ons的区别
14.Javs的四种引用,强弱软虚
15.泛型常用特点
16.Jav创建对象有几种方式?
17.有没有可能两个不相等的对象有相同的hasheode
18.深拷贝和浅拷贝的区别是什么?
19.final有哪些用法?
20.stati 都有哪些用法?
21.3*0. 1==0. 3返回值是什么
22.a=a+b与a+=b有什么区别吗?
23.try catch finally; try里有return, finally还执行么?
24.Exepti on与Error包结构
25.00M你遇到过哪些情况,SOF你遇到过哪些情况
26.简述线程、程序、进程的基本概念。以及他们之间关系是什么
27.线程有哪些基本状态?
28.Java序列化中如果有些字段不想进行序列化,怎么办?
29.Java中I0流
30.Java I0与HI0的区别
31.java反射的作用于原理
32.说说List, Set, Map三者的区别?
1.Sprine的I0C和AOP机制?
2.Spring中Autowired和Resouree关键字的区别?
3.依赖注入的方式有几种,各是什么?
4.讲一下什么是Spring
5.Spr ing MVC流程.
6.Spri ngMVYC怎么样设定重定向和转发的?
7. Sprin/MVC常用的注解有哪些?
8.Sprina的AOP理解:
9.Sprine的I0C理解
10.解释- -下spring be an的生命周期
11.解释Spring支持的几种bean的作用域。
12. Spring基于xm1注入bean的几种方式:
13.Spring框架中都用到了哪些设计模式?
1.什么是SpringBoot?为什么要用SpringBoot
2.Spring Boot. 的核心注解是哪个?它主要由哪几个注解组成的?
3.运行Spring Boot有哪几种方式
4.如何理解Spring Boot 中的Starters?
5.如何在Spring Boo.启动的时候运行一些特定的代码?
6.Spring Boot需要独立的容器运行吗?
7.Spring Boot中的监视器是什么?
8.如何使用Spring Boot实现异常处理?
9.你如何理解Spring Boot中的Starters?
10.springboot常用的starter有哪些
11.SpringBoot 实现热部署有哪几种方式?
12.如何理解Spring Boot配置加载顺序?
13.Spring Boot的核心配置文件有哪几个?它们的区别是什么?
14.如何集成Spring Boot和ActiveMQ?
15.如何重新加载Spring Boot上的更改,而无需重新启动服务器?
16.Spring Boot、Spring MVC和Spring有什么区别?
17. 能否举一个例子来解释更多Staters的内容?
18.Spring Boot还提供了其它的哪些Starter Project Opti ons
1.数据库的三范式是什么
2.数据库引擎有哪些
3.InoDB与MyISAM的区别
4.数据库的事务
5.索引问题
6.SQL优化
7.简单说一说drop、 delete与truncate的区别
8.什么是视图
9.什么是内联接、左外联接、右外联接?
10.并发事务带来哪些问题?
11.事务隔离级别有哪些?MySQI的默认隔离级别是?
12.大表如何优化?
13.分库分表之后,id主键如何处理?
14.mysq1有关权限的表都有哪几个
15.mysq1有哪些数据类型
16.创建索引的三种方式,删除索引
1.什么是MyBatis
2.MyBati s的优点和缺点
3.#}和$ {}的区别是什么?
4.当实体类中的属性名和表中的字段名不一样,怎么办?
5.Mybatis是如何进行分页的?分页插件的原理是什么?
6.Mybatis是如何将sql执行结果封装为目标对象并返回的?都有哪些映射形式?
7.如何执行批量插入?
8.Xm1映射文件中,除了常见的select |insert lupdae |delete标签之外,还有哪些标签?
9.MyBatis实现一对一有几种方式?具体怎么操作的?
10.Mybatis是否支持延迟加载?如果支持,它的实现原理是什么?
11.Mybatis的一级、二级缓存:
1.Redi s持久化机制
2.缓存雪崩、缓存穿透、缓存预热、缓存更新、缓存降级等问题
3.热点数据和冷数据是什么
4.Memcache与Redi s;的区别都有哪些?
5.单线程的redi s为什么这么快
6.redi s的数据类型,以及每种数据类型的使用场景
7.redi s的过期策略以及内存淘汰机制
8.Redis为什么是单线程的
9.Redis常见性能问题和解决方案?
10.为什么Redi s的操作是原子性的,怎么保证原子性的?
11.Redis事务
1.简述一下什么是Nginx,它有什么优势和功能?
2.Nginx是如何处理一个HTTP请求的呢?
3.列举-些Ngi nx的特性
4.请列举Nginx和Apache之间的不同点
5.在Hginx中;如何使用未定义的服务器名称来阻止处理请求?
6.请解释Nei rx服务器上的Master和W orker进程分别是什么?
7.请解释代理中的正向代理和反向代理
8.解释Nginx用途
1.什么是SpringCloud
2.什么是微服务
3.SpringCloud有什么优势
4.什么是服务熔断?什么是服务降级?
5.Eureks和zookeeper都可以提供服务注册与发现的功能,请说说两个的区别?
6.SpringBoot和SpringCloud的区别?
7.负载平衡的意义什么?
8.什么是Hystrix?它如何实现容错?
9.什么是Hystrix断路器?我们需要它吗?
10.说说RPC的实现原理
1. ZooKeeper 是什么?
2. ZooKeeper 提供了什么?
3. Zookeeper文件系统
4. ZAB 协议?
5. 四种类型的数据节点Znode
6. Zookeeper Watcher 机制--数据变更通知
7.客户端注册Watcher 实现
8. 服务端处理Watcher 实现
9.客户端回调Watcher
10. ACL 权限控制机制
11. Chroot 特性
12.会话管理
13.服务器角色
14. Zookeeper 下Server工作状态
15.数据同步
16. zookeeper 是如何保证事务的顺序一致性的?
17.分布式集群中为什么会有Master?
18. zk 节点宕机如何处理?
19. zookeeper 负载均衡和nginx负载均衡区别
20. Zookeeper 有哪几种几种部署模式?
21.集群最少要几台机器,集群规则是怎样的?
22. 集群支持动态添加机器吗?
23. Zookeeper 对节点的watch监听通知是永久的吗?为什么不是永久的?
24. Zookeeper 的java客户端都有哪些?
25. chubby 是什么,和zookeeper比你怎么看?
26. 说几个zookeeper 常用的命令。
27. ZAB和Paxos算法的联系与区别?
28. Zookeeper的典型应用场景
1.如何获取topic 主题的列表
2.生产者和消费者的命令行是什么?
3.consumer 是推还是拉?
4.讲讲kafka维护消费状态跟踪的方法
5.讲一下主从同步
6.为什么需要消息系统,mysql不能满足需求吗?
7.Zookeeper 对于Kafka的作用是什么?
9.Kafka判断-个节点是否还活着有那两个条件?
10.Kafka与传统MQ消息系统之间有三个关键区别
11.讲一讲kafka的ack的三种机制
12.消费者如何不自动提交偏移里由应用提交?
13.消费者故障,出现活锁问题如何解决?
14.如何控制消费的位置
15.kafka分布式(不是单机)的情况下,如何保证消息的顺序消费
16.kafka的高可用机制是什么?
17.kafka如何减少数据丢失
18.kafka如何不消费重复数据?比如扣款,我们不能重复的扣。
1.为什么使用顺
2.MQ优缺点
3.Kafka、ActiveMQ、Rabbi tMQ、RocketMQ都有什么区别?
4.如何保证高可用的?
5.如何保证消息的可靠传输?如果消息丢了怎么办
6.如何保证消息的顺序性
7.如何解决消息队列的延时以及过期失效问题?消息队列满了以后该怎么处理?有几百万消息持续积压几小时,说说怎么解决?
8.设计M9的思路
1.elasticsearch. 了解多少,说说你们公司es. 的集群架构,索引数据大小,分片有多少,以及一些调优手段。
2.elasticsear ch的倒排索引是什么
3.elasticsearch 索引数据多了怎么办,如何调优,部署
4.elasticsearch是如何实现mster 选举的
5.详细描述一 下Elasticsearch索引文档的过程
6.详细描述一 下Flasticsearch搜索的过程?
7.Elasticsearch 在部署时,对Linux的设置有哪些优化方法
8.lucence内部结构是什么?
9.Elasticsearch 是如何实现Master选举的?
10.Elasticsearch 中的节点(比如共20个),其中的10个
11.客户端在和集群连接时,如何选择特定的节点执行请求的?
12.详细描述一 下Elasticsearch索引文档的过程。
13.详细描述一 下Elasticsearch更新和删除文档的过程。
14.详细描述一 下Elasticsearch搜索的过程。
15.在Elasticsearch中,是怎么根据一个词找到对应的倒排索引的?
16.Elasticsearch 在部署时:又Linux的设置有哪些优化方法?
17.对于GC方面,在使用Elasticsearch时要注意什么?
18.Elasticsearch对于大数据量(上亿量级) 的聚合如何实现?
19.在并发情况下,Flasticsearc h如果保证读写- 致?
20.如何监控Elasticsearch集群状态?
21.介绍下你们电商搜索的整体技术架构。
22.介绍一下你们的个性化搜索方
23.是否了解字典树?
24.拼写纠错是如何实现的?
1.绝对路径用什么符号表示?当前目录、上层自录用什么表示?主目录用什么表示?切换目录用什么命令?
2.怎么查看当前进程?怎么执行退出?怎么查看当前路径?
3.怎么清屏?怎么退出当前命令?怎么执行睡眠?怎么查看当前用户id?查看指定帮助用什么命令?
4.Ls命令执行什么功能?可以带哪些参数,有什么区别?
5.建立软链接(快捷方式),以及硬链接的命令。
6.目录创建用什么命令?创建文件用什么命令?复制文件用什么命令?
7.查看文件内容有哪些命令可以使用?
8.随意写文件命令?怎么向屏幕输出带空格的字符串,比如”hello world" ?
9.终端是哪个文件夹下的哪个文件?黑洞文件是哪个文件夹下的哪个命令?
10.移动文件用哪个命令?改名用哪个命令?
11.复制文件用哪个命令?如果需要连同文件夹一块复制呢?如果需要有提示功能呢?
12.删除文件用哪个命令?如果需要连目录及目录下文件一块删除呢?删除空文件夹用什么命令?
13.Linux下命令有哪几种可使用的通配符?分别代表什么含义?
14.用什么命令对一个文件的内容进行统计? (型号、 单词数、字节数)
15.Grep命令有什么用?如何忽略大小写?如何查找不含该串的行?
16.Linur中进程有哪几种状态?在ps显示出来的信息中,分别用什么符号表示的?
17.怎么使一个命令在后台运行?
18.利用ps怎么显示所有的进程?怎么利用ps查看指定进程的信
19.哪个命令专i ]用来查看后台任务?
20.把后台任务调到前台执行使用什么命令?把停下的后台任务在后台执行起来用什么命令?
21.终止进程用什么命令?带什么参数?
22.怎么查看系统支持的所有信号?
23.搜索文件用什么命令?格式是怎么样的?
24.查看当前谁在使用该主机用什么命令?查找自己所在的终端信息用什么命令?
25.使用什么命令查看用过的命令列表?
26.使用什么命令查看磁盘使用空间?空闲空间呢?
27.使用什么命令查看网络是否连通?
28.使用什么命令查看ip 地址及接口信息?
29.查看各类环境变量用什么命令
30.通过什么命令指定命令提示符
31.查找命令的可执行文件是去哪查找的?怎么对其进行设置及添加
32.通过什么命令查找执行命令?
33.怎么对命令进行取别名?
34.du和df的定义,以及区别
35.awk 详解。
36.当你需要给命令绑定一个宏或者按键的时候,应该怎么做呢?
37.如果一个linux新手想要知道当前系统支持的所有命令的列表, 他需要怎么做?
38.如果你的助手想要打印出当前的目录栈:你会建议他怎么做?
39.你的系统目前有许多正在运行的任务,在不重启机器的条件下,有什么方法可以把所有正在运行的进程移除呢?
40.bash shell 中的hash 命令有什么作用?
41.哪-个bash内置命令能够进行数学运算。
42.怎样一页一页地查看一个大文件的内容呢?
43.数据字典属于哪-个用户的?
44.怎样查看一个linw: 命令的概要与用法?假设你在/bin目录中偶然看到一个你从没见过的的命令,怎样才能知道它的作用和用法呢?
45.使用哪一个命令可以查看自己文件系统的磁盘空间配额呢?
46.列举几个常用的Linux命令
47.你平时是怎么查看日志的?
1.为什么说简历很重要?
2.先从面试来说
3.再从面试说起
4.必知必会的几点
5.必须了解的两大法则
6.项目经历怎么写
7.专业技能怎么写
8.排版注意事项
9.其他一些小tips
0
回答0
回答0
回答0
回答0
回答0
回答0
回答0
回答0
回答1
回答