yum安装openldap2.4.44,并配置增量复制(Delta-syncrepl)环境

news2024/12/24 9:13:37

本文是在centos7环境下通过yum安装openldap2.4.44,并配置增量复制(Delta-syncrepl)环境

官网对于增量复制介绍:https://www.openldap.org/doc/admin24/replication.html#Delta-syncrepl%20replication

Delta-syncrepl 是 syncrepl 的一种基于变更日志的变体,旨在解决上述情况。Delta-syncrepl 通过在提供程序的单独数据库中维护可选深度的变更日志来工作。复制消费者检查变更日志以查找它需要的更改,只要变更日志包含所需的更改,消费者就会从变更日志中获取更改并将它们应用到其数据库中。但是,如果消费者太不同步(或完全为空),则使用传统的 syncrepl 使其更新,然后复制切换回 delta-syncrepl 模式。

**注意:**由于数据库状态同时存储在供应商的变更日志数据库和主数据库中,因此在恢复数据库或将其复制到另一台机器时,使用 slapcat/slapadd 备份/恢复变更日志数据库和主数据库非常重要

一、准备

  1. 更换yum源

    # "备份原来的源"
    mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
    
    # "下载、替换为阿里云源配置" 
    wget https://mirrors.aliyun.com/repo/Centos-7.repo -O /etc/yum.repos.d/CentOS-Base.repo
    
    # "更新yum缓存" 
    yum clean all
    yum makecache
    
  2. 关闭防火墙和selinux

    [root@localhost ~]# systemctl stop firewalld
    [root@localhost ~]# systemctl disable firewalld			
    
    [root@localhost ~]# sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
    [root@localhost ~]# setenforce 0
    

二、yum安装(主从节点都执行)

yum  install -y openldap openldap-servers openldap-clients  compat-openldap openldap-servers-sql openldap-devel

#可以通过rpm -ql ,来查看每个安装包都有哪些文件

