linux用户管理:创建用户,删除用户,管理用户,用户配置

人生的哲理 2020-11-09 10:49:56
linux 管理 创建 用户


一.关于用户

​ 用户一般来说是指使用计算机的人,计算机针对使用的每一个人给了一个特定的名称,用户就可以使用这些名称来登录使用计算机,除

了人之外,一些系统服务也需要含有部分特权的用户账户运行;因此出于安全考虑,用户管理应运而生,它加以明确限制各个用户账户的

权限,root在计算机中用拥有至高特权,所以一般只作管理用,非特权用户可以通过SU或SUDO程序来临时获得特权。

​ GNU/Linux 通过用户和用户组实现访问控制,包括对文件的访问,设备使用的控制。

​ 个人可以拥有很多账户,只不过是彼此名称不同,比如root名称已经占用就不能再用了,此外,任意用户可能从属某个用户组,此用户

可以加入某些已经存在的组来获得该组的特权。

​ GNU/Linux 系统中的每一个文件都属于一个用户(属主)和一个用户组(属组)。

​ 文件拥有三种类型的访问权限:读(read)、写(write)、运行(execute)。我们可以针对文件的属主、属组、而设置相应的访问权

​ 我们可以通过 ls 或者stat命令查询文件属主、属组和权限

#可以看到passwd文件的访问权限是-rw-r--r--,用户是root,用户组是root
[root@node5 ~]# ls -l /etc/passwd
-rw-r--r-- 1 root root 1447 Oct 13 15:15 /etc/passwd
#stat命令显示的信息更详细
[root@node5 ~]# stat /etc/passwd
File: ‘/etc/passwd’
Size: 1447 Blocks: 8 IO Block: 4096 regular file
Device: fd00h/64768d Inode: 17664215 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2020-10-13 15:20:01.164284250 +0800
Modify: 2020-10-13 15:15:22.754277347 +0800
Change: 2020-10-13 15:15:22.755277347 +0800
Birth: -

二.用户的三种类型

linux中用户分为三类:

  • ​ 超级用户(root):root 拥有系统最高的管理权限,uid=0
  • ​ 普通用户:从centos7开始,系统用户的UID为1-999,centos6的系统用户UID为1-499,从centos7开始,本地用户的UID从1000开始,centos6的本地用户UID从500开始。其中UID是每个用户的身份标示,类似于每个人的身份证号码。
  • ​ 虚拟用户:又称伪用户 ,一般不会用来登录系统的,它主要是用于维持某个服务的正常运行。如:ftp,apache服务。

三.与用户有关的配置文件详解

配置文件名称 配置文件存放路径 配置文件详解
用户配置文件 /etc/passwd 记录了每个用户的基本属性,并且对所有用户可读,每一行记录对应一个用户,每行记录通过冒号进行分隔
用户组文件 /etc/group 用户组的所有信息存放地,组名不能重复
用户密码信息文件 /etc/shadow 由于/etc/passwd文件对所有用户是可读的,为安全起见把密码从passwd中分离出来放入这个单独的文件,该文件只有root用户拥有读权限,从而保证密码安全性

1./etc/passwd各个字段含义:

image-20201013174941960

[root@node5 ~]# tail -1 /etc/passwd
elk:x:1001:1001::/opt/elk:/bin/bash
#elk:用户名
#x:密码占位符
#1001:用户的UID,它都是用数字来表示的
#1001:用户所属组的GID,它都是用数字来表示的
#用户描述信息:对用户的功能或其它来进行一个简要的描述
#/opt/elk:用户主目录/家目录
#/bin/bash:用户登录系统后默认使用的shell
#扩展,查看系统中,支持哪些shell
[root@node5 ~]# cat /etc/shells
/bin/sh
/bin/bash
/sbin/nologin
/usr/bin/sh
/usr/bin/bash
/usr/sbin/nologin
/bin/ksh
/bin/rksh
/bin/zsh

2./etc/shadow各个字段含义

image-20201013181432956

[root@node5 ~]# grep root /etc/shadow
root:$6$KLWtaWU.iaW5rSmI$QgFqjhNnwVjBXRRvHA.TPwhku260i6yJv5X2dGUfn.EBBoOrGuP5QrSKTmNwJehB1j/B2lCHnbUxuvTx6L2G./::0:99999:7:::

/etc/shadow各个字段详解

