笔试+面经

单纯的记录下这段时间笔试+面试的问题:


问:什么是悲观锁,什么是乐观锁,我们常用的synchronized属于哪种?

答:

悲观锁

总是假设最坏的情况,每次去拿数据的时候都认为别人会修改,所以每次拿数据的时候都会上锁,这样别人想拿这个数据就会阻塞直到它拿到锁(共享资源每次只给一个线程使用,其他线程阻塞,用完后再把资源转给其他线程)。传统的关系型数据库里面就用到了很多这种锁机制,比如行锁,表锁等,读锁,写锁等,都是在操作之前先上锁。JAVA中synchronizedReentrantLock等独占锁就是悲观锁思想的实现。

乐观锁

总是假设最好的情况,每次去拿数据时候都认为别人不会修改,所以不会上锁,但是会在更新时候判断在此期间别人有没有去更新这个数据,可以使用版本号机制和CAS算法实现。乐观锁适用多读的应用类型,这样可以提高吞吐量,像数据库提供的类似于write_condition机制,其实都是提供的乐观锁。在Java中java.util.concurrent.atomic包下面的原子变量类就是使用了乐观锁的一种实现方式CAS实现的。

两种锁的使用场景:

乐观锁适合用在多读的场景,也就是冲突很少发生的时候,这样可以省去锁的开销,加大了系统的整个吞吐量。但如果多写的情况,一般会经常发生冲突,这时候采用悲观锁更好。


问:TCP和UDP两种传输协议的差异,为什么TCP能做到可靠传输?

答:

 TCP  UDP
 是否连接 面向连接 面向非连接
 传输可靠性 可靠的 不可靠的
 应用场景 传输大量的数据 少量的数据
 速度 慢 快

因为TCP在传输数据时候,TCP要求在目标计算机成功收到数据时发回一个确认(ACK)。如果在某个时间内未收到相应的ACK,将重新传送数据包。如果网络拥塞,这种重新传送将导致发送的数据包重复。但是,接收计算机可使用数据包的序列号来确定它是否为重复的数据包,并在必要的时候丢弃它。

TCP协议和UDP协议特性区别总结:

1.TCP协议在传送数据段的时候要给段标号;UDP协议不需要

2.TCP协议可靠;UDP协议不可靠

3.TCP协议是面向连接;UDP协议采用无连接

4.TCP协议的发送方要确认接收方是否收到数据段(3次握手)

5.TCP协议采用窗口技术和流控制


问:ping使用的网络协议

答:

ICMP协议(Internet控制消息协议)。


问:Linux的启动过程

答:

通电--BIOS--主引导记录--操作系统

第一步:操作系统加载内核,读入/boot目录的内核文件
第二步:内核文件加载之后,运行第一个程序 /sbin/init,初始化系统环境
第三步:确定运行级别,在Linux叫做守护进程
第四步:加载开机启动程序,一般在/etc/init.d
第五步:用户登录
第六步:进入login shell
第七步:打开non-login shell


问:mysql中myisam与innodb的区别,至少五点

答:

1.innodb支持事务,而myisam不支持事务

2.innodb支持行级锁,而myisam支持表级锁

3.innodb支持MVCC,而myisam不支持

4.innodb支持外键,而myisam不支持

5.Innodb不支持全文索引,而MyISAM支持全文索引,查询效率上MyISAM要高 


问:请简洁地描述下MySQL中InnoDB支持的四种事务隔离级别名称,以及逐级之间的区别?

答:

1.Read Uncommitted(读取未提交内容)

2.Read Committed(读取提交内容)

3.Repeatable Read(可重读)

4.Serializable(可串行化)


问:内核在报“filesystem is full”,df显示磁盘还有空余空间,然后你尝试删除了部分文件,但是发现根本没有多少空间free出来,请描述一下你的后续排查和处理方式。

答:

1.怀疑磁盘的inode分配完了,导致提示磁盘满。 解决办法:删除一些无用的文件或者文件夹,释放inode。

关于磁盘空间中索引节点爆满的问题还是挺多的,自己本想写写处理方案,但是看到了网友们文采不错,对于此问题的处理方法都比较妥当,就借过来跟大家分享下:

一、发现问题:
  在一台配置较低的Linux服务器(内存、硬盘比较小)的/data分区内创建文件时,系统提示磁盘空间不足,用df -h命令查看了一下磁盘使用情况,发现/data分区只使用了66%,还有12G的剩余空间,按理说不会出现这种问题。

二、分析问题:
  后来用df -i查看了一下/data分区的索引节点(inode),发现已经用满(IUsed=100%),导致系统无法创建新目录和文件。


inode译成中文就是索引节点,每个存储设备(例如硬盘)或存储设备的分区被格式化为文件系统后,应该有两部份,
一部份是inode,而inode呢,就是用来存储这些数据的信息,这些信息包括文件大小、属主、归属的用户组、读写权限等。
另一部份是Block,Block是用来存储数据用的。inode为每个文件进行信息索引,所以就有了inode的数值。操作系统根据指令,能通过inode值最快的找到相对应的文件。
 而这台服务器的Block虽然还有剩余,但inode已经用满,因此在创建新目录或文件时,系统提示磁盘空间不足。

三、查找原因:
  /data/cache目录中存在数量非常多的小字节缓存文件,占用的Block不多,但是占用了大量的inode。

四、解决方案:
   1、删除/data/cache目录中的部分文件,释放出/data分区的一部分inode,特别要留意那些spool出来的文件,这种文件一般会占用比较多的节点,因为比较小而且零碎,同时要多留意日志文件信息等

  2、用软连接将空闲分区/opt中的newcache目录连接到/data/cache,使用/opt分区的inode来缓解/data分区inode不足的问题:
  ln -s /opt/newcache /data/cache

  3、更换服务器,用高配置的服务器替换低配置的服务器。很多时候用钱去解决问题比用技术更有效,堆在我办公桌上5台全新的 DELL PowerEdge 2950 服务器即将运往IDC机房。一般不建议



未完待续...

最后修改:2019 年 09 月 11 日 10 : 05 AM
这不叫给钱,是打赏。

发表评论