1.Algorithm:https://leetcode.com/problems/n-queens/
https://leetcode.com/problems/n-queens-ii/
n皇后问题的位运算解法,代码里有详细注释
使用三位整数表示列,左45,右45三个位置,1表示已经放置皇后,0表示没有放置。按行递归遍历,每个摆放位置是否满足皇后摆放的要求
public int totalNQueens(int n) {
return find(0, n, 1, 0, 0, 0);
}
private int find(int result, int n, int line, int col, int left, int right) {
if (line > n) { //递归终止条件,如果遍历超过n,说明摆放皇后的位置满足条件记
//录并返回
return result + 1;
}
int bits = (~ (col | left | right)) & ((1 << n) - 1);
/* ~ (col | left | right) 找出所有可以放置皇后的位置,并将位置赋值为1, & ((1 << n) - 1) 将超过n位的高位数字去掉,只保留需要的n位数据*/
while (bits > 0) {
int p = bits & -bits;//找到第一个为1的位置
result = find(result, n, line + 1, col | p, (left | p) << 1, (right | p) >> 1); //递归查找下一行是否满足条件
bits &= (bits - 1);//把上面已经放置为1这个位置去掉
}
return result;
}
2.Review:https://shipilev.net/jvm/anatomy-quarks/2-transparent-huge-pages/
大内存页对jvm的影响。操作系统内存虚地址到实际物理地址的转换是通过页面实现的,页表有缓存。如果页表项过多,会导致缓存失效,找不到缓存的数据,影响转换效率。使用较大的内存页(默认4k)可以减少页表项,提升页表缓存命中率,提升性能。
linux有两种技术 hugetlbfs、 TransparentHugepage(THP)。第一种方法需要操作系统和应用程序都进行修改,为hugetlbfs分配的空间一般进程无法使用。第二种方法应用程序不需要修改。
文章提供了基准测试及使用hugetlbfs、 TransparentHugepage(THP)修改后的结果。
3.Tip:继续linux高级编程。结合专栏网络编程实战来继续学习。
4.share: https://www.cnkirito.moe/rpc-dynamic-proxy/
文章对各种动态代理的性能使用方法有一个简明的介绍,对于各个框架的不同的选取有一定的阐述,对全面了解动态代理挺有帮助的。