name 账户名称,这个必须是系统中的有效账户名
password 已加密的密码,分为三个部分,第一部分是表示使用哪种哈希算法;第二部分是用于加密哈希的salt;第三部分是已加密的哈希
哈希算法:$1表示MD5 ; $6 表示SHA-512 ; $5 SHA-256
lastchange 最近一次更改密码的日期,以距离1970/1/1的天数表示
min-age 不能更改密码的最少天数,最近更改过后几天才可以更改;如果为0表示“最短期限要求”
maxage 密码过期时间,必须更改密码前的最多天数
warning 密码即将到期的警告期,以天数表示,0表示“不提供警告”
inactive 宽限天数,密码到期后
expire 账号过期时间,以距离1970/1/1的天数计算 (千年虫)
blank 预留字段

3./etc/group各个字段详解

[elk@node5 ~]$ tail -4 /etc/group
postgres:x:26:elk
esnode:x:8001:elk
elk:x:1001:
logstash:x:1002:
#第一个字段:组名,用户组的名称,组名不能重复
#第二个字段:密码占位符,密码存在/etc/gshadow里
#第三个字段:组标识号gid,这个gid号是和/etc/passwd中组标识号对应的
#第四个字段:组内用户列表,可以有多个用户,多个用户之间用逗号分隔

4.控制添加用户规则的文件有两个,/etc/default/useradd和/etc/login.defs

[root@node5 ~]# ls /etc/default/useradd
/etc/default/useradd
[root@node5 ~]# ls /etc/login.defs
/etc/login.defs
#egrep -v "^$|^#"的意思是过滤掉空行和#开头的行
[root@node5 ~]# egrep -v "^$|^#" /etc/login.defs
MAIL_DIR /var/spool/mail
PASS_MAX_DAYS 99999
PASS_MIN_DAYS 0
PASS_MIN_LEN 5
PASS_WARN_AGE 7
UID_MIN 1000 #本地用户的UID从1000开始
UID_MAX 60000 #本地用户的UID最大值
SYS_UID_MIN 201
SYS_UID_MAX 999
GID_MIN 1000 #GID从1000开始
GID_MAX 60000 #GID的最大值
SYS_GID_MIN 201
SYS_GID_MAX 999
CREATE_HOME yes #是否为用户建立home目录
UMASK 077
USERGROUPS_ENAB yes
ENCRYPT_METHOD SHA512 #shadow文件的加密算法
[root@node5 ~]# cat /etc/default/useradd
# useradd defaults file
GROUP=100 #表示可以创建普通组,users组ID为100。如果没有这一条,或者你把users这个组删除了,当你再创建用户时,将提示:#useradd: group '100' does not exist
HOME=/home #指定用户家目录,如果你不想让用户家目录在/home下,可以修改这个地方。
INACTIVE=-1 #是否启用帐号过期。passwd文件中第7栏。即:密码过期后是否会失效的设定值 。INACTIVE:无效。-1表示启用
EXPIRE= #帐号终止日期 shadow中第8栏。账号失效的日期 就是 shadow 内的第八字段,你可以直接设定账号在哪个日期后就直接失效,#而不理会密码的问题。通常不会设定此配置项,但如果是付费的会员制系统,或许这个字段可以设定!
SHELL=/bin/bash #指定默认使用的shell类型
SKEL=/etc/skel #模板目录
CREATE_MAIL_SPOOL=yes #是否创建邮箱文件

四.创建用户

1.创建用户使用useradd命令,命令的格式为:useradd -d -u “UID” -g "初始组" -G "附加组" -s "登陆的shell” 用户

#useradd命令参数说明
#-d:-d 用户主目录路径,指定用户家目录
#-M:不创建用户的主目录
#-g:设置用户初始组的名称或数字ID;该组必须是存在的;如果没有设置该选项,useradd会根据/etc/login.defs文件中
#USERGROUPS_ENAB环境变量进行设置。默认USERGROUPS_ENAB yes 会用和用户名相同的名字创建群组,GID等于UID
#-G:用户要加入的附加组列表;使用逗号分隔多个组,不要添加空格;如果不设置,用户仅仅加入初始组。(一个用户只允许有一个主组,可以有多#个附属组)
#-s:用户默认登录shell的路径;启动过程结束后,默认启动的登录shell在此处设定;请确保使用的shell已经安装,默认是 Bash。有时候需#要禁止某些用户执行登录动作,例如用来执行系统服务的用户。将shell设置成 /sbin/nologin可以禁止用户登录。
#扩展,useradd的其他用法
useradd [-d home] [-s shell] [-c comment] [-m [-k template]] [-f inactive] [-e expire ] [-p passwd] [-r] name
#参数说明
#-c:加上备注文字(添加注释),备注文字保存在passwd的备注栏中。
#-d:指定用户登入时的主目录,替换系统默认值/home/<用户名>
#-D:变更预设值。
#-e:指定账号的失效日期,日期格式为MM/DD/YY,例如06/30/12。缺省表示永久有效。
#-f:指定在密码过期后多少天即关闭该账号。如果为0账号立即被停用;如果为-1则账号一直可用。默认值为-1.
#-g:指定用户所属的群组。值可以使组名也可以是GID。用户组必须已经存在的,期默认值为100,即users。
#-G:指定用户所属的附加群组。
#-m:自动建立用户的登入目录。
#-M:不要自动建立用户的登入目录。
#-n:取消建立以用户名称为名的群组。
#-r:建立系统账号。
#-s:指定用户登入后所使用的shell。默认值为/bin/bash。
#-u:指定用户ID号。

