文章目录
- 1. 介绍下项目
- 2. 线程池运行原理
- 3. **sql** 语句:建表、修改数据表字段语句、建表需要注意的地方、sql函数用过哪些?触发器是啥?事务?
- 4. 介绍一下 hashMap
- 5. Spring运行流程,常用注解,AOP用过吗?,前台传给你数据,你使用什么来接受?
- 6. Redis 类型,两种持久化方法
- 7. Linux 常用命令(查看进程,vim编辑,查找文件)
- 8. Git 常用命令,(回滚命令,知道吗?)
- 9. 知道 String的回文数的方法吗?一千以内的数,找到所有回文数。知道String的转变编码格式(GBK转为UTF8)的方法吗?
- 10. servlet 生命周期
- 11. IO流使用过吗?使用的时候注意事项是什么?
1. 介绍下项目
2. 线程池运行原理
1. 创建一个线程池,在没有任务提交的时候,默认线程池中是没有线程的。(可以预先创建一个核心线程)
2. 当有任务提交时,首先检测核心线程数是否已满?没满,创建核心线程运行任务;满了,进入下一个条件判断。
3. 检测任务队列是否已满?没满,吧当前任务加入任务队列中,满了,进入下一个判断条件。
4. 检测整个线程池的线程数是否达到了线程池最大线程数?没达到,创建非核心线程运行任务,到达了,交由**拒绝策略**处理。
-
5 种拒绝策略
- 直接抛出异常
- 只用调用者所在线程来运行任务
- 丢弃队列里最近的一个任务,并执行当前任务
- 不处理,直接丢弃
- 自定义拒绝策略(比如 日志记录不能处理的任务)
-
5 种线程池
- 可缓存线程池。可灵活回收空闲线程,若无可回收的空闲线程,则新建线程(线程池最大长度为 Interger.MAX_VALUE)
- 定长线程池。可控制线程最大并发数,超出的线程会在吹队列中等待。
- 定长线程池。支持定时及周期性任务执行。
- 单线程线程池。保证所有任务按照指定顺序(FIFO,LIFO,优先级)执行。
- 默认线程池。(自行设置参数)
-
4 种阻塞队列
- 基于数组的有界阻塞队列,FIFO序列
- 基于链表的阻塞队列,
- 不储存元素的阻塞队列。(每个插入操作必须等到另一个线程调用移除操作,否则插入操作一直处于阻塞队列)
- 优先级的无限阻塞队列。
3. sql 语句:建表、修改数据表字段语句、建表需要注意的地方、sql函数用过哪些?触发器是啥?事务?
- sql函数:
- count(*):获取数量
- sum() :求和(注意这里的求和是忽略null值的)
- avg():求平均数
- max():
- min():
- 触发器(trigger)
- 监事某种情况,并触发某种操作,它是提供给程序员和数据分析员来保证数据完整性的一种方法,它是与表事件相关的特殊存储过程,它的执行不是由程序调用,也不是手动启动,而是由事件触发。例如对一个表进行(insert,delete,update)时就会激活它执行。
- 只能创建在永久表上,不能对临时表创建触发器
- 特点:保证了触发事件的原子性。
4. 介绍一下 hashMap
5. Spring运行流程,常用注解,AOP用过吗?,前台传给你数据,你使用什么来接受?
-
常用注解
- @SpringBootApplication:包含了@ComponentScan、@Configuration和@EnableAutoConfiguration这三个注解。放在启动类上
- @ComponentScan:组件扫描,可自动发现个装配一些Bean,
- @Configuration:等同于spring的XML配置文件
- @EnableAutoConfiguration:自动配置
- @RestController:是@Controller和@ResponseBody的组合,表示这是REST风格的控制器,并且将函数的返回值直接写入HTTP响应体中。
- @Autowried:自动注入
-
@RequestParam
127.0.0.1/test?id=123
-
@PathVariable
127.0.0.1/test?123
6. Redis 类型,两种持久化方法
- String,List,Hash,Set,Zset
- rdb,aof
7. Linux 常用命令(查看进程,vim编辑,查找文件)
-
ps -ef|grep java :查看有关java的进程
root 507 30893 0 15:44 pts/0 00:00:00 grep --color=auto java root 12502 1 0 Aug02 ? 00:13:00 java -jar makeup.jar
-
netstat -ntulp :查看tcp,udp端口占用情况
Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 12502/java tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 23044/sshd tcp6 0 0 :::3306 :::* LISTEN 23103/mysqld udp 0 0 0.0.0.0:68 0.0.0.0:* 754/dhclient udp 0 0 172.19.71.111:123 0.0.0.0:* 31105/ntpd udp 0 0 127.0.0.1:123 0.0.0.0:* 31105/ntpd udp 0 0 0.0.0.0:123 0.0.0.0:* 31105/ntpd udp 0 0 0.0.0.0:53667 0.0.0.0:* 754/dhclient udp6 0 0 :::123 :::* 31105/ntpd udp6 0 0 :::17924 :::* 754/dhclient
8. Git 常用命令,(回滚命令,知道吗?)
9. 知道 String的回文数的方法吗?一千以内的数,找到所有回文数。知道String的转变编码格式(GBK转为UTF8)的方法吗?
-
StringBulider的
reverse()
-
String中改变编码格式的方法
//通过指定的 charset 解码指定 byte 数组,构造一个新的String String (byte[]bytes,Stirng charsetNAme) //使用指定的 charset 将此 Stirng 编码到 byte序列,并将结果储存到新的byte数组 String.getBytes(Charser charset) //合在一起就是:将GBK转换为utf8; byte[]src,dst; dst = new String(src,"GBK") .getbytes("utf-8");
10. servlet 生命周期
- 初始化:init()
- 只有在创建 Servlet 时被调用一次,后续每次用户请求时将不再被调用(创建并加载Servlet、ServletConfig对象)
- 处理客户端的请求:service()
- 检查HTTP的请求类型,并在适当的时候调用doGet、doPost等方法。(构造servletRequest、servletResponse对象)
- 销毁:destroy()
- 只有在Servlet生命周期快结束的时候被调用,destroy() 方法可以让您的 Servlet 关闭数据库连接、停止后台线程 等类似的清理活动。
- 最后:JVM垃圾回收
[外链图片转存失败(img-UeEgg0tJ-1565751862526)(…/images/servlet.png)]
11. IO流使用过吗?使用的时候注意事项是什么?
- 字节流:
- 输入流:InputStream
- 输出流:OutputStream
- 字符流:
- 输入流:Reader
- 输出流:Writer