1、JVM中锁的关键字
1.1 synchronized
- ① 作用范围:
代码块
方法(修饰普通方法锁的对象默认是当前对象this,修饰静态方法默认锁的是当前类)
类(修饰类时,所有线程需要的锁是同一把)
- ② 是如何保证线程安全的?
加锁和释放锁的原理
可重入原理:加锁次数计数器
可见性原理:内存模型+happens-before
- ③ 重量级锁,如何优化?
锁的升级:无锁—>偏向锁—>自旋锁—>重量级锁
锁的优化技术:锁粗化、锁消除、轻量级锁、偏向锁、适应性自旋
- ④ synchronized的缺陷,Lock是怎么弥补的?
缺陷:
1、效率低:
- 只有代码执行完毕或者异常结束才会释放锁; (锁的释放)
- 并且试图获取锁的时候不能设定超时; (超时设定)tryLock
- 不能中断一个正在使用锁的线程 (线程中断) ReentrantLock的lockInterruptibly()方法可以优先考虑响应中断
2、不够灵活:
- 加锁和释放锁的时机单一,每个锁只有单一的条件,读写锁更加灵活。
3、无法知道是否成功获得锁
- Lock可以拿到状态 Condition与Lock的结合
2、如何编程判断大小端?
小端:高位放高字节,低位放低字节
大端:高位放低字节,低位放高字节
#include <stdio.h>
union node
{
int num;
char ch;
};
void big_small(union node p)
{
p.num = 0x12345678;
if(p.ch == 0x78)
{
printf("It is small-endian.\n");
}
else
{
printf("It is big-endian.\n");
}
}
int main()
{
union node p;
big_small(p);
return 0;
}
3、进程和线程
同一进程的线程:
- 共享:该进程的全部系统资源,如虚拟地址空间、文件描述符、信号处理
- 独享:栈、寄存器环境、线程本地存储
4、MyISAM和InnoDB的区别
- M不支持事务,Inno可以
- M支持全文索引,Inno不可以
- M支持表级锁,Inno支持行级锁
-
M效率更优,Inno更安全
综合以上,M适管理非事务表,高速存储、检索、全文搜索;Inno用于事务处理应用程序(ACID事务支持),多用户并发操作。
5、聚集索引和非聚集索引的区别
参考拼音查询和偏旁查询
聚集索引:正文内容本身就是一种按照一定规则排列的目录(物理上连续),查询数据速度快,插入速度慢;(一个表只有一个)
非聚集索引:逻辑上连续,物理上不连续,查询数据速度慢,插入速度快。
6、IO多路复用
https://www.cnblogs.com/yanguhung/p/10145755.html