linux

kill 命令解析

kill命令概述 通过man kill查看文档说明 kill命令将指定的信号发送到指定的进程或进程组。 如果未指定信号,则默认的发送信号为TERM,当该进程未处理TERM信号时,该信号将杀死该进程。 如果发送的信号为0,则不发送信号,但仍会执行错误检查。 linux信号列表 [root@test-master temp]# kill -l 1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE

  • 凯文
3 min read
linux

理解inode

inode是什么? 在文件系统中,文件储存在硬盘上,硬盘的最小存储单位叫做"扇区"(Sector)。每个扇区储存512字节(相当于0.5KB)。 操作系统读取硬盘的时候,不会一个个扇区地读取,这样效率太低,而是一次性连续读取多个扇区,即一次性读取一个"块"(block)。这种由多个扇区组成的"块",是文件存取的最小单位。"块"的大小,最常见的是4KB,即连续八个 sector组成一个 block。

  • 凯文
9 min read
linux

TUN/TAP概述及操作

TUN/TAP概述 在云计算时代,虚拟机和容器已经成为标配。它们背后的网络管理都离不开一样东西,就是虚拟网络设备,或者叫虚拟网卡,tap/tun 就是在云计算时代非常重要的虚拟网络网卡。 TUN/TAP 是什么 tap/tun 是 Linux 内核 2.4.x 版本之后实现的虚拟网络设备,不同于物理网卡靠硬件网卡实现,tap/tun 虚拟网卡完全由软件来实现,功能和硬件实现完全没有差别,它们都属于网络设备,都可以配置 IP,都归 Linux 网络设备管理模块统一管理。

  • 凯文
9 min read
mysql

mysql行锁分析一

mysql锁的原则 原则 1:加锁的基本单位是 next-key lock。next-key lock 是前开后闭区间。 原则 2:查找过程中访问到的对象才会加锁。 2.1: 若字段上无索引,因要根据id查询所有的数据,所以所有数据均会加上next-key lock 2.2: 若字段上有普通索引,则只有访问到的数据添加next-key lock,但是最后一条由于不满足,所以根据优化2,退化为间隙锁 优化 1:索引上的等值查询,给唯一索引加锁的时候,next-key lock 退化为行锁。

  • 凯文
10 min read
java

如何开发一个starter

参考 starter的概念 starter是一种对依赖的synthesize(合成) 进行一些默认的初始化,并且这些初始化操作,都可以在spring.yaml配置文件中覆盖 进行一些实例的初始化,比如之前如果要实例化某类 配置spring 扫描某包 手动通过config创建bean 而starter可通过spring.factories文件实例化对象 传统的做法 在没有starter之前,假如我想要在Spring中使用jpa,那我可能需要做以下操作: 在Maven中引入使用的数据库的依赖(即JDBC的jar) 引入jpa的依赖 在xxx.xml中配置一些属性信息 反复的调试直到可以正常运行 需要注意的是,这里操作在我们每次新建一个需要用到jpa的项目的时候都需要重复的做一次。也许你在第一次自己建立项目的时候是在Google上自己搜索了一番,花了半天时间解决掉了各种奇怪的问题之后,jpa终于能正常运行了。有些有经验的人会在OneNote上面把这次建立项目的过程给记录下来,包括操作的步骤以及需要用到的配置文件的内容,在下一次再创建jpa项目的时候,

  • 凯文
8 min read
other

乐观锁与悲观锁

悲观锁 悲观锁是指在用读取锁锁定一块代码的时候,另一个读取锁依然可以进入该代码块,而写锁不可以进入.在用写锁锁定一段代码的时候,读锁和写锁都不能进入该代码块. 乐观锁 乐观锁其实就是写锁优先机制,读锁在锁定某一代码块的时候,如果没有写锁竞争,那么就会获得该锁的权限,如果进行锁定的时候发现有写锁正在竞争,那么就会抛出例外,需要重新操作进行锁定.竞争标志则是 long stamp = lock.tryOptimisticRead();//有竞争返回0 lock.validate(stamp);//有竞争返回true 悲观锁示例 package Test; import java.util.concurrent.locks.ReadWriteLock;

  • 凯文
3 min read
java

JVM8调优

在JVM里的内存空间,从大的层面划分,主要有新生代空间(Young)和老年代空间(Old),其中Young空间,又被分为2个部分和3个板块,分别是1个Egen区,和2个Survivor区 Eden区域是用来存放使用new或者newInstance等方式创建的对象,默认都是存放在Eden区,除非这个对象太大,或者超过了设定的阈值-XX:PretenureSizeThresold,这样的对象会被直接分配到Old区域 2个Survivor(幸存)区,一般称S0,S1,理论上他们是一样大的 在不断创建对象的过程中,Eden区会满,这时候会开始做Young GC也叫Minor GC,而Young空间的第一次GC就是找出Eden区中,幸存活着的对象,然后将这些对象,放到S0,或S1区中的其中一个,假设第一次选择了S0,

  • 凯文
2 min read
network

浏览器请求报错-block:mixed-content

浏览器控制台报错 Mixed Content: The page was loaded over HTTPS,blocked the content must be served over HTTPS.,。。 原因 是浏览器不允许在https页面里嵌入http的请求,现在高版本的浏览器为了用户体验,都不会弹窗报错,只会在控制台上打印一条错误信息。 最简单的解决办法当然就是不要使用http请求,把网站上的http请求都迁移到https。 也可以页面的head中加入: <meta http-equiv="Content-Security-Policy" content="

  • 凯文
1 min read
java

JVM垃圾回收器

JVM回收器概述 垃圾收集器是垃圾回收算法(标记-清除算法、复制算法、标记-整理算法、分代算法)的具体实现,不同商家、不同版本的JVM所提供的垃圾收集器可能会有很在差别,本文主要介绍HotSpot虚拟机中的垃圾收集器。 垃圾收集器组合 图中展示了7种不同分代的收集器:Serial、ParNew、Parallel Scavenge、Serial Old、Parallel Old、CMS、G1; 而它们所处区域,则表明其是属于新生代收集器还是老年代收集器: 新生代收集器:Serial、ParNew、Parallel Scavenge; 老年代收集器:Serial Old、Parallel

  • 凯文
22 min read