1_Linux
一. Linux介绍
1.1 引言
- 在学习Linux之前, 大家先了解开发环境,生产,测试环境
- 开发环境: 平时大家大多是在Windows或者Mac操作系统下去编写代码进行开发,在开发环境中安装大量的软件 这样会导致环境的稳定性和安全性降低
- 生产环境: 是将程序运行在此环境中, 供用户去使用, 这个环境是有专业的人员去维护的, 一般人没有权限去操作生产环境
- 测试环境: 一般克隆一份生产环境, 会将开发环境中的程序部署到测试环境中. 这个环境的主要目的是去程序进程检测, 收集程序中的各种问题, 并交给开发人员进行修改
- 生产环境中, 常用的操作系统比如有Windows 2003 service, Linux, Unix等等
- Linux操作系统, 在生产环境中占据了大量的市场份额, Linux主要以稳定 , 可靠, 免费的特点成为全球使用最多的服务器操作系统
- Linux操作系统现在已经成为后台开发人员必备的技能
1.2 Linux介绍
- 在Linux操作系统出现之前, 还有一个操作系统叫做Minix, Minix操作系统是由Andrew的大学教授研发出来的, 当时大学教授是为了给学生上课, 买了一套Unix操作系统, 参考Unix自己写了一个操作系统, 并且命名为Minix, 同时将Minix开源, 供学校内部的研究和教学, 到了2000年, Andrew将Minix操作系统完全对外开源
- Minix由于完全对外开源之后, 在互联网上迅速的传播, 但是大家在使用时, 发展Minix不是很完美, 内部存在各种各样问题, 用户将问题解决后, 编写了一个补丁, 将补丁以邮件的方式发给Andrew, 但是Andrew教授最初的目的只是为了教学和研究
- 与此同时, 一位芬兰的大学生Linus Torvalds出现了, 在Minix操作系统基础上, 自己添加了一些补丁和插件, 并将其命名为Linux操作系统, 并且完全对外开源, 而且开始维护Linux操作系统
- 我们学习的Git也是Linus研发的
1.3 Linux的版本
- Linux的发内核版本
- Linux的发行版本
- 咱们要学习的发行版本就是CentOS
1.4 Linux和Windows区别
- Linux是严格区分大小写的, Windows无所谓
- Linux中一切皆是文件
- Linux中文件是没有后缀的, 但是它有一些约定俗成的后缀
- Windows下的软件一般是无法直接运行在Linux中
- 我们在学习Linux时, 参考Windows下做了什么, 就在Linux中做什么
二. Linux安装
安装Linux, 我们需要一个虚拟机, 为了安装虚拟环境: VMware或者Virtual Box (这里我们使用
VMware
)
为了安装Linux, 需要一个Linux的镜像文件: CentOS7版本
安装一个连接Linux的图形化界面: Xterm, SSH, XShell (我们这里使用
Xterm
)
2.1 安装VMware
- 傻瓜式安装
2.2 安装Xterm
- 解压即可使用
2.3 在VMware中安装Linux
- 打开VMware, 可以试用30天, 也可以使用密钥永久使用
- ZF3R0-FHED2-M80TY-8QYGC-NPKYF
YF390-0HF8P-M81RQ-2DXQE-M2UT6
ZF71R-DMX85-08DQY-8YMNC-PPHV8 - 上面三个密钥挑选一个使用
- ZF3R0-FHED2-M80TY-8QYGC-NPKYF
- 创建新的虚拟机
- 典型[推荐]
- 稍后安装操作系统
- 客户机操作系统选择Linux,版本选择CentOS 7 64位
- 虚拟机名称和位置可以自定义
- 指定磁盘容量这个界面不用动,直接下一步
- 完成
- 编辑虚拟机设置
- 内存设置为2GB
- 处理器: 每个处理器的内核数量设置为2
- 网络适配器: 设置为桥接模式, 勾选复制物理网络连接状态(如果自己的电脑连接的不是wifi,是手机热点,请选择NAT模式)
- CD/DVD(IDE): 使用ISO映像文件
- 选择我们之前下载好的CentOS7镜像文件
- 开启此虚拟机
- 用鼠标点进去, 然后使用键盘的上下方向键选中第一个直接安装
- Ctrl+ALt可以返回我们的计算机,就可以正常使用鼠标了
- 选择中文,简体中文(中国),然后点击继续
- 点击系统下的安装位置, 最上方有个完成按钮,我们点击此完成按钮
- 点击系统下的网络和主机名,打开以太网连接, 连接上以后点击最上方的完成按钮
- 开始安装
- Root密码设置, 可以设置为root,比较好记,但是密码较短时需要点击两次完成
- 最后等待安装完成后点击重启按钮进入登陆界面
- login后先输入root, 密码再输入root(密文输入,我们是看不到的,密码输入root后enter回车), 显示[root@localhost ~]#代表登陆成功
- 输入ip a或者ip addr show ens33查询ip地址: 192.168.59.128
2.4 使用Xterm连接Linux
- 使用ip a的命令查看当前Linux的ip地址, 通过Xterm连接
- 打开Xterm, 选择左上角的Session, 再选择SSH, 并且输入Linux操作系统的ip地址, 再输入用户名root,点击ok
- 输入密码后就连接上了Linux操作系统了
三. Linux基本操作
3.1 Linux的目录结构
- Windows的目录结构是带有盘符的: C:,D:,E:
- 在Xterm中输入ls / 查看Linux的顶级目录
- 选中要复制的内容,按住Shift+鼠标右键在Xterm中进行复制
[root@localhost ~]# ls /
bin dev home lib64 mnt proc run srv tmp var
boot etc lib media opt root sbin sys usr
- root: 该目录为系统管理员的HOME目录
- bin: 这个目录下存放着经常使用的命令
- boot: 这里存放的是启动Linux时的一些核心文件
- etc: 存放系统管理所需要的配置文件和子目录
- home: 普通用户的HOME目录
- usr: 默认安装软件的目录, 类似Windows中的Program Files目录
- opt: 是主机额外安装软件摆放的目录
3.2 获取Linux中的信息
#1. 我是谁
who am i
#2. 我在哪
pwd
#3. 查看ip地址
ip a | ip address
#4. 清屏
clear
#5. ping 域名|ip
ping 地址
#6. 强制停止
Ctrl + C
四. Linux命令
- Linux中命令的基本格式: 命令 [选项] [参数]
- 需要注意, 个别命令是不遵循这个格式的
- 当命令中有多个选项时, 是可以写在一起的, 并且选项也是有简写方式的, 命令 -选项A选项B
4.1 目录的命令
#1. 列出目录
ls [-ald] [目录名]
#目录名可不填写 默认为当前目录
#-a: 列出全部的文件,包括隐藏文件
#-l: 列出全部的信息
#-d: 仅查看目录本身
- Linux中的隐藏文件是以.开头的, 当前目录使用.表示, 上一级目录使用..表示
#2. 切换目录
cd 路径 | 符号
#路径可以填写的内容
#.: 当前目录
#..: 上级目录
#/: 根目录
#~: 当前登陆用户的HOME目录
#-: 返回
#cd: /user是从根目录下查找user
#cd: user是从当前目录下查找user
#3. 创建目录
mkdir [-p] 目录名
#-p: 代表创建多级目录时使用
#4. 删除目录
rmdir 目录名
#只能删除空目录
rm [-rf] 目录名
#删除非空目录
#-r: 代表递归删除目录下的全部内容
#-f: 不询问, 直接删除,不加-f会询问是否删除,y确定删除,g退出
#5. 复制目录
cp -r 来源目录 目标目录
#-r: 递归复制全部内容
#6. 移动, 重命名目录
mv 目录名 新目录名
mv 目录名 路径
#假如当前目录下不存在b目录
#mv a b 表示把a目录重命名为b目录
#假如当前目录下存在b目录
#mv a b 表示把a目录移动到b目录下
#假如当前目录下存在b目录,且b目录下存在c目录
#mv a b/c 表示把a目录移动到b目录下的c目录下
#假如当前目录下存在b目录,但b目录下不存在c目录
#mv a b/c 表示把a目录移动到b目录下并重命名为c目录
#总结
#如果第二个参数不存在,就代表重命名
#如果第二个参数存在,就代表移动
#如果第二个参数存在, 但是参数末尾的名称不存在,代表移动并重命名
4.2 文件的命令
#1. 创建文件
touch 文件名
touch 文件名1 文件名2
#2. 编辑文件
vi 文件名 #查看文件 (查看模式)
i | a | o #进入编辑模式 (编辑模式)
#i: 在当前光标处, 进入编辑模式
#a: 在当前光标后一格, 进入编辑模式
#o: 在当前光标下一行, 进入编辑模式
#Shift+g跳到最后一行
#再按Shift+4跳到最后一个字符
esc #退出编辑模式,回到查看模式
: #从查看模式进入到底行命令模式 (底行命令模式)
#在底行命令模式下, 输入wq: 保存并退出, 输入q!: 不保存退出
#在查看模式下, 按Shift+zz(也就是按两下大写字母Z), 可以快速保存并退出
#3. 在编辑文件时的其他操作
#在底行命令模式下,可以输入的内容
set nu #查看文件的行号
to 行号 #快速的跳转到指定行
set nonu #取消行号
#直接在查看模式下输入
/具体内容 #类似Windows中的Ctrl+F搜索文件中的具体内容所在位置(按n查找下一个)
#4. 查看文件
cat 文件名
#从第一行开始查看文件内容, 展示全部
tac 文件名
#从最后一行开始展示
nl 文件名
#展示文件的同时, 展示行号
more 文件名
#查看大文件时, 可以一页一页的向下翻(按空格向下翻页,按q退出)
less 文件名
#查看大文件时, 可以任意的向上或向下翻(PageUp和PageDn向上或下翻页,上下方向键一行一行查看, 按q可快速退出)
head 文件名
#只查看前几行
tail 文件名
#只查看后几行
#tail -f 日志 监控日志
#5. 移动,重命名文件
mv 文件名 新文件名
mv 文件名 目录
#和之前的移动目录方式一样
#6. 复制文件
cp 文件 目录
#7. 删除文件
rm [-f] 文件名
#-f: 不询问, 直接删除,如果不加-f就会询问是否删除,y确定删除,g退出
4.3 针对压缩包的操作
- Linux中常用的压缩包, 后缀大多数是.tar, .tar.gz, .tgz
- 但是Linux不仅仅针对tar类型的压缩包, 也支持zip, rar这种Windows下的压缩包
4.3.1 针对tar压缩包的命令
#针对tar类型的压缩包操作
#1. 解压压缩包
tar [-zxvf] 压缩包名称 [-C 路径]
#-z: 代表压缩包后缀是.gz的
#-x: 代表解压
#-v: 解压时,打印详细信息
#-f: -f选项必须放在所有选项的最后, 因为它代表指定文件的名称
#-C 路径: 可写可不写,不写就是默认解压到当前目录下, 写了就代表解压到指定目录下
#2. 打包压缩包
tar [-zcvf] 压缩包名称 文件1 文件2 目录1 目录2...
#-c: 代表打包
4.3.2 针对zip压缩包的命令
- Linux默认是不支持zip压缩包格式的
- 需要安装两个软件
- zip, unzip
- yum -y install zip
- yum -y install unzip
#解压
unzip 压缩包名称
#打包
zip 压缩包名称 文件1 文件2 目录1 目录2...
4.4 用户&用户组的操作
- Linux是一个多用户的操作系统, 任何一个用户想要操作Linux操作系统, 必须向系统管理员申请一个账号才可以使用, 以这个账号的身份去操作Linux
- 用户的账号一方面可以帮助系统管理员追踪当前用户的操作, 另一方面可以控制当前用户对系统资源访问
4.4.1 用户的操作
#1. 创建用户
useradd [-cgd] [选项指定的具体内容] 用户名
#-c: 代表comment, 给用户添加一段注释
#-g: 代表group, 可以修改用户的所在组
#-d: 代表指定用户的HOME目录
#2. 设置密码
passwd 用户名
#3. 切换用户
su 用户名
#[root@localhost ~]# 代表root用户在本地登录,并且当前在~目录下,#代表是超级管理员
#[dz@localhost ~]$ 代表用户dz在本地登录,并且当前在~目录下,$代表是普通用户
#4. 删除用户
userdel -r 用户名
#-r: 代表删除用户的同时, 删除该用户的HOME目录
#从普通用户切换到到root超级管理员有两种方式, 一是可以用exit退出,二是用su root切换到root
#5. 修改用户(了解)
usermod [-cgd] [选项指定的具体内容] 用户名
#-c: 代表comment, 给用户添加一段注释
#-g: 代表group, 可以修改用户的所在组
#-d: 代表指定用户的HOME目录
#usermod -g dz dz1 表示把用户dz1所在的组修改为dz,用户在后, 组名在前
4.4.2 用户组的操作
#1. 创建用户组
groupadd 用户组名
#2. 修改用户组
groupmod [-n] [选项指定的具体内容] 用户组名
#-n: 修改用户组名称
#groupmod -n dzdz dz 表示把dz组改名为dzdz, 原组名在后, 新组名在前
#3. 删除用户组
groupdel 用户组名
#只能删除不存在用户的用户组
4.5 文件权限的修改
- 在Linux中输入ls -l 或者ll查看文件和目录的详细信息
[root@localhost ~]# ll
总用量 16
-rw-r--r--. 1 root root 21 6月 3 21:00 aaa
-rw-------. 1 root root 1241 6月 3 18:45 anaconda-ks.cfg
drwxr-xr-x. 2 root root 6 6月 3 22:00 b
-rw-r--r--. 1 root root 227 6月 3 22:12 base.tar.gz
-rw-r--r--. 1 root root 712 6月 3 22:31 base.zip
drwxr-xr-x. 2 root root 6 6月 3 20:42 bbb
-rw-r--r--. 1 root root 0 6月 3 20:47 yyy
-rw-r--r--. 1 root root 0 6月 3 20:47 zzz
- 实例中, b目录的第一个属性用"d"标识, 代表这个b是一个目录
- anaconda-ks.cfg第一个属性用"-"标识, 代表它是一个文件
- 在Linux文件详情的后面属性需要分为三组查看
- rwx: 代表文件拥有者的权限
- rwx: 代表文件所属组用户的权限
- rwx: 代表其他用户对当前文件的操作权限
- r: 代表read,读的权限
- w: 代表write, 写的权限
- x: 代表execute, 执行的权限
- 后续的第一个root: 代表当前文件的拥有者
- 后续的第二个root: 代表当前文件的所属组
- 后续分别为: 文件的大小和最后修改时间
4.5.1 对文件的权限修改
- 使用chmod对文件的权限进行修改, 一种使用数字, 一种使用符号
#1. 数字方式
chmod [-R] 777 文件|目录
#rwx在这三个权限中r:4, w:2, x:1
#777代表拥有所有权限
#-R: 当修改一个目录权限时, 可以添加-R, 代表将目录下的全部内容, 都修改权限
#2. 符号方式
#user: u, group: g, other: o, all: a
#read: r, write: w, execute: x
#赋予权限的方式 添加: +,减掉:-,设定:=
chmod [-R] a=rw 文件|目录
4.5.2 对文件的拥有者和所属组修改
#修改文件的拥有者和所属组
chown [-R] 拥有者:所属组 文件|目录
#修改文件的拥有者
chown [-R] 拥有者 文件|目录
#修改文件的所属组
chgrp [-R] 所属组 文件|目录
4.6 Linux的其他操作
#1. 进程的操作
ps -ef
#查看全部正在运行的进程
ps -ef | grep 搜索的内容
#杀死进程
kill -9 pid
#2. 服务的操作
#针对服务的启动,停止,重启,开机自动启动,禁止开机自动启动,查看服务状态
systemctl start|stop|restart|enable|disable|status 服务名称
#3. 查看端口号占用情况
#想使用指定的命令需要下载netstat
yum -y install net-tools
#查看端口号占用情况
netstat -naop | grep 端口号
#4. 访问地址
curl 访问地址
#5. 查找文件
find 路径 -type f | grep 搜索的内容
#-type: 类型 f: 代表文件
五. Linux下安装软件
5.1 安装JDK
#1. 下载JDK的压缩包
https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html
#需要登陆才能下载
#2. 将下载好的JDK压缩包拉取到Linux操作系统中
#通过Xterm携带的Sftp将JDK压缩包拖拽到Linux操作系统中
#3. 将JDK压缩包解压到/usr/local
tar -zxvf jdk-8u291-linux-x64.tar.gz -C /usr/local
#4. 修改jdk的目录名
cd /usr/local
mv jdk1.8.0_291 jdk
#5. 配置环境变量
#Linux提供了两种环境变量的文件
#第一个是用户级别的环境变量,存放在: ~/.bash
#第二个是系统级别的环境变量,存放在: /etc/profile
#如果想运行当前目录下的可执行文件,需要输入: ./可执行文件名
#在环境变量文件中, 添加如下内容
export JAVA_HOME=/usr/local/jdk
export PATH=$JAVA_HOME/bin:$PATH
#设置好之后,要重新加载环境变量文件
source /etc/profile
#最终测试
java -version
#如果正确显示java版本信息则证明成功了
5.2 安装MySQL
#1. 安装MySQL的yum存储库
#首先通过yum下载wget命令
yum -y install wget
#再通过wget下载MySQL的yum存储库
wget https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm
#2. 安装下载好的rpm包
#安装rpm包
rpm -Uvh mysql80-community-release-el7-3.noarch.rpm
#查看rpm包
rpm -qa | grep mysql
#卸载rpm包
rpm -e --nodeps mysql80-community-release-el7-3.noarch
#3. 选择发行版本
#先查看一下默认的发行版本
yum repolist all | grep mysql
#通过手动编辑/etc/yum.repos.d/mysql-community.repo 文件, 去修改发行版本
vi /etc/yum.repos.d/mysql-community.repo
#进入文件后,按i,a,o都可进入编辑模式
#将8.0的enable更改为0, 5.7的enabled更改为1,保存(:wq)
#然后再次通过yum repolist all | grep mysql查看一下当前的发行版本是不是5.7
yum repolist all | grep mysql
#效果如下
mysql57-community/x86_64 MySQL 5.7 Community Server 启用: 504
mysql57-community-source MySQL 5.7 Community Server - So 禁用
mysql80-community/x86_64 MySQL 8.0 Community Server 禁用
mysql80-community-source MySQL 8.0 Community Server - So 禁用
#4. 安装MySQL社区版服务
yum install mysql-community-server
#5. 启动MySQL服务,并连接
#启动MySQL服务
systemctl start mysqld
#查看初始化密码
grep 'temporary password' /var/log/mysqld.log
#连接MySQL服务
mysql -u root -p
Enter password:刚才查到的密码
#进入MySQL后修改密码
#密码至少包含 1 个大写字母、1 个小写字母、1 个数字和 1 个特殊字符,并且密码总长度至少为 8 个字符
musql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'Root8031.';
#开启远程连接, 并使用图形化界面操作
mysql> GRANT ALL PRIVILEGES ON *.* TO 'doublez'@'%' IDENTIFIED BY 'Root8031.' WITH GRANT OPTION;
mysql> FLUSH PRIVILEGES;
#然后使用Navicat或者SQLyog进行连接
#ip地址: 192.168.59.128(看自己虚拟机的ip是多少)
#用户名: doublez
#密码: Root8031.
#端口号: 3306
#注意: 如果没连上, 可能是因为虚拟机中防火墙的问题,我们可以把防火墙关掉
#先查看一下防火墙服务
ps -ef | grep firewalld
#临时关闭防火墙服务
systemctl stop firewalld
#禁止开机启动
systemctl dsiable firewalld
5.3 安装Tomcat
#1. 下载Tomcat压缩包
wget https://downloads.apache.org/tomcat/tomcat-8/v8.5.66/bin/apache-tomcat-8.5.66.tar.gz
#2. 解压压缩包到/usr/local
tar -zxvf apache-tomcat-8.5.66.tar.gz -C /usr/local
#3. 启动Tomcat并监听日志
#跳转到tomcat下的bin目录中
cd /usr/local/apache-tomcat-8.5.66/bin
#启动
./startup.sh
#监听日志
cd ../logs
tail -f catalina.out
#当看到下面这一行的时候,证明Tomcat启动成功了
04-Jun-2021 05:15:25.093 信息 [main] org.apache.catalina.startup.Catalina.start Server startup in 1121 ms
#然后就可以去浏览器输入http://192.168.59.128:8080/, 最终确定是否成功启动Tomcat
#关闭Tomcat
./shutdown.sh
六. 部署SSM工程
- 部署项目到Linux中需要注意以下内容
- 项目要保证在Windows下是没有问题的, 再考虑部署到Linux
- 将开发环境中的内容更改为测试环境
- 连接数据库的信息(要修改ip地址,用户名,密码)
- 存放文件的路径(只要是写成某某盘符下的,都要修改, 例如String pic = req.getContextPath() + "/static/images/" + newName)
- 日志文件存放的位置(修改为: /usr/local/logs, 同时日志输出级别从DEBUG改为ERROR)
- 项目路径问题(在各个跳转路径的前面加上${pageContext.request.contextPath}, 就没问题了,路径不要写死)
- 将Maven项目打包
- 根据项目路径的不同, 将项目部署到Tomcat中(先把Tomcat服务器打开)
- 将war包扔进Xterm中的Sftp中,也就是root目录下
- 再将war包复制到 /usr/local/apache-tomcat-8.5.66/webapps/
- 在部署到Linux操作系统中后, 一定要查看日志
- cd ../logs
- tail -f catalina.out
1_Linux的更多相关文章
- 1_Linux概述
linux就是一套操作系统 //系统调用与内核如果能够参考硬件的功能函数并修改你的操作系统程序代码,那经过改版后的操作系统就能够在另一个硬件平台上面运行了,这个操作通常被称为"软件移植&qu ...
- vim: 搭建vim看代码的环境
使用 vim + ctags + cscope + taglist 阅读源码 http://my.oschina.net/u/554995/blog/59927 vim tab变空格 http:// ...
- Ubuntu 18.04 记录
登录后死机,关机时死机的解决方法 更新内核并安装 Nvidia 显卡驱动可解决. 在内核更新为 4.15.18,Nvidia 显卡驱动为 390 时,问题解决. 使用 LiveCD 启动,然后 mou ...
- 宋宝华:Docker 最初的2小时(Docker从入门到入门)【转】
最初的2小时,你会爱上Docker,对原理和使用流程有个最基本的理解,避免满世界无头苍蝇式找资料.本人反对暴风骤雨式多管齐下狂轰滥炸的学习方式,提倡迭代学习法,就是先知道怎么玩,有个感性认识,再深入学 ...
- linux 下为qtcreator 添加排版工具
1. 下载astyle. http://sourceforge.net/projects/astyle 这里可以下载最新版本, 目前是3.1 下载文件astyle_3.1_linux.tar.g ...
- fine安装教程
先关掉lmgrd 相关的两个进程 -关闭当前license server 1. Login root 2. 执行 FineTurbo11.1_linux 文件夹内 ./install_numeca 3 ...
- [重要更新][Quartus II][14.1正式版]
[Quartus II][14.1正式版] ----14.1版本最大的变化就是增加了2大系列的器件库: MAX 10和Arria 10.这2大系列据Altera中国区代理 骏龙科技的人说,就是为了和X ...
- 真实机下 ubuntu 18.04 安装GPU +CUDA+cuDNN 以及其版本选择(亲测非常实用)【转】
本文转载自:https://blog.csdn.net/u010801439/article/details/80483036 ubuntu 18.04 安装GPU +CUDA+cuDNN : 目前, ...
- ubuntu18.04下搭建深度学习环境anaconda2+ cuda9.0+cudnn7.0.5+tensorflow1.7【原创】【学习笔记】
PC:ubuntu18.04.i5.七彩虹GTX1060显卡.固态硬盘.机械硬盘 作者:庄泽彬(欢迎转载,请注明作者) 说明:记录在ubuntu18.04环境下搭建深度学习的环境,之前安装了cuda9 ...
随机推荐
- C#异步延迟Task.Delay
一. 1.Task.Delay实质是创建一个任务,再任务中开启一个定时间,然后延时指定的时间2.Task.Delay不和await一起使用情况,当代码遇到Task.Delay一句时,创建了了一个新的任 ...
- 【AGC】增长服务1-远程配置示例
[AGC]增长服务1-远程配置示例 前言:上一次笔者给大家带来了AGC领域的性能管理服务的学习.这次我们再继续深化学习AGC的相关知识.在文章开始之前,再给读者简单介绍一下AGC,以免第一次来的读 ...
- 结束语句之 continue
C 语言自学之 continue Dome1:计算1到20之间不能被3整除的数字之和. 运算结果为: sum=147 1 #include<stdio.h> 2 ...
- 前端监控系列1| 字节的前端监控SDK是怎样设计的
作者:彭莉,火山引擎 APM 研发工程师,2020年加入字节,负责前端监控 SDK 的开发维护.平台数据消费的探索和落地. 摘要 字节内部应用环境多样( Web 应用.小程序.Electron 应用. ...
- Spring源码 21 Bean生命周期
参考源 https://www.bilibili.com/video/BV1tR4y1F75R?spm_id_from=333.337.search-card.all.click https://ww ...
- 使用three.js(webgl)搭建智慧楼宇、设备检测、数字孪生——第十三课
老子云:有道无术,术尚可求,有术无道,止于术. 咱开篇引用老子的话术,也没其它意思,只是最近学习中忽有感悟,索性就写了上来. 这句话用现代辩证思维理解,这里的"道" 大抵是指方法论 ...
- Python逆向爬虫之pyquery,非常详细
系列目录 Python逆向爬虫之pyquery pyquery是一个类似jquery的python库,它实现能够在xml文档中进行jQuery查询,pyquery使用lxml解析器进行快速在xml和h ...
- Rust实战系列-基本语法
本文是<Rust in action>学习总结系列的第二部分,更多内容请看已发布文章: 一.Rust实战系列-Rust介绍 " 主要介绍 Rust 的语法.基本类型和数据结构,通 ...
- C++11实现的数据库连接池
它什么是? 数据库连接池负责分配.管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个:类似的还有线程池. 为什么要用? 一个数据库连接对象均对应一个物理数据库连接, ...
- CCF NOI Online 2021 提高组 T2 积木小赛 (子序列自动机+后缀自动机,O(n^2))
题面 Alice 和 Bob 最近热衷于玩一个游戏--积木小赛. Alice 和 Bob 初始时各有 n 块积木从左至右排成一排,每块积木都被标上了一个英文小写字母. Alice 可以从自己的积木中丢 ...