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/

文章对各种动态代理的性能使用方法有一个简明的介绍,对于各个框架的不同的选取有一定的阐述,对全面了解动态代理挺有帮助的。