2.创建elk账户,elk的家目录为/opt/elk,UID为1001,附属组为esnode,postgres,root,默认登录的shell为bash

[root@node5 ~]# useradd -d /opt/elk -u 1001 -g 1001 -G esnode,postgres,root -s /bin/bash elk
useradd: group '1001' does not exist
#-g:设置用户初始组的名称或数字ID;该组必须是存在的,默认GID等于UID
[root@node5 ~]# useradd -d /opt/elk -u 1001 -G esnode,postgres,root -s /bin/bash elk
#id查看elk用户的uid,gid,groups
[root@node5 ~]# id elk
uid=1001(elk) gid=1001(elk) groups=1001(elk),0(root),26(postgres),8001(esnode)
[root@node5 ~]# tail -1 /etc/passwd
elk:x:1001:1001::/opt/elk:/bin/bash
#elk用户下的家目录存在的掩藏文件
[root@node5 ~]# ls /opt/elk/ -a
. .. .bash_logout .bash_profile .bashrc .kshrc .zshrc
#如果一个组有多个成员,我们是可以在/etc/group文件中最后一个字段看到的
[root@node5 ~]# tail -4 /etc/group
tss:x:59:
postgres:x:26:elk
esnode:x:8001:elk
elk:x:1001:
#切换到elk用户,并进入家目录
[root@node5 ~]# su - elk
[elk@node5 ~]$ pwd
/opt/elk
[elk@node5 ~]$ ls
#退出elk用户
[elk@node5 ~]$ exit
logout

3.创建logstash账户,但是不创建家目录

[root@node5 ~]# useradd -M logstash
[root@node5 ~]# id logstash
uid=8002(logstash) gid=8002(logstash) groups=8002(logstash)
[root@node5 ~]# tail -1 /etc/passwd
logstash:x:8002:8002::/home/logstash:/bin/bash
#/etc/passwd里虽然存在/home/logstash家目录,但是并没有创建家目录
[root@node5 ~]# ls /home/logstash
ls: cannot access /home/logstash: No such file or directory
[root@node5 ~]# tail -1 /etc/group
logstash:x:8002:

4.创建es账户,并对es账户进行注释

#-c:加上备注文字(添加注释),备注文字保存在passwd的备注栏中。
[root@node5 ~]# useradd -c "es的账户" es
[root@node5 ~]# id es
uid=8003(es) gid=8003(es) groups=8003(es)
[root@node5 ~]# tail -1 /etc/passwd
es:x:8003:8003:es的账户:/home/es:/bin/bash

5.创建用户除了使用useradd,还可以使用adduser,

[root@node5 ~]# which useradd
/usr/sbin/useradd
[root@node5 ~]# which adduser
/usr/sbin/adduser
#可以看到adduser只是useradd的软链接
[root@node5 ~]# ll -h /usr/sbin/adduser
lrwxrwxrwx. 1 root root 7 Apr 26 2019 /usr/sbin/adduser -> useradd

五.设置用户密码

1.以交互方式设置用户密码

