java八股

1、git统计统计项目中所有文件的总代码行数git ls-files | xargs cat | wc -l

2、 mysql优化:

1用explain或者慢日志查询查找出需要优化的sql

2优化:尽量走索引,避免全文扫描,避免用select *:

2.1避免在where和order by字段添加索引,

2.2判断字段是否为空改为数值标记(如判断字段是否为0)

2.3or的字段,当其中一个字段没有索引会放弃索引,改为用nuion all

2.4 避免用in,一些连续的梳子条件,可改为用between and;或者用exist

2.5jion的表不要太多

3最后一种方法:把整段sql复制发给chatGPT,叫其优化,根据提供的方案进行验证。

3、 Netty

1Netty是基于NIO开发的网络通信框架【共用阻塞对象】

2BIO:同步阻塞模式,NIO:同步非阻塞模式,AIO:NIO2,它是异步非阻塞模型

3Netty 线程模型:基于 Reactor 模式,采用多路复用将事件分发给相应的 Handler 处理

4

RPC

远端通信机制,解决不同进程之间的相互调用

包含序列化模块,协议模块,网络通讯模块(客户端、服务端、网络传输)

5 TCP 长连接和短连接

TCP 在进行读写之前必须提前建立一个连接,短连接说的就是 server 端 与 client 端建立连接之后,读写完成之后就关闭掉连接,后续重新连接。长连接就是建立连接后不会主动关闭,后续的读写操作会继续使用这个连接。

6 :jvm调优:

设置JVM的参数如设置堆的起始内存和最大内存、设置gc回收频率。

https://segmentfault.com/a/1190000044547802

7 如何应对内存泄漏:

java内存泄漏是GC回收的标准没有达到,导致一些不需要的对象无法回收,大部分都是对象引用计数未达到0,比防止循环引用、在一些不需要的引用的时候,把对象置为null,以告诉GC该对象可以被回收,减少内存消耗

8 【没理解透】

强引用:引用计数为0的时候,回收。

软引用【不会计引用计数】:其他地方没人用的时候且内存不够就回收。SoftReference

弱引用【不会计引用计数】::其他地方没人用的时候一定回收。

虚引用:一定回收,get出来就是null

9

Spring事务传播行为(机制)(高频)

1. PROPAGATION_REQUIRED --- required

以事务方式执行、新建一个事务,如果已经存在一个事务中,加入到这个事务中。这是最常见的选择。

2. PROPAGATION_REQUIRES_NEW --- required_new

以事务方式执行、新建事务,如果当前存在事务,把当前事务挂起。

3. PROPAGATION_SUPPORTS --- supports

以当前情况运行,有事务以事务方式运行,没事务以没事务运行

4. PROPAGATION_NOT_SUPPORTED --- not_supported

以非事务方式执行,如果当前存在事务,就把当前事务挂起。

5. PROPAGATION_MANDATORY --- mandatory

使用当前的事务,如果当前没有事务,就抛出异常。

6. PROPAGATION_NEVER --- never

以非事务方式执行,如果当前存在事务,则抛出异常。

7. PROPAGATION_NESTED --- nested

如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则执行与PROPAGATION_REQUIRED类似的操作。

10 在项目中怎么用到redis

redission分布式锁

1 解决不同进程之间的同步问题,(synchronized解决不同线程之间的同步问题)

2 基于setnex(name value time)思想(服务器挂了,获得锁的进程无法释放锁,导致新进程永远无法获取锁,所有要设置有效期,但是有效期内获取锁的线程没有),有一个续约机制【在设置的同时,开启一个线程计时,时间到了还没有人来清空计时器就续约重置】

3 使用getLock(String var1).tryLock(long waitTime, long leaseTime, TimeUnit unit)获取锁

4 lock()等待获取锁,会阻塞,tryLock()不等待,立即返回获取结果

11

lock锁是在JUC【java.util.concurrent】包下的接口,该包下面有很多类,包括ReenranLock,lock接口里面有lock方法和unlock方法,lock是提供公平锁机制(线程排队,无法插队)

12

spring的注入方式:

1@Autowired自动注入,只需要在变量上面定义,可能会循环依赖

2 构造器注入,定义用final修饰变量后(不能为null),在创建一个构造器(@Autowired修饰【可能是告诉类加载时的默认构造器】)或者用@RequiredArgsConstructor修饰

3 set注入 (@Autowired修饰)

13

类加载执行顺序:

【父->子类】静态变量/静态代码块---->【父->子类】成员变量|非静态代码块----->【父->子类】构造器

14

HashMap是一个键值对集合,源码中每个节点用Node<K,V>表示,HashMap的数据结

构为数组+(链表或红黑树)

15

CAS 是一种积极锁的一种机制,java的实现在atomic包下面的原子类,在硬件层面解决,线程去拿期望值和内存值比较,如果不一样就证明被修改,会放弃修改。解决ABA问题是加版本

16

匿名内部类:没有名字的内部类,在创建类的同时创建实例,减少冗余代码,使用方式是,定义父类/接口 对象=new 出相关父类和接口

泛型:不明确指出哪一类,可用在类、方法、接口

通配符:1定义泛型的一类范围,通常表示泛型的子类,有? exstends 泛型

2 ?super 泛型;表示从T开始的超类,直到Object

3 <?> 代表所有类型5

17 redis

1支持lua脚本:能保证原子性,在rredission里面大量使用,用SCRIPT和EVAL来写

2 事务:用MULTI(多个的意思)开启,用ecex来执行,不支持回滚,用乐观锁思想【WATCH】来完成事务的隔离性

18 算法:

二分查找法:

解决:在一个有序的集合找到到目标值

实现:1.1判断索引的最大值和最小值,如果最大值比最小值小,则范围,排查空数组

1.2 查找索引向下取整

19 springbean是线程安全的吗?

大多的spring bean是单例,有成员变量且有读写操作存在现在不安全;把该变量声明在方法中就安全了。

20 跨域问题:

域名不同的访问、协议不同(https和http)、端口不同会造成跨域问题

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值