面试复盘

复盘1

1.重写和重载返回类型是否可以变化

重写不可以改变;重载可以改变。

2.mybatis动态sql

if、choose、when、otherwise、trim、where、set、foreach、script、bind

3.redis的value类型,redis为什么高并发快

string、hash、list、set、zset;

redis是基于内存的,内存的读写速度非常快;

redis是单线程的,省去了很多上下文切换线程的时间;

redis使用多路复用技术,可以处理并发的连接。

参考

4.hashmap和hashtable区别

hashmap去掉了hashtable的contain方法,加上了containValue方法和containKey方法

hashmap是非同步的,hashtable是同步的

hashmap允许空键值,hashtable不允许

5.nginx反向代理和负载均衡

反向代理,例如:用户访问网站地址A,实际网站的是地址B(增强了安全性,增加了可伸缩性和灵活性,加速web访问速度)

负载均衡,为了减轻访问压力,把项目部在多台机子上,用户的访问是无感的。

6.倒转数据123456输出成654321

StringBuilder或者StringBuffer的reverse方法

7.string为什么是final修饰的

为了实现字符串池

为了线程安全性

为了实现string可以创建hashcode不可变性

8.数据库删除重复数据

参考

9.wait和sleep区别,notify和allnotify区别

sleep():方法是线程类(Thread)的静态方法,让调用线程进入睡眠状态,让出执行机会给其他线程,等到休眠时间结束后,线程进入就绪状态和其他线程一起竞争cpu的执行时间。因为sleep() 是static静态的方法,他不能改变对象的机锁,当一个synchronized块中调用了sleep() 方法,线程虽然进入休眠,但是对象的机锁没有被释放,其他线程依然无法访问这个对象。

wait():wait()是Object类的方法,当一个线程执行到wait方法时,它就进入到一个和该对象相关的等待池,同时释放对象的机锁,使得其他线程能够访问,可以通过notify,notifyAll方法来唤醒等待的线程

  • 如果线程调用了对象的 wait()方法,那么线程便会处于该对象的等待池中,等待池中的线程不会去竞争该对象的锁。
  • 当有线程调用了对象的 notifyAll()方法(唤醒所有 wait 线程)或 notify()方法(只随机唤醒一个 wait 线程),被唤醒的的线程便会进入该对象的锁池中,锁池中的线程会去竞争该对象锁。也就是说,调用了notify后只要一个线程会由等待池进入锁池,而notifyAll会将该对象等待池内的所有线程移动到锁池中,等待锁竞争。
  • 优先级高的线程竞争到对象锁的概率大,假若某线程没有竞争到该对象锁,它还会留在锁池中,唯有线程再次调用 wait()方法,它才会重新回到等待池中。而竞争到对象锁的线程则继续往下执行,直到执行完了 synchronized 代码块,它会释放掉该对象锁,这时锁池中的线程会继续竞争该对象锁。
10.run和start的区别

每个线程都是通过某个特定Thread对象所对应的方法run()来完成其操作的,方法run()称为线程体。通过调用Thread类的start()方法来启动一个线程。

start()方法来启动一个线程,真正实现了多线程运行。这时无需等待run方法体代码执行完毕,可以直接继续执行下面的代码; 这时此线程是处于就绪状态, 并没有运行。 然后通过此Thread类调用方法run()来完成其运行状态, 这里方法run()称为线程体,它包含了要执行的这个线程的内容, Run方法运行结束, 此线程终止。然后CPU再调度其它线程。

run()方法是在本线程里的,只是线程里的一个函数,而不是多线程的。 如果直接调用run(),其实就相当于是调用了一个普通函数而已,直接待用run()方法必须等待run()方法执行完毕才能执行下面的代码,所以执行路径还是只有一条,根本就没有线程的特征,所以在多线程执行时要使用start()方法而不是run()方法。

11.事务,事务隔离级别,事务什么时候回执行失败

ACID

原子性 事务开始后所有操作,要么都做,要么都不做,不可能停滞在中间环节

一致性 事务开始前和结束后,数据库的完整约束没有被破坏。比如a向b转账,不可能a扣了钱,b没有收到

隔离性 同一时间,只允许一个事务请求一个数据,不同的事务之间彼此没有任何干扰

持久性 事务结束后,事务对数据库的所有更新将被保存到数据库,不能回滚

隔离级别

读未提及

读已提交

可重复度

串行化

12.mybatis对应表别名操作

resultmap

sql查询别名设置

复盘2

1.遍历 先序遍历,后序遍历,中序遍历

2.string stringbuilder stringbuffer区别

3.2阶乘8,最高效率

4.常见异常

5.springboot介绍

6.spring、springboot、spring cloud常用注解

7.nginx部署,负载均衡,反向代理

复盘3

1.spring bean生命周期

2.spring怎么手动导入jar包使用