软件包软件包说明
openldap服务端和客户端必须用的库文件
openldap-clients在LDAP服务端使用,用户增删改查的命令行环境
openldap-servers用于启动服务和配置,包括单独的LDAP后台守护进程
openldap-servers-sql支持SQL模块
compat-openldapopenldap兼容性库环境
openldap-devel开发包,可选
  • 安装过程中会自动创建ldap用户和ldap组(确认安装完毕)

    [root@localhost cn=config]# grep ldap /etc/passwd
    ldap:x:55:55:OpenLDAP server:/var/lib/ldap:/sbin/nologin
    [root@localhost cn=config]# grep ldap /etc/group
    ldap:x:55:
    
  • 通过slapd -VV查看安装的版本

    [root@localhost openldap-servers]# slapd -VV
    @(#) $OpenLDAP: slapd 2.4.44 (Feb 23 2022 17:11:27) $
            mockbuild@x86-01.bsys.centos.org:/builddir/build/BUILD/openldap-2.4.44/openldap-2.4.44/servers/slapd
    

    yum源安装默认位置:/etc/openldap

三、主节点配置

yum源安装,默认使用的是dbd的数据库,但是官网在该版本建议使用mdb(之后的版本也会使用mdb,抛弃了dbd和hdb),因此更换数据库为mdb。

网上很多的资料显示需要复制数据库模版:如下

cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG

但是对于mdb数据库而言,不需要此步骤

1、启动ldap,并设置开机启动

systemctl enable slapd && systemctl start slapd && systemctl status slapd

2、创建配置文件

执行slappasswd命令,得到想要设置的管理员密码加密后的结果(此处设置为123456)

下方输出的{SSHA}GaIBaSF+IGfjfYb0daeo4gCUeR/9RUa3则为加密后的结果,在下面的配置文件中需要用到

[root@localhost ~]# slappasswd -s 123456
{SSHA}GaIBaSF+IGfjfYb0daeo4gCUeR/9RUa3

在/etc/openldap目录下,创建slapd.conf文件,并编写增量复制相关配置

虽然在2.4.x的某个版本后,官网不再使用slapd.conf文件作为主配置文件,而是使用的是slapd.d目录中的配置文件(并且不支持直接修改该目录下的文件,若想修改配置需要编写ldif文件修改)

但是对于增量复制的相关配置,官网给出的文档,依然是slapd.conf的方式进行的配置

所以此处进行slapd.conf的编写,再通过slaptest -f slapd.conf -F slapd.d命令生成slapd.d的配置目录

cd /etc/openldap
vim slapd.conf

具体配置内容如下:

官网配置参考:https://www.openldap.org/doc/admin24/replication.html#Delta-syncrepl

# 此处引入所有的schema 具体的schema在/etc/openldap/schema目录下,
# 不同的版本有schema有不同的区别,根据实际情况进行引入
include         /etc/openldap/schema/corba.schema
include         /etc/openldap/schema/core.schema
include         /etc/openldap/schema/cosine.schema
include         /etc/openldap/schema/duaconf.schema
include         /etc/openldap/schema/dyngroup.schema
include         /etc/openldap/schema/inetorgperson.schema
include         /etc/openldap/schema/java.schema
include         /etc/openldap/schema/misc.schema
include         /etc/openldap/schema/nis.schema
include         /etc/openldap/schema/openldap.schema
include         /etc/openldap/schema/ppolicy.schema
include         /etc/openldap/schema/collective.schema
include         /etc/openldap/schema/pmi.schema

# Allow LDAPv2 client connections.  This is NOT the default.
# 允许LDAPv2客户端连接。这不是默认值
allow bind_v2

# 这两个文件包含启动 slapd 进程所用的 PID(进程 ID)和一些参数
pidfile         /var/run/openldap/slapd.pid
argsfile        /var/run/openldap/slapd.args

# Load dynamic backend modules
# - modulepath is architecture dependent value (32/64-bit system)
# - back_sql.la overlay requires openldap-server-sql package
# - dyngroup.la and dynlist.la cannot be used at the same time

#设置模块路径位置
#对应32位操作系统
modulepath /usr/lib/openldap
#对应64位操作系统
modulepath /usr/lib64/openldap


#加载accesslog overlay
moduleload accesslog.la
#加载mdb后端
moduleload back_mdb.la
#加载syncprov overlay
moduleload syncprov.la
#加载memberof
moduleload memberof.la

# 访问控制
# enable on-the-fly configuration (cn=config)
database config
access to *
        by dn.exact="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" manage
        by * none

# enable server status monitoring (cn=monitor)
# `cn=directory manager,dc=cbpm,dc=com`根据自己的实际情况填写
database monitor
access to *
        by dn.exact="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" read
        by dn.exact="cn=directory manager,dc=cbpm,dc=com" read
        by * none

#配置change log数据库,更新操作对应的日志记录就存储在这个数据库中
#这个数据库是增量复制环境所需要的
database mdb
maxsize 85899345920
suffix "cn=accesslog"
rootdn "cn=accesslog"
#使用上方加密后的结果
rootpw {SSHA}GaIBaSF+IGfjfYb0daeo4gCUeR/9RUa3
#这一项配置的是更新日志的存储路径,注意accesslog是一个目录而不是一个文件,从directory 这个关键字也可得知。
#=====注意=======此处需要先创建出如下的目录,否则启动会报错
directory /var/lib/ldap/accesslog
index default eq
index entryCSN,objectClass,reqEnd,reqResult,reqStart,reqDN

#设置让dn管理员可无限制地搜索
limits dn.exact="cn=directory manager,dc=cbpm,dc=com" time.soft=unlimited time.hard=unlimited size.soft=unlimited size.hard=unlimited

#配置复制引擎
overlay syncprov
syncprov-nopresent TRUE
syncprov-reloadhint TRUE


#配置主数据库,即目录树数据存储的数据库
database    mdb
maxsize 85899345920
#表示目录数的根节点,一切的数据存储都是基于该节点进行存储的,所以它是base节点。
suffix      "dc=cbpm,dc=com"
#checkpoint 确定写入真实数据库前保留在事务日志中的数据量(以 KB 为单位)以及两次写操作之间的时间(以分钟为单位)。
checkpoint  1024 15
#表示管理员。 此处根据实际情况自定义,我这里的管理员为`cn=directory manager,dc=cbpm,dc=com`
rootdn      "cn=directory manager,dc=cbpm,dc=com"
#表示管理员密码 #使用上方加密后的结果
rootpw      {SSHA}GaIBaSF+IGfjfYb0daeo4gCUeR/9RUa3
#表示主数据库的数据存储路径,这个路径最好不要与change log数据库的路径一样
directory       /var/lib/ldap

# syncprov 特定索引
index entryCSN eq
index entryUUID eq

# syncrepl 主数据库
##设置复制检查点
overlay syncprov
syncprov-checkpoint 1000 60

# 开启memberof
overlay memberof

#设置日志级别
loglevel        17152

#设置overlay accesslog
overlay accesslog
logdb cn=accesslog
logops writes
logsuccess TRUE
#每天扫描一次操作日志数据库, 并清除7天前的条目
logpurge 07+00:00 01+00:00
#设置让dn管理员可无限制地搜索
limits dn.exact="cn=directory manager,dc=cbpm,dc=com" time.soft=unlimited time.hard=unlimited size.soft=unlimited size.hard=unlimited

注意:上述配置中的 directory /var/lib/ldap/accesslog目录需要提前创建,否则会报错

第三步中会删除一次/var/lib/ldap/下的所有内容,删除完之后需要创建

mkdir /var/lib/ldap/accesslog

3、删除原有配置,生成新配置

#进入openldap安装目录
cd /etc/openldap

#备份原有配置文件目录slapd.d
mv slapd.d slapd.d_bak

#创建新的slapd.d目录
mkdir slapd.d

#清除/var/lib/ldap下的目录
rm -rf /var/lib/ldap/*
#需要提前创建出配置文件中directory所对应的目录,否则会报错
mkdir /var/lib/ldap/accesslog


#根据新的slapd.con配置文件,生成新的配置文件到新建的slapd.d目录下
#执行该命令时会报错,属于正常现象,因为我们在配置文件中修改了数据库为mdb,重启后就好了
#执行完之后可以进入slapd.d目录下,可以看到已经生成了相应的配置文件
#报错内容如下:
#63900159 mdb_db_open: database "cn=accesslog" cannot be opened: No such file or directory (2). #Restore from backup!
#63900159 backend_startup_one (type=mdb, suffix="cn=accesslog"): bi_db_open failed! (2)
#slap_startup failed (test would succeed using the -u switch)
slaptest -f slapd.conf -F slapd.d
slaptest -u

#赋予权限
chown -R ldap.ldap /var/lib/ldap
chown -R ldap.ldap slapd.d

#重启ldap
systemctl restart slapd

四、从节点配置

1、启动ldap,并设置开机启动

systemctl enable slapd && systemctl start slapd && systemctl status slapd

2、创建配置文件

cd /etc/openldap
vim slapd.conf

具体配置内容如下:

官网配置参考:https://www.openldap.org/doc/admin24/replication.html#Delta-syncrepl

# 此处引入所有的schema 具体的schema在/etc/openldap/schema目录下,
# 不同的版本有schema有不同的区别,根据实际情况进行引入
# 从节点引入的schema需要与主节点一致
include         /etc/openldap/schema/corba.schema
include         /etc/openldap/schema/core.schema
include         /etc/openldap/schema/cosine.schema
include         /etc/openldap/schema/duaconf.schema
include         /etc/openldap/schema/dyngroup.schema
include         /etc/openldap/schema/inetorgperson.schema
include         /etc/openldap/schema/java.schema
include         /etc/openldap/schema/misc.schema
include         /etc/openldap/schema/nis.schema
include         /etc/openldap/schema/openldap.schema
include         /etc/openldap/schema/ppolicy.schema
include         /etc/openldap/schema/collective.schema
include         /etc/openldap/schema/pmi.schema

# Allow LDAPv2 client connections.  This is NOT the default.
allow bind_v2

##
pidfile     /var/run/openldap/slapd.pid
argsfile    /var/run/openldap/slapd.args

##
modulepath /usr/lib/openldap
modulepath /usr/lib64/openldap

#加载memberof
moduleload memberof.la

# enable on-the-fly configuration (cn=config)
database config
access to *
    by dn.exact="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" manage
    by * none

# enable server status monitoring (cn=monitor)
# `cn=directory manager,dc=cbpm,dc=com`根据自己的实际情况填写
database monitor
access to *
    by dn.exact="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" read
        by dn.exact="cn=directory manager,dc=cbpm,dc=com" read
        by * none

##配置主数据库,注意,从节点不需要配置change log数据库
database    mdb
maxsize 85899345920
suffix      "dc=cbpm,dc=com"
checkpoint  1024 15
# 管理员账户,根据实际情况填写
rootdn      "cn=directory manager,dc=cbpm,dc=com"
#密码使用和主节点一致123456 (也可以重新生成)
rootpw      {SSHA}GaIBaSF+IGfjfYb0daeo4gCUeR/9RUa3
directory       /var/lib/ldap

# 开启memberof
overlay memberof

##设置索引
index entryUUID eq


#配置日志级别
loglevel        17152


#配置从主节点同步数据
# provider 填写主节点的ip或者域名(10.8.0.126是我的主节点ip)
# binddn   填写dn (根据实际情况填写)\
# credentials  密码 (根据实际情况填写)
# searchbase   base (根据实际情况填写)
#注意下方的中间行之间不能添加任何注释,否则会报错
syncrepl  rid=0
          provider="ldap://10.8.0.126:389"
          bindmethod=simple
          binddn="cn=directory manager,dc=cbpm,dc=com"
          credentials=123456
          searchbase="dc=cbpm,dc=com"
          logbase="cn=accesslog"
          logfilter="(&(objectClass=auditWriteObject)(reqResult=0))"
          schemachecking=on
          type=refreshAndPersist
          retry="60 +"
          syncdata=accesslog

# 配置当在从节点执行修改操作时,同时将其提交给master节点
updateref ldap://10.8.0.126

3、删除原有配置,生成新配置

#进入openldap安装目录
cd /etc/openldap

#备份原有配置文件目录slapd.d
mv slapd.d slapd.d_bak

#创建新的slapd.d目录
mkdir slapd.d

#清除/var/lib/ldap下的目录
rm -rf /var/lib/ldap/*

#根据新的slapd.con配置文件,生成新的配置文件到新建的slapd.d目录下
#执行该命令时会报错,属于正常现象,因为我们在配置文件中修改了数据库为mdb,重启后就好了
#执行完之后可以进入slapd.d目录下,可以看到已经生成了相应的配置文件
#报错内容如下:
#63900574 mdb_db_open: database "dc=cbpm,dc=com" cannot be opened: No such file or directory (2). Restore from backup!
#63900574 backend_startup_one (type=mdb, suffix="dc=cbpm,dc=com"): bi_db_open failed! (2)
#slap_startup failed (test would succeed using the -u switch)
slaptest -f slapd.conf -F slapd.d
slaptest -u

#赋予权限
chown -R ldap.ldap /var/lib/ldap
chown -R ldap.ldap slapd.d

#重启ldap
systemctl restart slapd

五、测试同步

在主节点创建user.ldif文件

#建议将ldif文件创建在非/etc/openldap的其他目录
cd ~
#编辑文件
vim user.ldif

内容如下:创建cbpm.com的根,创建Groups的ou,在Groups下创建SuperAdmin人员

dn: dc=cbpm,dc=com
objectClass: domain
objectClass: top
dc: cbpm

dn: ou=Groups,dc=cbpm,dc=com
objectClass: organizationalUnit
objectClass: top
ou: Groups

dn: cn=SuperAdmin,ou=Groups,dc=cbpm,dc=com
objectClass: groupOfUniqueNames
objectClass: top
cn: SuperAdmin
uniqueMember:: Y249YXBwQWNjb3VudCxvdT1Hcm91cHMsbz3mgLvlhazlj7gsZGM9Y2JwbSxkY
 z1jb20=

执行命令进行添加:

ldapadd -x -D "cn=directory manager,dc=cbpm,dc=com" -w123456 -f user.ldif

通过Apache Directory Studio工具查看主节点:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-URq07UZN-1670481754519)(image2/1.png)]

通过Apache Directory Studio工具查看从节点:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Gaf2Y2un-1670481754520)(image2/2.png)]

六、自定义schema(主从节点都执行)

前提:公司需求需要新建一个CBPMPerson类,并添加Identitynumber(身份证号)的属性

因此需要自定义Schema

1、创建一个专门存放自定义schema的目录

mkdir /mySchema
cd /mySchema
touch CBPMPerson.conf
touch CBPMPerson.schema

2、编辑配置文件 CBPMPerson.conf

vim CBPMPerson.conf

输入以下内容:

# 参考自己OpenLDAP安装的路径,这个是inetorgperson类别需要的schema,如果SUP是top,则下面三行不需要引入
include /etc/openldap/schema/core.schema
include /etc/openldap/schema/cosine.schema
include /etc/openldap/schema/inetorgperson.schema

# 即引入上步骤创建的schema文件
include /mySchema/CBPMPerson.schema

3、编辑配置文件 CBPMPerson.schema

vim CBPMPerson.schema

输入以下内容:

attributeTypes: ( 3.2.2.1.4 NAME 'Identitynumber' SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 EQUALITY caseIgnoreMatch SUBSTR caseIgnoreSubstringsMatch SINGLE-VALUE )
objectClass (
    3.2.2.1.5
    NAME 'CBPMPerson'
    SUP inetOrgPerson STRUCTURAL
    MUST ( Identitynumber ))

若是以上参数不了解的,可以参考:https://www.pudn.com/news/62e2901b55398e076bedd02d.html 中的内容介绍

4、执行slaptest命令

执行slaptest命令编译自定义的schema,生成ldif等文件

slaptest -f /mySchema/CBPMPerson.conf -F /mySchema

此时会在/mySchema目录下生成cn=config文件夹:

ls /mySchema/cn=config/cn=schema

我们自己定义的文件为cn={3}cbpmperson.ldif

5、修改生成的文件cn={3}cbpmperson.ldif

cd /mySchema/cn\=config/cn\=schema/
vim cn={3}cbpmperson.ldif

修改前:
在这里插入图片描述

修改后:

在这里插入图片描述

注意:dn: cn=CBPMPerson,cn=schema,cn=config

第一个cn是根据ObjectClass的名字定的,cn=scheme,cn=config为固定写法

6、修改文件名字

[root@localhost cn=schema]# ls
cn={0}core.ldif  cn={1}cosine.ldif  cn={2}inetorgperson.ldif  cn={3}cbpmperson.ldif
[root@localhost cn=schema]# mv cn\=\{3\}cbpmperson.ldif CBPMPerson.ldif

7、执行 slapadd命令,将该文件添加进OpenLdap库

slapadd -l /mySchema/cn\=config/cn\=schema/CBPMPerson.ldif -n 0

8、查看是否成功将自定义ldif加入到官方库中

cd /etc/openldap/slapd.d/cn\=config/cn\=schema/
ls

在这里插入图片描述

9、重启slapd服务

#先要赋予新的schema权限,(这里直接给slapd.d目录权限)
chown -R ldap.ldap /etc/openldap/slapd.d
#重启
systemctl restart slapd

七、补充

1、开启日志配置

生成logLevel.ldif文件

#尽量将自己创建的ldif文件放在非/etc/openldap目录下
cd ~

cat> loglevel.ldif<< EOF
dn: cn=config
changetype: modify
replace: olcLogLevel
olcLogLevel: stats
EOF

导入logLevel.ldif

ldapmodify -Y EXTERNAL -H ldapi:/// -f loglevel.ldif

创建slapd.log文件

mkdir /var/log/openldap
touch /var/log/openldap/slapd.log

#"+73"表示指定位到文件73行
vim /etc/rsyslog.conf +73

#**在73行**local7.*          /var/log/boot.log***
#73行的下一行增加如下内容
local4.*     /var/log/openldap/slapd.log

重启系统日志服务与ldap服务

systemctl restart rsyslog
systemctl restart slapd
systemctl status slapd

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/73979.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ADI Blackfin DSP处理器-BF533的开发详解3:GPIO(含源代码)

我们从最基础的GPIO开始&#xff0c;先讲外设&#xff0c;这玩意不管是单片机&#xff0c;还是ARM&#xff0c;又或是FPGA&#xff0c;甚至SOC的芯片&#xff0c;都有GPIO&#xff0c;有共性&#xff0c;就好理解&#xff0c;让我们看看在ADI的DSP里头&#xff0c;GPIO是怎么一…

MySQL数据库学习(2)

一.MySQL语法书写规范&#xff1a; (1).SQL语句要以分号;结尾 在 RDBMS(关系型数据库)当中&#xff0c;SQL语句是逐条执行的&#xff0c;一条 SQL语句代表着数据库的一个操作。SQL语句是使用英文分号;结尾。 (2).SQL语句不区分大小写 SQL不区分关键字的大小写。例如&#xff0c…

CentOS7下mysql主从复制搭建

mysql安装 CentOS7安装MySql5.7完整教程_长头发的程序猿的博客-CSDN博客_centos7 mysql5.7安装 1、配置主机 1.1、修改my.cnf配置文件 vim /etc/my.cnf 最后一行添加&#xff1a; #主服务器唯一ID server-id1 #启用二进制日志 log-binmysql-bin #设置不要复制的数据库(可…

C++之虚函数

都说面向对象的三大特性是封装、继承、多态。C作为一门面向对象编程语言&#xff0c;肯定也是具备了面向对象的三大特性&#xff0c;那么在C中是如何实现多态的呢&#xff1f; 在C中是通过虚函数动态绑定的方式实现多态的。 虚函数与纯虚函数 首先我们来回顾一下虚函数&…

DAX:GROUPBY函数

DAX 中的 SUMMARIZE 函数功能强大&#xff0c;但同时也很难使用。 它可用于执行表之间的分组和连接&#xff0c;正如我们之前在分组数据一文中描述的那样。 不幸的是&#xff0c;它在计算聚合值时存在一些众所周知的性能问题。除了性能之外&#xff0c;SUMMARIZE 的计算限制是它…

ArrayList中的 subList 强转 ArrayList 导致异常

阿里《Java开发手册》上提过 [强制] ArrayList的sublist结果不可強转成ArrayList,否则会抛出ClassCastException异常&#xff0c;即java.util.RandomAccesSubList cannot be cast to java. util.ArrayList. 说明: subList 返回的是ArrayList 的内部类SubList, 并不是ArrayList …

一块RTX 3090加速训练YOLOv5s,时间减少11个小时,速度提升20%

作者&#xff5c;BBuf 很高兴为大家带来One-YOLOv5的最新进展&#xff0c;在《一个更快的YOLOv5问世&#xff0c;附送全面中文解析教程》发布后收到了很多算法工程师朋友的关注&#xff0c;十分感谢。 不过&#xff0c;可能你也在思考一个问题&#xff1a;虽然OneFlow的兼容性做…

SQL之substrate()函数用法

测试表字段查询如下&#xff1a; 测试在hive中截取前5位字符的第1种写法&#xff1a; 测试在hive中截取前5位字符的第2种写法&#xff1a; 测试在impala中截取前5位字符的第1种写法&#xff1a; 测试在impala中截取前5位字符的第2种写法&#xff1a; 结果&#xff1a; 1、在h…

带分数(蓝桥杯C/C++B组真题详解)

目录 题目 题目思路 题目代码 注解&#xff1a; 1.题目给定的判定条件为 2.关于next_permutation(start,end); 题目&#xff1a; 题目思路&#xff1a; 因为题目要求是满足在1到9中 不重复、不遗漏的所有满足条件的情况 所以我们可以通过全排列 把整数、分子、分母 …

B-树(B-Tree)与二叉搜索树(BST):讲讲数据库和文件系统背后的原理(读写比较大块数据的存储系统数据结构与算法原理)...

人类总喜欢发明创造一些新名词&#xff08;比如说&#xff0c;简写/缩写/简称什么的&#xff09;&#xff0c;并通过这些名词把人群分成了三六九等。弄到最后&#xff0c;把自己都绕晕了。你看&#xff0c;首先就是&#xff0c;B树&#xff0c;不要与Binary tree或Btree混淆。B…

有奖征文 | 当我们谈操作系统时,我们在谈什么?

OS&#xff0c;Operating System&#xff0c;操作系统&#xff0c;计算机中最基本也是最重要的基础性系统软件。1991 年&#xff0c;大二学生 Linus Torvalds 写出 Linux0.01&#xff0c;经过几十年的发展&#xff0c;以 Linux 为代表的服务器操作系统&#xff0c;成长为一个既…

lambda之Stream流式编程

lambda之Stream流式编程 一、什么是 Stream Stream中文称为 “流”&#xff0c;通过将集合转换为这么一种叫做“流”的元素序列&#xff0c;通过声明性方式&#xff0c;能够对集合中的每个元素进行一系列并行或串行的流水线操作。换句话说&#xff0c;你只需要告诉流你的要求…

led护眼台灯对眼睛好?过来人说说led护眼灯是否真的能护眼

众所周知&#xff0c;现在绝大部分光源都是使用led发光&#xff0c;无论是室内照明灯、室外装饰灯、气氛调节灯、工作学习护眼台灯等等&#xff0c;都是使用led灯珠&#xff0c;那么也就有人会问了&#xff1a;led灯真的对眼睛好吗&#xff1f;Led护眼台灯真的能护眼吗&#xf…

TH7-搜附近

TH7-搜附近说明1、探花1.1、查询推荐列表dubbo服务1.1.1、实体对象1.1.2、定义接口1.1.3、编写实现1.1.4、单元测试1.2、查询推荐列表APP接口实现1.2.1、TanHuaController1.2.2、TanHuaService1.2.3、测试1.3、喜欢的dubbo服务1.3.1、定义接口1.3.2、编写实现1.4、左滑右滑1.4.…

fofa搜索漏洞技巧

fofa搜索漏洞技巧整理,主要有以下十个方面:搜索HTTP响应头中含有"thinkphp"关键词的网站和IP;加上标题带有后台的;加上时间,现在新网站有thinkphp日志泄露的有很多; 搜索html正文中含有"管理后台"关键词的网站和IP body="管理后台"等。 …

Linux内核缓存

【推荐阅读】 轻松学会linux下查看内存频率,内核函数,cpu频率 纯干货&#xff0c;linux内存管理——内存管理架构&#xff08;建议收藏&#xff09; 一篇长文叙述Linux内核虚拟地址空间的基本概括 页缓存和块缓存 内核为块设备提供了两种通用的缓存方案&#xff1a; 页缓存&a…

光华股份深交所上市:市值51亿 应收账款余额超5亿

雷递网 雷建平 12月8日浙江光华科技股份有限公司&#xff08;简称&#xff1a;“光华股份”&#xff0c;证券代码&#xff1a;001333&#xff09;今日在深交所主板上市。光华股份本次发行3200万股&#xff0c;发行价为27.76元&#xff0c;募资8.88亿元。光华股份开盘价为33.31元…

开源,是不道德的!

原创&#xff1a;小姐姐味道&#xff08;微信公众号ID&#xff1a;xjjdog&#xff09;&#xff0c;欢迎分享&#xff0c;非公众号转载保留此声明。请删掉你的github开源代码&#xff0c;让CV工程师成为真正的工程师。不要做真正的代码分享&#xff0c;因为除了满足一下你的虚荣…

vue-cli中学习vue

vue部分知识 大部分学习内容及代码在gitee仓库 生命周期 基本介绍 生命周期描述beforeCreate组件实例被创建之初created组件实例已经完全创建beforeMount组件挂载之前mounted组件挂载到实例上去之后beforeUpdate组件数据发生变化&#xff0c;更新之前updated组件数据更新之后…

springboot知识点

基本介绍 微服务最早由Martin Fowler与James Lewis于2014年共同提出&#xff0c;微服务架构风格是一种使用一套小服务来开发单个应用的方式途径&#xff0c;每个服务运行在自己的进程中&#xff0c;并使用轻量级机制通信&#xff0c;通常是HTTP API&#xff0c;这些服务基于业…