2020/9月面的.目前已经收到该公司的意向offer. 这场面试覆盖范围比较广,但偏基础,校招嘛,考察的是知识体系覆盖的怎么样.
java基础
1 == equals区别
== 比较基本数据类型时,比较是值.比较引用类型时,比较的是地址值
equals 情况 1:类没有覆盖 equals()
方法。则通过 equals()
比较该类的两个对象时,等价于通过“==”比较这两个对象。使用的默认是 Object
类equals()
方法。
情况 2:类覆盖了 equals()
方法。一般,我们都覆盖 equals()
方法来两个对象的内容相等;若它们的内容相等,则返回 true(即,认为这两个对象相等)。
2:string能不能继承 与buffer builder的区别
string 被final修饰不能继承. buffer是线程安全的,builder是线程不安全的但效率更高
3 hashcode与equals的区别
hashCode()
的作用是获取哈希码,也称为散列码;它实际上是返回一个 int 整数,可以重复,但是会有问题.比如set集合,存放元素的时候是根据hashcode来计算元素是否存在,如果重复就会冲突
重写 equals
时必须重写 hashCode
方法
如果两个对象相等,则 hashcode 一定也是相同的。两个对象相等,对两个对象分别调用 equals 方法都返回 true。但是,两个对象有相同的 hashcode 值,它们也不一定是相等的 。因此,equals 方法被覆盖过,则 hashCode
方法也必须被覆盖。
4 基本数据类型
byte short long double float int char boolean
5 String s=new String("w") 创建几个对象
一个或者两个对象,看常量池中是否有 "w"这个对象
6 collection和collections的区别
collection接口下包含list,set集合. collections是一个工具类,给集合提供封装好的方法
7 set 和list的实现类及区别
HashSet
(无序,唯一): 基于HashMap
实现的,底层采用HashMap
来保存元素LinkedHashSet
:LinkedHashSet
是HashSet
的子类,并且其内部是通过LinkedHashMap
来实现的。TreeSet
(有序,唯一): 红黑树(自平衡的排序二叉树)
Arraylist
:Object[]
数组Vector
:Object[]
数组LinkedList
: 双向链表(JDK1.6 之前为循环链表,JDK1.7 取消了循环)
他们之间的区别.内容较多, 建议系统学习.本题略
8 >> & && 这些运算符的作用
& 两位同时为“1”,结果才为“1”,否则为0
| 参加运算的两个对象只要有一个为1,其值为1。
^ 异或运算符 运算规则:0^0=0; 0^1=1; 1^0=1; 1^1=0; 相同为0 不同为1
~ 取反运算符 运算规则:~1=0; ~0=1; 即:对一个二进制数按位取反,即将0变1,1变0。
左移运算符(<<)左移1位后a = a *2;
右移运算符(>>)操作数每右移一位,相当于该数除以2。
右移运算符(>>>) 不带符号的右移
9 java中的锁
![](https://i-blog.csdnimg.cn/blog_migrate/a17a68c3edd149388e680e33a4440bb0.png)
10 乐观锁和悲观锁
我写过乐观锁和悲观锁介绍的文章 https://blog.csdn.net/wang5701071/article/details/108488834
11 线程池有那几种?
线程池我比较了解的就是ThreadPoolExecutor.其他线程池也是基于这个线程池来实现的.
12 实现线程的几种方法
继承Thread 实现runnable接口 实现callable接口
13 线程池底层用的什么数据结构
面试官应该想问的是队列的相关知识,但是当场没想明白.
14 java8的特性及具体怎么使用
lambda表达式,stream流 这些很重要
lambda函数式编程, 缩短了很多代码量,可以不写匿名内部类而直接写参数.参数的修饰符都可以省略掉.
Stream流 操作分为中间操作或者最终操作两种,最终操作返回一特定类型的计算结果,而中间操作返回Stream本身.List 或者 Set支持, Map 不支持
15 jvm的分区
程序计数器,堆区,方法区,本地方法栈,虚拟机栈
16 GC的实现方式
引用计数法,可达性算法.这两种
17 jvm的参数调优
- 针对JVM堆的设置,一般可以通过-Xms -Xmx限定其最小、最大值,为了防止垃圾收集器在最小、最大之间收缩堆而产生额外的时间,通常把最大、最小设置为相同的值;
- 年轻代和年老代将根据默认的比例(1:2)分配堆内存, 可以通过调整二者之间的比率NewRadio来调整二者之间的大小,也可以针对回收代。比如年轻代,通过 -XX:newSize -XX:MaxNewSize来设置其绝对大小。同样,为了防止年轻代的堆收缩,我们通常会把-XX:newSize -XX:MaxNewSize设置为同样大小。
18 java中的队列
Queue: 基本上,一个队列就是一个先入先出(FIFO)的数据结构
Queue接口与List、Set同一级别,都是继承了Collection接口。LinkedList实现了Deque接 口。
19 juc下都有什么
引用类型的原子类. 并发的集合 , locks , aqs.
20 重载和重写的区别
重载发生同一类.参数列表不同,方法名相同.与返回值,访问权限无关
重写发生在父子类中.方法名,参数列表相同.访问权限大于等于父类.返回值小于父类
21 线程的几种状态,start方法运行后会怎么样.
新建,就绪,运行,阻塞.死亡
22 单例设计模式, 工厂设计模式 spring中的设计模式
spring运用到了单例模式,工厂模式.策略模式.代理模式
23 异常与error的区别
异常可以捕获后继续运行,error发生后不能继续运行
24 try返回值的时候,finaly会不会执行
会
25 finaly推荐不推荐写return?
不推荐.finaly是用来最终处理的一些操作
26 介绍下aqs
如果被请求的共享资源空闲,则将当前请求资源的线程设置为有效的工作线程,并且将共享资源设置为锁定状态。如果被请求的共享资源被占用,那么就需要一套线程阻塞等待以及被唤醒时锁分配的机制,这个机制 AQS 是用 CLH 队列锁实现的,即将暂时获取不到锁的线程加入到队列中。
27 Sync的原理
Monitor是线程私有的数据结构,同时还有一个全局的可用列表。每一个被锁住的对象都会和一个monitor关联,表示该锁被这个线程占用。
javaWEB
0 jsp的内置对象
基本上不用jsp了 略
1 过滤器怎么实现
1.创建Filter类
2.在web.xml文件中配置Filter
2 request的几种方法,以及他们的作用
获得客户机信息
getRequestURL方法返回客户端发出请求时的完整URL。
getRequestURI方法返回请求行中的资源名部分。
getQueryString 方法返回请求行中的参数部分。
getPathInfo方法返回请求URL中的额外路径信息。额外路径信息是请求URL中的位于Servlet的路径之后和查询参数之前的内容,它以“/”开头。
getRemoteAddr方法返回发出请求的客户机的IP地址。
getRemoteHost方法返回发出请求的客户机的完整主机名。
getRemotePort方法返回客户机所使用的网络端口号。
getLocalAddr方法返回WEB服务器的IP地址。
getLocalName方法返回WEB服务器的主机名。
获得客户机请求头
getHeader(string name)方法:String
getHeaders(String name)方法:Enumeration
getHeaderNames()方法
获得客户机请求参数(客户端提交的数据)
- getParameter(String)方法(常用)
- getParameterValues(String name)方法(常用)
- getParameterNames()方法(不常用)
- getParameterMap()方法(编写框架时常用)
3 登录的话 sessionid 在cookie中存放的和正常的cookie有什么区别
不知道,有知道的老哥帮忙解答下.
4 spring上下文怎么获取
通过ClassPathXmlApplicationContext类获取。使用方法如下:
ApplicationContext ap = new ClassPathXmlApplicationContext("applicationContext.xml");
5 spring中怎么实现对方法的拦截,具体步骤
使用aop
6 spring的作用域,以及单列,多列对象怎么实现
- singleton : 唯一 bean 实例,Spring 中的 bean 默认都是单例的。
- prototype : 每次请求都会创建一个新的 bean 实例。
- request : 每一次HTTP请求都会产生一个新的bean,该bean仅在当前HTTP request内有效。
- session : 每一次HTTP请求都会产生一个新的 bean,该bean仅在当前 HTTP session 内有效。
- global-session: 全局session作用域,
7 mybatis的$ # 区别
一个预编译,一个不是预编译
8 mybatis的 resultmap 和resulttype的区别
resultType:当使用resultType做SQL语句返回结果类型处理时,对于SQL语句查询出的字段在相应的pojo中必须有和它相同的字段对应,而resultType中的内容就是pojo在本项目中的位置。
resultMap:当使用resultMap做SQL语句返回结果类型处理时,通常需要在mapper.xml中定义resultMap进行pojo和相应表字段的对应。
9 mybatis的mapper方法 如果dao层没有对应的接口会怎样
报错,mybatis是采用动态代理来实现的,找不到接口就会报错
数据库
1 sql关键字的执行顺序
from where group by select order by limit
2 求平均数的函数,以及求全班平均数的sql
group by+avg
3 like关键字,怎么保证索引被使用
模糊匹配放到最后