#可以发现如果一个用户被创建了,但是没有设置密码,/etc/shadow文件的第二字段使用!!表示
[root@node5 ~]# tail -3 /etc/shadow
esnode:$6$fznP2Oqd$02x2dTMV0kP5Ra780.sw.W06KZVl7ua8sA7QBMfEsYp0iUs1ukz.9H/iqYjToLLLa1TPSGWDC6a8yVJFZCVV5/:18378:0:99999:7:::
elk:!!:18548:0:99999:7:::
logstash:!!:18548:0:99999:7:::
#设置elk密码
[root@node5 ~]# passwd elk
Changing password for user elk.
New password:
BAD PASSWORD: The password is shorter than 8 characters
Retype new password:
passwd: all authentication tokens updated successfully.
[root@node5 ~]# tail -3 /etc/shadow
esnode:$6$fznP2Oqd$02x2dTMV0kP5Ra780.sw.W06KZVl7ua8sA7QBMfEsYp0iUs1ukz.9H/iqYjToLLLa1TPSGWDC6a8yVJFZCVV5/:18378:0:99999:7:::
elk:$6$An7lKn2Q$dSuliu1h.Wn42GsrRwKPDS6bgEmTR8TlMsWMHIVWIEXOVbsKwvBcKDDNv.Mxki7aOwV8EBASQFAGQ9W.N/LeV.:18548:0:99999:7:::
logstash:!!:18548:0:99999:7:::

2.一条命令设置用户密码,免交互

[root@node5 ~]# echo 123456 | passwd --stdin logstash
Changing password for user logstash.
passwd: all authentication tokens updated successfully.
[root@node5 ~]# tail -3 /etc/shadow
esnode:$6$fznP2Oqd$02x2dTMV0kP5Ra780.sw.W06KZVl7ua8sA7QBMfEsYp0iUs1ukz.9H/iqYjToLLLa1TPSGWDC6a8yVJFZCVV5/:18378:0:99999:7:::
elk:$6$An7lKn2Q$dSuliu1h.Wn42GsrRwKPDS6bgEmTR8TlMsWMHIVWIEXOVbsKwvBcKDDNv.Mxki7aOwV8EBASQFAGQ9W.N/LeV.:18548:0:99999:7:::
logstash:$6$9yY5A65j$YzViQt8dC7mb9ID4my1x1o2dZX3ovQbTfsMr3f5UaJkt3THQRMOmt0pq2YIN0W.zlyU/hRlZe.9vocyFepTYl1:18548:0:99999:7:::

3.如果嫌想密码太麻烦,可以使用mkpasswd生成随机密码

#如果想使用mkpasswd,需要提前安装expect
[root@node5 ~]# yum -y install expect
[root@node5 ~]# which mkpasswd
/usr/bin/mkpasswd
#mkpasswd命令的参数说明:-l密码长度 -s特殊字符数 -d数字个数
[root@node5 ~]# mkpasswd -l 12 -s 3 -d 2
y=JZixsj~,14

4.假如两个用户的密码一样,那么shadow中加密的hash值一样吗?

答:不一样, 因为salt不一样。

六.删除用户

删除用户使用userdel,加-r参数的时候,会同时删除用户的家目录和/var/mail下的目录

[root@node5 ~]# ls /var/mail/
elk es esnode logstash nginx root rpc www
[root@node5 ~]#
[root@node5 ~]# userdel -r es
[root@node5 ~]#
[root@node5 ~]# ls /home/es
ls: cannot access /home/es: No such file or directory
[root@node5 ~]# ls /var/mail/
elk esnode logstash nginx root rpc www

七.用户密码时效管理

1.chage命令用于密码实效管理,是用来修改帐号和密码的有效期限

2.chage命令参数详解

参数 描述
-d 指定密码最后修改日期,上一次更改的日期,为0表示强制在下次登录时更新密码
-E 密码到期的日期,过了这天,此账号将不可用,0表示马上过期,-1表示永不过期
-h 显示帮助信息并退出
-I(大写的i) 密码过期后,锁定账号的天数
-l 列出用户及密码的有效期
-m 密码可更改的最小天数,为零代表任何时候都可以更改密码
-M 密码保持有效的最大天数
-W 密码过期前,提前收到警告信息的天数

八.查看用户相关信息的命令

参数 描述
id 查看用户和组的信息
whoami 查看当前有效用户名
who 显示目前登入系统的用户信息
w w命令用于显示已经登陆系统的用户列表
users 用于显示当前登录系统的所有用户的用户列表
[root@node5 ~]# id
uid=0(root) gid=0(root) groups=0(root)
[root@node5 ~]# whoami
root
[root@node5 ~]# who
esnode tty1 2020-10-14 00:38
root pts/0 2020-10-13 12:37 (192.168.110.1)
root pts/1 2020-10-13 12:37 (192.168.110.1)
[root@node5 ~]# w
00:39:35 up 6 days, 4:39, 3 users, load average: 0.00, 0.01, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
esnode tty1 00:38 1:03 0.01s 0.01s -bash
root pts/0 192.168.110.1 Tue12 7.00s 0.55s 0.00s w
root pts/1 192.168.110.1 Tue12 6:23m 0.07s 0.07s -bash
[root@node5 ~]# users
esnode root root

