面试题:健某科技
两年至三年的经验
8-12 专科行业默认比本科默认低2-3
常用方法
StringBuffer和StringBuilder都是用于处理字符串的类,都可以进行动态的字符串操作。
StringBuffer是线程安全的,适用于多线程环境;StringBuilder则不是线程安全的,适用于单线程环境或者确定不会被多个线程同时访问的场景
性能是StringBuilder比StringBuffer好,没有Synchronized修饰
当时我是有点傻眼的,我是知道数组 我不知道问的是 数组的含义 还是像arrayList 动态数组
数组 分静态数组、动态数组,如下面静态:
数组其实就是一个存储数据长度固定的容器,它可以保证多个数据的数据类型要一致。有三种的定义方式:
int[] arr = new int[6];这是定义存储6个整数的数据容器。
int[] arr = new int[]{1,2,3,4,5};这是定义存储1-5整数的数组容器。
int[] arr = {1,2,3,4,5};定义了1-5的整数的数组容器,开实际中较为常用的一种方式。
动态如:
ArrayList
ArrayList strings = new ArrayList<>();
遍历方法:
迭代器或for
import java.util.ArrayList;
import java.util.Iterator;
//删除指定的元素
ArrayList<Integer> strings = new ArrayList<>();
Iterator<Integer> it = strings.iterator();
while (it.hasNext()){
Integer next = it.next();
if(next == 100){
it.remove();
}
}
线程的生命周期:新建、可运行、阻塞、等待、计时等待、被终止
线程的创建方法
//核心3 最大10线程等200秒,等待100,饱和直接调用线程
ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(3, 10,
200, TimeUnit.SECONDS, new ArrayBlockingQueue<>(100), new ThreadPoolExecutor.CallerRunsPolicy());
explain SQL语句
索引优化:关注 possable_key、key、key_len字段,确保使用合适的索引,并且索引长度足够短
表关联优化:关注 type 字段,避免全表扫描 ALL,考虑添加索引或优化
子查询优化:关注select_type 字段,避免使用子查询导致全表扫描 ALL,使用join 操作替代
分区表优化:关注 partitions 字段, 尽量查询必要的分区,避免全表描述
SQL语句优化: 关注 row 和 filtered 字段 尽量减少扫描的行和过滤的行数,可以通过优化查询条件。推荐合适的索引d等方式实现
redis文章第三章
cache:
#使⽤的缓存类型
type: redis
#过时时间
redis:
time-to-live: 3600000
# 开启前缀,默以为true
use-key-prefix: true
# 键的前缀,默认就是缓存名cacheNames
key-prefix: XD_CACHE
# 是否缓存空结果,防⽌缓存穿透,默以为true
cache-null-values: true
@Cacheable(value = {"product"},keyGenerator = "springCacheDefaultKeyGenerator",cacheManager = "cacheManager1Minute",sync = true)
缓存雪崩(大批key 缓存失效,大并发请求瞬间击垮DB)
cache:
#使⽤的缓存类型
type: redis
#过时时间
redis:
time-to-live: 3600000
# 开启前缀,默以为true
use-key-prefix: true
# 键的前缀,默认就是缓存名cacheNames
key-prefix: XD_CACHE
# 是否缓存空结果,防⽌缓存穿透,默以为true
cache-null-values: true
JVM 底层面试题
当通过 Java 命令启动 Java 进程的时候,会为它分配内存。
内存的一部分用于创建堆空间,当程序中创建的对象时候,就从对空间中分配内存。
GC 是 JVM 内部的一个进程,回收无效对象的内存用于将来的分配
不能,可以调用 System.gc() 或者 Runtime.gc(),没办法保证 GC的执行
JVM 中堆和栈属于不同的内存区域,使用目的也不同。栈常用于保存方法帧和局部变量,而对象总是在堆上分配。栈通常都比堆小,也不会在多个线程之间共享,而堆被整个 JVM 的所有线程共享
jps:该命令查询当前系统中正在运行的java进程,可以获取进程的PID(进程ID)
jstat:监视JVM统计信息命令。获取到堆、垃圾回收、类加载器、编译等相关的数据
jcmd:命令行工具,用于执行各种JVM相关的操作,如生成线程转储快照。执行GC、执行JIT编译等
jinfo:该命令用于获取正在运行的Java进程的系统属性和JVM参数。通过jinfo命令,我们可以查看和修改JVM的运行参数,如堆内存大小、垃圾回收器等