# 软通动力一面

## Linux

1. 进入目录命令

2. 创建文件、创建文件夹

3. 查询日志，实时日志？历史日志

4. 启动jar包 && 后台运行 && 打印日志到指定文件命令 

5. 还了解什么高阶的命令


## 线程池

1. 线程池核心参数有几个？
2. 线程提交任务流程
3. 线程池任务抛异常了怎么办？
4. 核心线程和非核心线程的区别？

## 集合

1. 常见的集合类型有哪些？

2. ArrayList 和 LinkList的区别？

3. hashmap线程安全吗？如果并发使用会有问题吗？


## Java基础

1. == 和 equals 的区别？

2. StringBuilder 和 StringBuffer的区别？


## MySQL

1. MySQL 的索引是什么数据结构？为什么默认数据机构是B+树？

2. hash索引有什么特点？

3. 索引失效场景有哪些？

4. 为什么不等于符号也会导致索引失效？








# 答案

## Linux

4. `nohup java -jar 'jar包名' > '日志文件名' &`

[链接直达](https://wlei224.gitee.io/2022/09/07/Linux/)

## 线程池

1. 七个：核心线程、最大线程、空闲时间、时间单位、工作队列、线程工厂、拒绝策略
2. 就是有三个容器：核心线程、等待队列（如果满了）、扩张线程池到最大线程数量）
3. 一，在可能抛出异常的时候，让调用方能够感知到
   二，如果线程没有被处理，线程被回收
4. 这个没有绝对的区别，无非就是创建早晚的区别，当有异常时，会被回收，然后线程池创建一个新的线程来替换，线程池本身只会保证创建的线程的数量复合我们的配置，对管理的线程不会有底层区分，所以并没有本质区别


## 集合

1. 常见的集合类型分为两块，一是Collection，分为List、Set、Queen ，二是Map，map又分为hashtable、hashmap、treemap、ConcurrentHashMap

2. ArrayList 和 LinkList的区别？

[链接直达](https://csguider.icu/bagu/collections/ArrayList%E4%B8%8ELinkedList%E5%8C%BA%E5%88%AB.html)

3. 不安全，并发使用会产生`fail-fast`机制，抛出异常，解决方法：比较简单的一个方法可以使用`hashtable`，本质就是给每个方法来了一个`syncronized`锁，效率比较低; 或者就是使用`ConcurrentHashMap`（它是乐观锁 + syncronized 来保证线程安全的）

## Java基础

1. == 和 equals 的区别？

2. StringBuilder 和 StringBuffer的区别？
[链接直达](https://csguider.icu/bagu/JavaSE/%E4%BB%8B%E7%BB%8D%E4%B8%80%E4%B8%8BString%E3%80%81StringBuilder%E5%92%8CStringBuffer.html)


## MySQL

1. 索引的数据结构是`B+`树，还有`hash索引`, 但是一般业务开发中使用的大多是`B+`树，因为实际业务中经常有分组查询、批量查询需求，B+树叶子结点存储了所有数据，使用双向链表链接叶子结点，更加适合业务场景

2. `hash数据结构` ==> (k,v) ==> 查询快 =多快？=> 正常时间复杂度为O(1), 平均速度O(logn)

3. 四种失效场景：左模糊查询、使用函数、or 查询、不等于符号

4. 因为使用不等于符号涉及到MySQL底层的一个优化器策略：会根据索引过滤的数据量进行判断，如果查询出来的数据很多（索引被过滤掉的数据很少），造成了索引失效的效果，但其实这是MySQL底层做的一个优化器策略