九.修改用户基本信息

1.修改用户基本信息使用usermod命令,格式为:usermod 【参数】用户名

参数 描述
-u 修改用户UID
-d 修改用户家目录
-g 修改用户起始组
-G 修改用户附加组
-s 修改用户登录shell
-L 锁定用户账户
[root@node5 ~]# tail -1 /etc/passwd
logstash:x:8002:8002::/home/logstash:/bin/bash
[root@node5 ~]# id logstash
uid=8002(logstash) gid=8002(logstash) groups=8002(logstash)
#修改用户UID
[root@node5 ~]# usermod -u 1002 logstash
[root@node5 ~]# id logstash
uid=1002(logstash) gid=8002(logstash) groups=8002(logstash)
#修改用户起始组,修改用户GID
[root@node5 ~]# usermod -g 1002 logstash
usermod: group '1002' does not exist
[root@node5 ~]# groupmod -g 1002 logstash
[root@node5 ~]# id logstash
uid=1002(logstash) gid=1002(logstash) groups=1002(logstash)
#修改用户登录shell,设置logstash禁止登陆
[root@node5 ~]# usermod -s /sbin/nologin logstash
[root@node5 ~]# grep logstash /etc/passwd
logstash:x:1002:1002::/home/logstash:/sbin/nologin
#修改nginx用户的附属组为wheel
[root@node5 ~]# id nginx
uid=8000(nginx) gid=8000(nginx) groups=8000(nginx)
[root@node5 ~]# usermod -aG wheel nginx
[root@node5 ~]# id nginx
uid=8000(nginx) gid=8000(nginx) groups=8000(nginx),10(wheel)
[root@node5 ~]# grep wheel /etc/group
wheel:x:10:nginx

2.更改用户家目录,并把以前家目录里的内容迁移到新的家目录里

[root@node5 ~]# grep elk /etc/passwd
elk:x:1001:1001::/opt/elk:/bin/bash
[root@node5 ~]# su - elk
Last login: Tue Oct 13 15:01:37 CST 2020 on pts/0
[elk@node5 ~]$ pwd
/opt/elk
[elk@node5 ~]$ ls
[elk@node5 ~]$ mkdir -p a/b/c
[elk@node5 ~]$ touch a/test.txt
[elk@node5 ~]$ tree ./
./
└── a
├── b
│   └── c
└── test.txt
3 directories, 1 file
[elk@node5 ~]$ exit
logout
#-m选项会自动创建新目录并且迁移原有内容到新目录里面
[root@node5 ~]# usermod -m -d /home/elk elk
[root@node5 ~]# grep elk /etc/passwd
elk:x:1001:1001::/home/elk:/bin/bash
[root@node5 ~]# su - elk
Last login: Wed Oct 14 01:10:27 CST 2020 on pts/0
[elk@node5 ~]$ pwd
/home/elk
#发现原有内容也迁移过来了
[elk@node5 ~]$ tree ./
./
└── a
├── b
│   └── c
└── test.txt
3 directories, 1 file

3.修改用户注释

[root@node5 ~]# grep elk /etc/passwd
elk:x:1001:1001::/home/elk:/bin/bash
[root@node5 ~]# usermod -c "elk是es,logstash,kibana的缩写" elk
[root@node5 ~]# grep elk /etc/passwd
elk:x:1001:1001:elk是es,logstash,kibana的缩写:/home/elk:/bin/bash

十.管理用户组

