面试分两个流程:
1. 先做10道题,通过4道即可参与面试。
2. 面试的时候是一对一的模式。
准备按照我的记忆把题目整理一下
一、 笔试题整理:
1. 引用传递和值传递考查,以下打印结果为:
package com.tedu.day05;
/**
*author:bingbing
*日期:2020年7月15日
*时间:下午9:36:06
*/
public class Demo01 {
public static void main(String[] args) {
int i=0;
aow(i++);
System.out.println(i);
}
private static void aow(int i) {
i+=2;
}
}
打印结果为: 1
实参给形参传值,实则是形参对是实参变量的拷贝,以此改变的只是形参地址对应下的值,对实参没有影响。
2. 考查concat用法
如下代码的结果是什么:
package com.example.file;
import com.example.contructor.main;
public class Demo06 {
public static void main(String[] args) {
String str1="123";
str1.concat("456");
System.out.println(str1.concat(789));
}
}
编译错误! 传的参数必须为字符串类型,另外str1="123";
3. "abc" instanceof Object 返回结果为:
true
考虑到instanceof 的用法, Object类是所有的类的父类, 表示的是 instanceof的左边是不是右边的实例。如果左边是右边的对象或者是子类创建的对象时,那么返回true,否则返回fasle,如果是null就返回false。
package com.example.file;
import com.example.contructor.main;
public class Demo06 {
public static void main(String[] args) {
if("abc" instanceof Object){
System.out.println("122213");
}
if(null instanceof Object){
System.out.println(111);
}
}
}
4. interrupt和interrupted的用法
interrupt()方法是将当前线程添加一个中断标识,如果这个时候有sleep()方法,那么就会抛出interruptedException异常。
interrupted()方法可判断当前线程是不是有没有被标有中断标识,如果有的话返回true。
package com.example.file;
public class Demo07 {
public static void main(String[] args) {
new Thread(){
@Override
public void run() {
int a=100;
try {
interrupt();
Thread.sleep(3000);
if(interrupted()){
a=300;
System.out.println(a);
}
} catch (Exception e) {
a=200;
System.out.println(a);
}finally{
a=500;
System.out.println(a);
}
System.out.println(a);
}
}.start();
}
}
打印结果为:
200
500
500
小结:
1) interrupt()方法用于向线程发送一个终止通知的信号,会给该线程内设置一个中断标识,这个线程并不会因为调用了interrupt()方法而改变状态。
2) 如果这个时候再调用了sleep()方法,那么就会抛出InterruptedException, 在抛出异常前,中断标识为会清除掉。因此interrupted()的结果为false。
接下来我们把sleep()方法去掉后:
package com.example.file;
public class Demo07 {
public static void main(String[] args) {
new Thread(){
@Override
public void run() {
int a=100;
try {
interrupt();
if(interrupted()){
a=300;
System.out.println(a);
}
} catch (Exception e) {
a=200;
System.out.println(a);
}finally{
a=500;
System.out.println(a);
}
System.out.println(a);
}
}.start();
}
}
打印结果为:
300,500,500
sleep()方法去掉后,线程不会改变状态,只是中断标识被设置成了true。因此interrupted返回true。
5. 考查Java关键字包含哪些? 从中选择出正确的
java的关键字主要包含:
abstract、assert、boolean、break、byte、case、catch、char、class、continue、default、do、double、else、enum、extends、final、finally、float、for、if、implements、import、int、interface、instanceof、long、native、new、package、private、protected、public、return、short、static、strictfp、super、switch、synchronized、this、throw、throws、transient、try、void、volatile、while。
第二部分: 面试题整理
主要问了我mysql和redis这2块,可能是因为我的简历上写的是熟悉Mysql和Redis。
1. mysql的explain 用法?
用来解释select 查询的语句的一些信息。
2. mysql的主键生成策略有哪些?
1) 自增长式。
2)UUID类型。
3. mysql 的Binlog是什么?
日志恢复工具。
4. 怎么使用mysql实现模糊查询,不使用like和全文索引?
5. redis有哪几种数据类型?
常用的数据类型有: String,hash,list,set。
6. redis的zset怎么保证数据的顺序性?
通过score参数来保证顺序性。
7. redis怎么实现一个轮询的操作?
可以借助
8. redis的key的命名规范是怎么样的?
答: 服务名+模块名+ 字面意思。
9. 你在项目中会遇到redis的哪些问题,是怎么解决的?
1) 缓存大面积失效。
2) 过热的Key问题。
3) 缓存穿透问题。
10. rabbitmq的生产者发送消息给消息队列在网络正常,rabbitmq没有挂掉的情况下,是什么原因导致没有接收到消息,应该要怎么处理?
11. 一致性的哈希是怎么实现的?
12. mysql的bigint是Java的Long类型嘛?
答: bigint没有勾选无符号按钮时,是映射到Long类型的,如果勾选了无符号按钮,则映射到BigInteger。
int 没有勾选无符号按钮时,会映射到 Integer类型,如果勾选了无符号按钮,那么会映射到Long类型。