3.spring怎么看源码包

4.http讲解

5.redis用过哪些

复盘4

1.Linux查看正在运行的java程序

https://blog.csdn.net/dummyo/article/details/102622651

ps的使用

http://c.biancheng.net/view/1062.html

复盘5

1.gc是守护线程吗
2.exception的继承类

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rCa0qFQs-1616591397936)(C:\Users\15409\AppData\Roaming\Typora\typora-user-images\image-20210323103338657.png)]

3.synchronized 和 volatile 的区别是什么?
  • volatile本质是在告诉jvm当前变量在寄存器(工作内存)中的值是不确定的,需要从主存中读取; synchronized则是锁定当前变量,只有当前线程可以访问该变量,其他线程被阻塞住。
  • volatile仅能使用在变量级别;synchronized则可以使用在变量、方法、和类级别的。
  • volatile仅能实现变量的修改可见性,不能保证原子性;而synchronized则可以保证变量的修改可见性和原子性。
  • volatile不会造成线程的阻塞;synchronized可能会造成线程的阻塞。
  • volatile标记的变量不会被编译器优化;synchronized标记的变量可以被编译器优化。
CREATE TABLE `t_user` (
	`id` INT ( 11 ) NOT NULL AUTO_INCREMENT,
	`c_user_id` VARCHAR ( 36 ) NOT NULL DEFAULT '',
	`c_name` VARCHAR ( 22 ) NOT NULL DEFAULT '',
	`c_province_id` INT ( 11 ) NOT NULL,
	`c_city_id` INT ( 11 ) NOT NULL,
	`create_time` datetime NOT NULL,
	PRIMARY KEY ( `id` ) 
	) ENGINE = INNODB DEFAULT CHARSET = utf8mb4
	CREATE TABLE `t_user_memory` (
	`id` INT ( 11 ) NOT NULL AUTO_INCREMENT,
	`c_user_id` VARCHAR ( 36 ) NOT NULL DEFAULT '',
	`c_name` VARCHAR ( 22 ) NOT NULL DEFAULT '',
	`c_province_id` INT ( 11 ) NOT NULL,
	`c_city_id` INT ( 11 ) NOT NULL,
	`create_time` datetime NOT NULL,
PRIMARY KEY ( `id` ) 
) ENGINE = MEMORY DEFAULT CHARSET = utf8mb4

https://blog.csdn.net/ybw_2569/article/details/96463387
CALL add_vote_memory(1000000);

CREATE FUNCTION `rand_string`(n INT) RETURNS varchar(255) CHARSET latin1 
BEGIN   
DECLARE chars_str varchar(100) DEFAULT 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';   
DECLARE return_str varchar(255) DEFAULT '' ;  
DECLARE i INT DEFAULT 0;   
WHILE i < n DO   
SET return_str = concat(return_str,substring(chars_str , FLOOR(1 + RAND()*62 ),1));   
SET i = i +1;   
END WHILE;   
RETURN return_str;   
END 

show  VARIABLES like '%%table_size%'

show variables like '%tmp_table%'

show variables like '%max_heap%'

SET GLOBAL tmp_table_size=2147483648; 
SET GLOBAL max_heap_table_size=2147483648;

set session tmp_table_size=1024*1024*1024;

set session max_heap_table_size=1024*1024*1024;

show variables like '%tmp%';

delete from vote_record_memory

show processlist

复盘6 20210324

1.redis常用数据结构及应用场景

string:计数器、统计多单位的数量、对象缓存存储

list:栈、队列、阻塞队列

hash:对象的存储

set:共同关注、共同好友、二度爱好、推荐好友

zset:排行榜、取TOP n测试

2.描述一下aop?aop有哪些可用的实现?

https://blog.csdn.net/dadiyang/article/details/82920139

https://www.jianshu.com/p/c5b3ac487188

3.线程的五种状态?

创建、就绪、运行、阻塞、死亡

4.创建线程池的参数

https://blog.csdn.net/yongxuezhen/article/details/92668419

5.sql的优化

https://youzhixueyuan.com/MySQL-slow-query-optimization-index-optimization.html

复盘6 20210324

1.redis常用数据结构及应用场景

string:计数器、统计多单位的数量、对象缓存存储

list:栈、队列、阻塞队列

hash:对象的存储

set:共同关注、共同好友、二度爱好、推荐好友

zset:排行榜、取TOP n测试

2.描述一下aop?aop有哪些可用的实现?

参考

参考2

3.线程的五种状态?

创建、就绪、运行、阻塞、死亡

4.创建线程池的参数

参考

5.sql的优化

参考

复盘7

1.@Controller @Server在多线程环境下使用单例还是多例

经过测试使用单例会出现资源竞争,多例则不会

2.sql查重

参考

3.string统计字节数

.getBytes().length

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值