[root@node5 ~]# tail -4 /etc/group
postgres:x:26:elk
esnode:x:8001:elk
elk:x:1001:
logstash:x:1002:
[root@node5 ~]# groupadd es
[root@node5 ~]# groupadd -g 1004 kibana
[root@node5 ~]# tail -4 /etc/group
elk:x:1001:
logstash:x:1002:
es:x:8002:
kibana:x:1004:
#修改es的GID
[root@node5 ~]# groupmod -g 1005 es
[root@node5 ~]# tail -4 /etc/group
elk:x:1001:
logstash:x:1002:
es:x:1005:
kibana:x:1004:
版权声明
本文为[人生的哲理]所创,转载请带上原文链接,感谢
https://www.cnblogs.com/renshengdezheli/p/13947125.html

  1. 【计算机网络 12(1),尚学堂马士兵Java视频教程
  2. 【程序猿历程,史上最全的Java面试题集锦在这里
  3. 【程序猿历程(1),Javaweb视频教程百度云
  4. Notes on MySQL 45 lectures (1-7)
  5. [computer network 12 (1), Shang Xuetang Ma soldier java video tutorial
  6. The most complete collection of Java interview questions in history is here
  7. [process of program ape (1), JavaWeb video tutorial, baidu cloud
  8. Notes on MySQL 45 lectures (1-7)
  9. 精进 Spring Boot 03:Spring Boot 的配置文件和配置管理,以及用三种方式读取配置文件
  10. Refined spring boot 03: spring boot configuration files and configuration management, and reading configuration files in three ways
  11. 精进 Spring Boot 03:Spring Boot 的配置文件和配置管理,以及用三种方式读取配置文件
  12. Refined spring boot 03: spring boot configuration files and configuration management, and reading configuration files in three ways
  13. 【递归,Java传智播客笔记
  14. [recursion, Java intelligence podcast notes
  15. [adhere to painting for 386 days] the beginning of spring of 24 solar terms
  16. K8S系列第八篇(Service、EndPoints以及高可用kubeadm部署)
  17. K8s Series Part 8 (service, endpoints and high availability kubeadm deployment)
  18. 【重识 HTML (3),350道Java面试真题分享
  19. 【重识 HTML (2),Java并发编程必会的多线程你竟然还不会
  20. 【重识 HTML (1),二本Java小菜鸟4面字节跳动被秒成渣渣
  21. [re recognize HTML (3) and share 350 real Java interview questions
  22. [re recognize HTML (2). Multithreading is a must for Java Concurrent Programming. How dare you not
  23. [re recognize HTML (1), two Java rookies' 4-sided bytes beat and become slag in seconds
  24. 造轮子系列之RPC 1:如何从零开始开发RPC框架
  25. RPC 1: how to develop RPC framework from scratch
  26. 造轮子系列之RPC 1:如何从零开始开发RPC框架
  27. RPC 1: how to develop RPC framework from scratch
  28. 一次性捋清楚吧,对乱糟糟的,Spring事务扩展机制
  29. 一文彻底弄懂如何选择抽象类还是接口,连续四年百度Java岗必问面试题
  30. Redis常用命令
  31. 一双拖鞋引发的血案,狂神说Java系列笔记
  32. 一、mysql基础安装
  33. 一位程序员的独白:尽管我一生坎坷,Java框架面试基础
  34. Clear it all at once. For the messy, spring transaction extension mechanism
  35. A thorough understanding of how to choose abstract classes or interfaces, baidu Java post must ask interview questions for four consecutive years
  36. Redis common commands
  37. A pair of slippers triggered the murder, crazy God said java series notes
  38. 1、 MySQL basic installation
  39. Monologue of a programmer: despite my ups and downs in my life, Java framework is the foundation of interview
  40. 【大厂面试】三面三问Spring循环依赖,请一定要把这篇看完(建议收藏)
  41. 一线互联网企业中,springboot入门项目
  42. 一篇文带你入门SSM框架Spring开发,帮你快速拿Offer
  43. 【面试资料】Java全集、微服务、大数据、数据结构与算法、机器学习知识最全总结,283页pdf
  44. 【leetcode刷题】24.数组中重复的数字——Java版
  45. 【leetcode刷题】23.对称二叉树——Java版
  46. 【leetcode刷题】22.二叉树的中序遍历——Java版
  47. 【leetcode刷题】21.三数之和——Java版
  48. 【leetcode刷题】20.最长回文子串——Java版
  49. 【leetcode刷题】19.回文链表——Java版
  50. 【leetcode刷题】18.反转链表——Java版
  51. 【leetcode刷题】17.相交链表——Java&python版
  52. 【leetcode刷题】16.环形链表——Java版
  53. 【leetcode刷题】15.汉明距离——Java版
  54. 【leetcode刷题】14.找到所有数组中消失的数字——Java版
  55. 【leetcode刷题】13.比特位计数——Java版
  56. oracle控制用户权限命令
  57. 三年Java开发,继阿里,鲁班二期Java架构师
  58. Oracle必须要启动的服务
  59. 万字长文!深入剖析HashMap,Java基础笔试题大全带答案
  60. 一问Kafka就心慌?我却凭着这份,图灵学院vip课程百度云