面试题、例题、知识点 汇总-程序员宅基地

技术标签: 运维  shell  开发工具  

centos 7 卸载 mariadb 的正确命令
列出所有被安装的rpm package rpm -qa | grep mariadb
卸载 rpm -e mariadb-libs-5.5.37-1.el7_0.x86_64
错误:依赖检测失败:
libmysqlclient.so.18()(64bit) 被 (已安裝) postfix-2:2.10.1-6.el7.x86_64 需要
强制卸载,因为没有--nodeps rpm -e --nodeps mariadb-libs-5.5.37-1.el7_0.x86_64
rpm -q tree &> /dev/null || yum -q -y install vsftpd 这是一键安装脚本。
RAID-10的工作原理
RAID10结合RAID1和RAID0,先镜像,再条带化;
特点: 磁盘数:最低4个,2n个,n大于等于2;
优点:读性能很高,写性能比较好,数据安全性好,允许同时有N个磁盘失效;
缺点:利用率只有50%,开销大;
可用空间:N*min(S1,S2,...其中最小空间)/2;
有容错能力:每组镜像最多只能坏一块;
适用领域:多用于要求高可用性和高安全性的数据库应用;
RAID-01:先分成两组做成RAID-0,再把组成的RAID-0做成RAID-1;不符合常用方法,每一组有一块坏的硬盘可能性大;
RAID-50的工作原理
是RAID5和RAID0的结合,先实现RAID5,再条带化;(先做RAID-5在做RAID-0,最少6块盘,每组允许坏1块盘,空间利用率灵活)、RAID7(某家公司的私有技术,实际是文件服务器)
特点:磁盘数:最低6个;
优点:比RAID5有更好的读性能,比相同容量的RAID5重建时间更短,可以容许N个磁盘同时失效;
缺点:设计复杂,比较难实现;同一个RAID5组内的两个磁盘失效会导致整个阵列失效;
适用领域:大型数据库服务器、应用服务器、文件服务器等应用;
重启linux网络的时候出现 this device is not active的解决办法
1.service NetworkManager stop
2.chkconfig NetworkManager off
3./etc/init.d/inetwork restart
进入救援模式的几种方法

centos7最小化安装,在默认情况下,会出现如下界面:
Install centos 7
Test  this  media  &  install  centos 7
Troubleshooting
将鼠标置于第一项,按tab键,会弹出:
vlinuz  initrd=initrd.ing  inst.stage2=hd:LABEL=centos\x207\x28x86_64 quiet
此处输入一个参数即可进入救援模式,或者  输入rescue 加参数 也行
鼠标置于Troubleshooting,按tab键,会弹出:
vlinuz  initrd=initrd.ing  inst.stage2=hd:LABEL=centos\x207\x28x86_64 rescue quiet
或者:鼠标置于Install centos 7 按esc键,会出现
boot:此时输入“rescue”  也能进入救援模式

shell脚本常见面试题

1 Shell脚本是什么、它是必需的吗?
答:一个Shell脚本是一个文本文件,包含一个或多个命令。作为系统管理员,我们经常需要使用多个命令来完成一项任务,我们可以添加这些所有命令在一个文本文件(Shell脚本)来完成这些日常工作任务。

2、什么是默认登录shell,如何改变指定用户的登录shell
答:在Linux操作系统,“/bin/bash”是默认登录shell,是在创建用户时分配的。使用chsh命令可以改变默认的shell。示例如下所示:
#chsh <用户名> -s <新shell>
#chsh linuxtechi -s /bin/sh

3、可以在shell脚本中使用哪些类型的变量?
答:在shell脚本,我们可以使用两种类型的变量:
系统定义变量
用户定义变量
系统变量是由系统系统自己创建的。这些变量通常由大写字母组成,可以通过“set”命令查看。

用户变量由系统用户来生成和定义,变量的值可以通过命令“echo $<变量名>”查看。

4、如何将标准输出和错误输出同时重定向到同一位置?
答:有两种方法:
A、2>&1 (如# ls /usr/share/doc > out.txt 2>&1 )
B、 &> (如# ls /usr/share/doc &> out.txt )

5、 shell脚本中“if”语法如何嵌套?
答:基础语法:
if [ 条件 ]
then
命令1
命令2
…..
else
if [ 条件 ]
then
命令1
命令2
….
else
命令1
命令2
…..
fi
fi

6、shell脚本中“$?”标记的用途是什么?
答:在写一个shell脚本时,如果你想要检查前一命令是否执行成功,在if条件中使用“$?”可以来检查前一命令的结束状态。简单的例子如下:
root@localhost:~# ls /usr/bin/shar
/usr/bin/shar
root@localhost:~# echo $?
0 如果结束状态是0,说明前一个命令执行成功。
root@localhost:~# ls /usr/bin/share
ls: cannot access /usr/bin/share: No such file or directory
root@localhost:~# echo $?
2 如果结束状态不是0,说明命令执行失败。

7、在shell脚本中如何比较两个数字 ?
答:在if-then中使用测试命令( -gt 等)来比较两个数字,例子如下:

#!/bin/bash
x=10
y=20
if [ $x -gt $y ]
then
echo “x is greater than y”
else
echo “y is greater than x”
fi

8、shell脚本中break命令的作用 ?
答:break命令一个简单的用途是退出执行中的循环。我们可以在while和until循环中使用break命令跳出循环。
9、 shell脚本中continue命令的作用 ?
答:continue命令不同于break命令,它只跳出当前循环的迭代,而不是整个循环。continue命令很多时候是很有用的,例如错误发生,但我们依然希望继续执行大循环的时候。

10、 告诉我shell脚本中Case语句的语法 ?
case 变量 in
值1)
命令1
命令2
…..
最后命令
!!
值2)
命令1
命令2
……
最后命令
;;
esac

11、shell脚本中while循环语法 ?
答:如同for循环,while循环只要条件成立就重复它的命令块。不同于for循环,while循环会不断迭代,直到它的条件不为真。基础语法:
while [ 条件 ]
do
命令…
done

12、 如何使脚本可执行 ?
答:使用chmod命令来使脚本可执行。例子如下:

chmod a+x myscript.sh

13、“#!/bin/bash”的作用 ?
答:#!/bin/bash是shell脚本的第一行,称为释伴(shebang)行。这里#符号叫做hash,而! 叫做 bang。它的意思是命令通过 /bin/bash 来执行。

14、 shell脚本中for循环语法 ?
答:for 循环的基础语法:
for 变量 in 循环列表
do
命令1
命令2
….
最后命令
done

15、 如何调试shell脚本 ?
答:使用'-x'参数(sh -x myscript.sh)可以调试shell脚本。另一个种方法是使用‘-nv’参数( sh -nv myscript.sh)。

16、shell脚本如何比较字符串?
答:test命令可以用来比较字符串。测试命令会通过比较字符串中的每一个字符来比较。

17、Bourne shell(bash) 中有哪些特殊的变量 ?
答:下面的表列出了Bourne shell为命令行设置的特殊变量。
内建变量 解释
$0 命令行中的脚本名字
$1 第一个命令行参数
$2 第二个命令行参数
….. …….
$9 第九个命令行参数
$# 命令行参数的数量
$* 所有命令行参数,以空格隔开

18、 在shell脚本中,如何测试文件 ?
答:test命令可以用来测试文件。基础用法如下表格:
Test 用法
-d 文件名 如果文件存在并且是目录,返回true
-e 文件名 如果文件存在,返回true
-f 文件名 如果文件存在并且是普通文件,返回true
-r 文件名 如果文件存在并可读,返回true
-s 文件名 如果文件存在并且不为空,返回true
-w 文件名 如果文件存在并可写,返回true
-x 文件名 如果文件存在并可执行,返回true

19、在shell脚本中,如何写入注释 ?
答:注释可以用来描述一个脚本可以做什么和它是如何工作的。每一行注释以#开头。例子如下:
#!/bin/bash
#This is a command
echo “I am logged in as $USER”

20、如何让 shell 就脚本得到来自终端的输入?
答:read命令可以读取来自终端(使用键盘)的数据。read命令得到用户的输入并置于你给出的变量中。例子如下:
#vi /tmp/test.sh
#!/bin/bash
echo ‘Please enter your name’
read name
echo “My Name is $name”
#./test.sh
Please enter your name
LinuxTechi
My Name is LinuxTechi

21、如何取消变量或取消变量赋值 ?
答:“unset”命令用于取消变量或取消变量赋值。语法如下所示:
#unset <变量名>

22、 如何执行算术运算 ?
答:有两种方法来执行算术运算:
1.使用expr命令
#expr 5 + 2
2.用一个美元符号和方括号($[ 表达式 ])例如:
test=$[16 + 4] ; test=$[16 + 4]

23、do-while语句的基本格式 ?
答:do-while语句类似于while语句,但检查条件语句之前先执行命令(LCTT 译注:意即至少执行一次。)。下面是用do-while语句的语法
do
{
命令
} while (条件)

24、在shell脚本如何定义函数呢 ?
答:函数是拥有名字的代码块。当我们定义代码块,我们就可以在我们的脚本调用函数名字,该块就会被执行。示例如下所示:
$ diskusage () { df -h ; }
译注:下面是我给的shell函数语法,原文没有
[ function ] 函数名 [()]
{
命令;
[return int;]
}

centos6、7上禁用防火墙、启动at任务、时间同步

centos6 
service   atd   start    这次立即启动
chkconfig   atd   on    下次开机启动
service   iptables   stop   这次立即停止防火墙
chkconfig   iptables   off    下次开机时也不要启动

centos7
systemctl   start   atd.service     这次立即启动
systemctl   enable   atd.service    下次开机启动
systemctl   stop   firewalld    这次已经启动,立即停止防火墙
systemctl   disable   firewalld    这次运行时关闭,下次开机时也不要启动

centos6、7都要做的一步:
时间同步:crontab   -e
计划任务:*/30  *  *  *  *  /usr/bin/ntpdate   172.20.0.1  &>  /dev/null

date命令:系统时间
date [OPTION]... [+FORMAT]:显示日期时间;
date [MMDDhhmm[[CC]YY][.ss]]:设定日期时间;
FORMAT:格式说明
%F:日期,显示为数字,格式为:2016-03-02;
%D:显示英制格式,月日年,显示格式为:03/02/16;
%T:时间,显示为数字,格式为:15:52:16;
%Y:年份,只显示完整年份数字(4位数字),显示格式为:2016;
%y:显示年份的后两位,显示格式为:16;
%m:月份,只显示数字,显示格式为:03;
%d:日期,只显示数字,显示格式为:02;
%H:小时,只显示数字,显示格式为(00..23):15;
%k:小时,显示格式为(0..23);
%I:小时,格式为(01..12);
%l:小时,显示格式为(1..12);
%h:显示月份,显示格式为:3月;
%M:分钟,只显示数字,显示格式为:52;
%S:秒钟,只显示数字,显示格式为:16;
%a:缩写星期;
%A:完整星期;
%b:缩写月份;
%B:完整月份;
%r:显示格式为(11:11:04 PM);
%R:同%H%M,格式为(23:37)
%s:从1970年1月1日至此刻所经历的秒数;timestamp;显示格式为:1456905397;

文件系统的挂载:把额外的文件系统与当前根文件系统上的某个目录建立关联关系,并以之作为新的文件的访问入口的操作过程,就叫做挂载(mount),拆除此关联关系的过程,即为卸载(umount);                  

破解centos7,centos6和centos5 的root口令
一、centos5,6破解root口令,前提:待在电脑前,重启电脑
1、在滚动条出现时,按esc键,出现菜单界面,按“ a ”键,输入“ 1 ”模式,(注意:quit后要空一格输入),此时效果为:无需任何操作即可进入root用户的命令行,
2、在命令行输入“ passwd ”,即可更改新口令,输入2次,

二、centos7破解root口令,
1、首先在菜单界面按【e】键,进入启动文件界面后
2、按【↓】拉到底部
在 "LANG=zh_cn.UTF-8" 同行后面加上“init=/bin/sh”
然后按【Ctrl+X】进入“单用户模式”
3、输入【ls】,回车,再输入【mount –o remount ,rw / 】,回车 (注意空格)
4、输入【passwd】(注意:密码不能少于8位),重复输入两次密码
5、输入【touch /.autorelabel】,回车,再输入【exec /sbin/init】回车
以便重启系统。
安装虚拟机时修改网卡名称为eth0的方法:(按tab键即会弹出)
面试题、例题、知识点 汇总
[root@centos7 network-scripts]#vi ifcfg-eth0
BOOTPROTO=none
DEVICE=eth0
ONBOOT=yes
IPADDR=192.168.141.200
DNS1=192.168.0.1
DNS2=114.114.114.114 #仅主机不需加网关!
[root@centos7 network-scripts]#vi ifcfg-eth1
BOOTPROTO=none
DEVICE=eth1
ONBOOT=yes
IPADDR=172.18.9.200
GATEWAY=172.18.0.1 #加上网关即可ping通外网!
DNS1=172.18.0.1
一、修改命令提示符:
[root@200 ~]#cd /etc/profile.d
[root@200 profile.d]#vim env.sh
PS1="[\e[1;32m][\u@\h \W]\$[\e[0m]" #命令提示符为淡绿色!不用source生效即可永久保存!

二、系统添加一块新硬盘不用关闭系统即可加载硬盘信息的操作:
[root@centos7 ~]#ls /sys/class/scsi_host
host0 host1 host2
[root@centos7 ~]#echo "- - -" > /sys/class/scsi_host/host0/scan

三、设置命令别名(简化操作,节省时间):
[root@centos7 ~]#ls -a
. .. anaconda-ks.cfg .bash_history .bash_logout .bash_profile .bashrc .cshrc .tcshrc
[root@centos7 ~]#vi .bashrc
alias cdnet='cd /etc/sysconfig/network-scripts/'
alias xy='systemctl restart network'
alias scan='echo "- - -" > /sys/class/scsi_host/host0/scan'
[root@centos7 ~]#source .bashrc #source 使其生效!

四、创建本地光盘yum源:
yum install gcc gcc-c++ glibc glibc-devel pcre pcre-devel openssl openssl-devel systemd-devel net-tools vim iotop bc zip unzip zlib-devel lrzsz tree screen lsof tcpdump wget ntpdate
1、挂载本地光盘;mount /dev/sr0 /mnt
[root@centos6 ~]# mount /dev/sr0 /mnt
mount: block device /dev/sr0 is write-protected, mounting read-only
2、清空/etc/yum.repos.d/的自带文件
[root@centos6 ~]# cd /etc/yum.repos.d/
[root@centos6 yum.repos.d]# ls
CentOS-Base.repo CentOS-Debuginfo.repo CentOS-fasttrack.repo CentOS-Media.repo CentOS-Vault.repo
[root@centos6 yum.repos.d]# rm -f *
3、编辑base.repo文件
[root@centos6 ~]# vim /etc/yum.repos.d/base.repo
[base]
name=file
baseurl=file:///mnt
gpgcheck=0

#[epel]
#name=epel
#baseurl=https://mirrors.aliyun.com/epel/6/x86_64/
#gpgcheck=0 因为更多的在用本地光盘yum源,所以把aliyun源给禁用,要注释掉,避免冲突
4、清除yum缓存,重读repolist列表:
[root@centos7 yum.repos.d]# yum clean all
Loaded plugins: fastestmirror, langpacks
Cleaning repos: base
Cleaning up list of fastest mirrors
[root@centos7 yum.repos.d]# yum repolist
Loaded plugins: fastestmirror, langpacks
Determining fastest mirrors
base | 3.6 kB 00:00:00
(1/2): base/group_gz | 166 kB 00:00:00
(2/2): base/primary_db | 6.0 MB 00:00:00
repo id repo name status
base file 10,019
repolist: 10,019
5、使用本地yum源安装目标软件:yum install xxxx

当出现如下问题时:#yum install -y redis
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
No package redis available.
Error: Nothing to do
解决办法:
#wget http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
#rpm -ivh epel-release-6-8.noarch.rpm
#yum -y install redis 即可安装成功!

绝对路径:以正斜杆开头,完整的文件的位置路径,可用于任何想指定一个文件的时候。 相对路径:不以斜杠开头,指定相对于当前工作目录或某目录的位置。硬链接:ln 目标文件名 链接名,软连接: ln -s 目标文件名
软硬:{共性}:修改软硬链接文件,所有的文件都是同步修改的。
硬链接: 本质:同一个文件多个名字、链接数:有一个以上的链接,不可跨分区,只允许对文件创建链接,不依赖原始文件,删除硬链接文件的源文件,硬链接文件仍然存在,不占用空间,格式:ln 目标文件 链接名
软连接:本质: 一个文件对应快捷方式,是不同文件,链接数:只有一个链接,可以跨分区,可以对目录和文件夹进行链接,依赖于原始文件,删除源文件,软连接则指向一个空文件,它具有依赖性,占用磁盘空间,格式: ln -s 目标文件 源文件
自定义分区:
/dev/sda1 /boot 1G
/dev/sda2 / 50G
/dev/sda3 swap 2G
/dev/sda4 扩展分区
/dev/sad5 /data 10G

Centos7 重启网卡命令:systemctl restart network
Centos6 重启网卡命令:service network restart
设置主机和IP绑定信息:cat /etc/hosts
查看内存信息: cat /proc/meminfo
修改IP地址: vim /etc/sysconfig/network--scripts/ifcfg--ens33
su 与 su-的区别:
su:非交互式登录,在环境变量下不切换
su-:交互式登录(完全切换),当前目录改变为切换用户,在家目录,连同环境一同切换。
对/etc/目录,分别执行命令,实现以下功能
(1)按从大到小顺序显示文件列表 : ll -S /etc
(2)只显示隐藏文件 :ll -d /etc/.
(3)只显示目录 : ll -d /etc/
/
(4)按mtime时间显示文件列表 : ll -t /etc
(5)按atime时间显示文件列表 : ll -u /etc
正则表达式部分:
0-9: [0-9] 10-99: [1-9][0-9] 100-199:1[0-9][0-9] 200-249:2[0-4][0-9] 250-255:25[0-5]
过滤ifconfig命令结果中所有大于0且小于255的三位数
ifconfig | egrep -o "\<((1[0-9]{2}|2[0-4][0-9]|25[0-4]))"
取IPV4地址:ifconfig ens33| grep -Eo "([0-9]{1,3}.){3}[0-9]{1,3}" head -1
取分区利用率:df | grep " /dev/sd " | grep -o " [0-9]{1,3}%" | grep -o " [0-9]+ " | sort -nr | head - n1
取分区利用率:sed -rn ' s/^([^[:space:]]+).([0-9]+)%./\2/p'
用户:sed -rn ' s/^([^[:space:]]+).([0-9]+)%./\1/p'
查看版本型号: cut -d "." -f1 /etc/redhat-release |egrep -o "[0-9]+"
查看版本型号:grep -o " [0-9]+. " /etc/redhat-release | grep -o " [0-9]+ "
查看版本型号:sed -rn " s/.([0-9]+)../\1/p " /etc/redhat-release
匹配手机号码:egrep -o " 1[0-9]{10} " tel.txt
匹配email邮箱:egrep -o "([[:alnum:]]|_)+@[[:alnum:]]+.com$" mail.txt
取/etc/sysconfig/network-scripts/ifcfg-ens33基名,用两种方法实现。
A、basename /etc/sysconfig/network-scripts/ifcfg-ens33
B、echo /etc/sysconfig/network-scripts/ifcfg-ens33 | egrep -o "[^/]+$"
|grep -o ".[^/] 取基名 |egrep -o "[^/]+$" 取/下的基名
|egrep -o "[^/]+/?$" 取/前的目录名
|sed -r 's@(./)([^/]+)/?@\2@' 取基名
|sed -r 's@(.
/)([^/]+)/?@\1@' 取目录名
使用sed命令取IPV4地址:
1、|sed -n '2p' |sed -r 's/inet//' |sed -r 's/netmask.//' |tr -d " "
2、|sed -n '2p' sed -e 's/^.
inet//' -e 's/.//'
3、|sed -n -e '2s/^.
inet//' -e '2s/ .//p'
4、|sed -nr '2s@.
inet (.) .n.@\1@p'
5、|sed -nr '2s/[^0-9]+([0-9.]+).
/\1/p'
统计/var/log/httpd/access.log日志访问频繁前十的地址,并从大到小排序。
cat access.log |cut -d" " -f1 |sort |uniq -c |sort -nr|head -n10
例题:一块新硬盘插入linux主机后,怎样才能正常使用:
1、格式化分区用fdisk命令进行,2、制作文件系统用mkfs.xfs命令进行,3、挂载用mount命令进行,4、编辑配置文件“ /etc/fstab ”实现自动挂载。

搜狐面试题:echo " a b c " |read x y z ;echo x=$x y=$y z=$z
结果:x=  y=  z= 
echo " a b c " |{ read x y z ;echo x=$x y=$y z=$z;}
结果:x=a  y=b  z=c
echo "   a b c" | {read x y z ;echo x=$x  y=$y  z=$z;}
结果:x=a  y=b  z=c
echo "   a b c " | while read  x,y,z;do echo x=$x y=$y z=$z,done
结果:x=a  y=b  z=c
若cat > f1   --->abc  xx  yy  zz  234
cat  f1  |while  read  x y z  ;do  echo  x=$x  y=$y  z=$z;done
结果:x=a  y=b  z=c 
x=xx  y=yy  z=zz
x=2  y=3  z=4
新浪面试题:cp /etc/fstab /data/dir 问:他需要有最小权限是什么?

答:分三步:1、探究cp外部命令有啥权限,他至少必须要有x:执行权限。2、
/etc/fstab:/fstab 只要有读权限就可以了,前提是/etc要有x执行权限,/etc可以没有读权限,只要/etc有基本可执行权限进得去就可以。3、/data/dir:至少要有执行和写权限。
总结:命令的权限:1、cp:这是个程序,至少要有执行权限,2、要拷贝的文件:/etc/fstab:/fstab 至少要有读权限,而所在文件夹必须要有可执行权限,要不进不去,3、要拷贝的目标文件夹至少要有执行和写权限。
usermod [OPTION] login
-u UID: 新UID
-g GID: 新主组
-G GROUP1[,GROUP2,...[,GROUPN]]]:新附加组,原来的附加组将会被覆盖;若保留原有,则要同时使用-a选项
-s SHELL:新的默认SHELL
-c 'COMMENT':新的注释信息
-d HOME: 新家目录不会自动创建;若要创建新家目录并移动原家数据,同时使用-m选项
-l login_name: 新的名字
-L: lock指定用户,在/etc/shadow 密码栏的增加 !
-U: unlock指定用户,将 /etc/shadow 密码栏的 ! 拿掉
例题:创建下面的用户、组和组成员关系
名字为webs 的组
用户nginx 使用webs 作为附属组
用户varnish,也使用webs 作为附属组
用户mysql,不可交互登录系统,且不是webs 的成员, nginx, varnish, mysql密码都是magedu
[root@magedu ~]# groupadd webs
[root@magedu ~]# useradd -G webs nginx
[root@magedu ~]# useradd -G webs varnish
[root@magedu ~]# useradd -s /sbin/nologin mysql
[root@magedu ~]# echo "magedu"|passwd --stdin nginx
[root@magedu ~]# echo "magedu"|passwd --stdin varnish
[root@magedu ~]# echo "magedu"|passwd --stdin mtsql

编写显示系统信息的脚本:(要考虑到可更改性,可维护性)
[root@centos7 script35]# vim systeminfo.sh 
#!/bin/bash
#********************************************************************
#Author:                Xingxiaoyatongxue
#QQ:                    1098775809
#Date:                  2019-02-05
#FileName:             systeminfo.sh
#URL:                   http://www.magedu.com
#Description:          The test script
#Copyright (C):         2019 All rights reserved
#********************************************************************
COLOR="\e[1;31m"
COLOREND="\e[0m"                                                            
echo -e "my host name is $COLOR`hostname`$COLOREND"
echo -e "my Adress is $COLOR`ifconfig ens38|grep -Eo '([0-9]{1,3}\.){3}[0-9]{1,3}'|head -n1`$COLOREND"
echo -e "OS version is $COLOR`cat /etc/centos-release`$COLOREND"
echo -e "Kernel version is $COLOR`uname -r`$COLOREND"
echo -e "CPU type is $COLOR`lscpu |grep "Model name" |tr -s " " |cut -d: -f2`$COLOREND"
echo -e "Mem total is $COLOR`head -n1 /proc/meminfo|grep -o "[0-9].*"`$COLOREND"
echo -e "Disk is $COLOR`lsblk|grep -Eo "[0-9]+G" |head -1`$COLOREND"
[root@centos7 script35]# bash systeminfo.sh 
my host name is centos7.localdomain
my Adress is 192.168.141.130
OS version is CentOS Linux release 7.6.1810 (Core) 
Kernel version is 3.10.0-957.el7.x86_64
CPU type is  Intel(R) Core(TM) i5-5200U CPU @ 2.20GHz
Mem total is 2379348 kB
Disk is 200G
[ $ver  -eq  5  ]  &&  echo  ver  is  5  ||  echo  ver  is  not  5
释义:若  [ $ver  -eq  5   ]  为真,就执行   echo  ver  is  5  
若  [ $ver  -eq  5   ]  为假,就执行  echo  ver  is  not  5
cmd1  短路与&&  cmd2
若cmd1 真,执行cmd2  结果未知
若cmd1 假,不执行cmd2  结果为假
cmd1 短路或|| cmd2
若cmd1 真,不执行cmd2  结果为真
若cmd1 假,执行cmd2  结果未知

设置本地解析器/etc/hosts,在使用dns前检查
添加本机地址为172.18.119.74解析映射为magedu.com,172.18.0.1映射为server.com
[root@node1 ~]# vim /etc/hosts
添加内容:
172.18.119.74 magedu.com
172.18.0.1 server.com
进程管理部分:
buffer 缓冲区 多次write,合并成一次write
cache 缓存 从高速设备代替慢速
“ lsof -i ”:查看某个端口是哪个进程在使用, “ iotop ”:查看是哪个进程带来了大量的磁盘I/O,(查看哪个进程让磁盘I/O)特别繁忙。“ pid ”:每个进程系统都会分配一个数字。
网段数:2^(可变的网络ID), 划分子网数:2^(网ID借主ID), 主机数:2^主机ID位-2, 网络ID:IP与子网掩码,
1、tar的意思是Together ARchive(打包归档)。我们可以用来打包,也可以用来解压包,而且还支持打包后用各种格式压缩(gz、bz2、xz等)。
单个参数意义:
f: 归档file
v: verbose(注:详细),显示压缩过程的详细信息
t: list,显示归档的内容
x: extract,解压
c: compress,压缩
z: gzip格式压缩,后缀为.gz
j: bzip2格式压缩,后缀为.bz2
J: xz格式压缩,后缀为.xz
常用组合:
组合参数 意义 压缩文件后缀
cvf 原始tar包,不压缩 .tar
zcvf 先tar,后gzip压缩 tar.gz 、tgz
jcvf 先tar,后bzip2压缩 tar.bz2 、tbz2
Jcvf 先tar,后xz压缩 tar.xz、txz
xvf 解压所有格式,通用解压命令 -
(1)、 简述raid0、raid1、raid5三种工作模式的工作原理及特点
(2)描述linux系统下创建软RAID5的命令和步骤
(1)、RAID0
面试题、例题、知识点 汇总
RAID 0亦称为带区集。它将两个以上的磁盘并联起来,成为一个大容量的磁盘。在存放数据时,分段后分散存储在这些磁盘中,因为读写时都可以并行处理,所以在所有的级别中,RAID 0的速度是最快的。但是RAID 0既没有冗余功能,也不具备容错能力,如果一个磁盘(物理)损坏,所有数据都会丢失。
RAID1
面试题、例题、知识点 汇总
两组以上的N个磁盘相互作镜像,在一些多线程操作系统中能有很好的读取速度,理论上读取速度等于硬盘数量的倍数,与RAID 0相同。另外写入速度有微小的降低。只要一个磁盘正常即可维持运作,可靠性最高。其原理为在主硬盘上存放数据的同时也在镜像硬盘上写一样的数据。当主硬盘(物理)损坏时,镜像硬盘则代替主硬盘的工作。因为有镜像硬盘做数据备份,所以RAID 1的数据安全性在所有的RAID级别上来说是最好的。但无论用多少磁盘做RAID 1,仅算一个磁盘的容量,是所有RAID中磁盘利用率最低的一个级别。
如果用两个不同大小的磁盘建RAID 1,可用空间为较小的那个磁盘,较大的磁盘多出来的空间也可以分区成一个区来使用,不会造成浪费。
RAID5
面试题、例题、知识点 汇总
RAID Level 5是一种储存性能、数据安全和存储成本兼顾的存储解决方案。它使用的是Disk Striping(硬盘分区)技术。RAID 5至少需要三块硬盘,RAID 5不是对存储的数据进行备份,而是把数据和相对应的奇偶校验信息存储到组成RAID5的各个磁盘上,并且奇偶校验信息和相对应的数据分别存储于不同的磁盘上。当RAID5的一个磁盘数据发生损坏后,可以利用剩下的数据和相应的奇偶校验信息去恢复被损坏的数据。RAID 5可以理解为是RAID 0和RAID 1的折衷方案。RAID 5可以为系统提供数据安全保障,但保障程度要比镜像低而磁盘空间利用率要比镜像高。RAID 5具有和RAID 0相近似的数据读取速度,只是因为多了一个奇偶校验信息,写入数据的速度相对单独写入一块硬盘的速度略慢,若使用“回写缓存”可以让性能改善不少。同时由于多个数据对应一个奇偶校验信息,RAID 5的磁盘空间利用率要比RAID 1高,便宜。

(2)、新增加一块硬盘sdb,200G
划分4个分区,分别为20G
fdisk /dev/sdb,具体过程不贴了,最后的效果是这样:
Device Boot Start End Blocks Id System
/dev/sdb1 2048 41945087 20971520 83 Linux
/dev/sdb2 41945088 83888127 20971520 83 Linux
/dev/sdb3 83888128 125831167 20971520 83 Linux
/dev/sdb4 125831168 419430399 146799616 5 Extended
/dev/sdb5 125833216 167776255 20971520 83 Linux

sdb1,sdb2,sdb3,sdb5各20G

#创建md0的软raid5阵列
mdadm -C /dev/md0 -a yes -l 5 -n 3 -x 1 /dev/sdb1 /dev/sdb2 /dev/sdb3 /dev/sdb5
#格式化
mkfs.xfs /dev/md0
#挂载
mkdir /mnt/raid5
mount /dev/md0 /mnt/raid5
每天的2 点和12 点整,将/etc 备份至/testdir/backup目录中,保存的文件名称格式为etcbak-yyyy-mm-dd-HH.tar.xz
crontab -e
0 2,12 * /usr/bin/tar -Jcvf etcbak-data +%F-%H.tar.xz /etc
列出三个私有地址网络,用 CIDR 表示,并将 10.100.208.0/20 网络划分成 8 个子网,写出最大子网络的 IP 范围。
三个私有地址网络:
10.0.0.0/8~10.255.255.255/8
11.172.16.0.0/16 ~ 172.31.255.255/16 16个地址用于内部
192.168.0.0/24 ~ 192.168.255.255/24 256个地址用于内部
划分后的最大子网络的IP范围为: 10.100.222.1-10.100.223.255
给CentOS6 eth0 网 卡 , 分 别 设 置 三 个 IP 地 址 :10.0.0.200/8,172.18.0.200/16,192.168.0.200/24,请写出步骤
临时配置:
ifconfig eth0:0 10.0.0.200 netmask 255.0.0.0 up
ifconfig eth0:1 172.18.0.200 netmask 255.255.255.0 up
ifconfig eth0:2 192.168.0.200 netmask 255.255.255.0 up
永久生效:
vim /etc/sysconfig/network-scripts/ifcfg-eth0:0
DEVICE=eth0:0
ONBOOT=yes
BOOTPROTO=static
IPADDR=10.0.0.200
PREFIX=8
vim /etc/sysconfig/network-scripts/ifcfg-eth0:1
DEVICE=eth0:1
ONBOOT=yes
BOOTPROTO=static
IPADDR=172.18.0.200
PREFIX=16
vim /etc/sysconfig/network-scripts/ifcfg-eth0:2
DEVICE=eth0:2
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.0.200
PREFIX=24

在 CentOS6 中,误删除/boot 下所有文件后无法启动,写出恢复的详细步骤。
救援模式进入系统
chroot /mnt/sysimage
mount /dev/sr0 /mnt
rpm -ivh /mnt/Packages/kernel-2.6.32-696.el6.x86_64.rpm --force
grub-install /dev/sda
手写/boot/grub/grub.conf
default =0
timeout=5
root (hd0,0)
title CentOS 6.9
kernel /vmlinuz-2.6.32-696.el6.x86_64 root=/dev/sda2
init initramfs-2.6.32-696.el6.x86_64.img
退出重启

快速查找/root目录中大于2M的文本,并将文件中的magedu,换成www.magedu.com
find /root --size +2M -type f -exec sed -i 's/magedu/www.magedu.com/g' {} \;

若系统检测到***用root用户登录了系统,如何将***所登录的终端杀死,并立即对root用户修改密码。
root用户执行who查看登录的终端信息(TERMINAL)
ps -t |grep TERMINAL查看终端的进程号
kill -9 PID按终端的进程号号杀掉异常的终端进程
echo xxxx |passwd --stdin rootxxxx为新的密码

简述CentOS6开机启动流程
post–mbr grub 1stage–stage1.5–stage 2 /boot/grub—/boot/grub/grub.conf —kernel /vmlinuz.XXX root=— /boot/initramfs |/boot/initrd.XX.img —/sbin/init –/etc/inittab —/etc/rc.d/rc.sysinit(/etc/fstab) —/etc/rc5.d/K,S —/etc/rc.d/rc.local –login
POST加电自检
引导加载器bootloader
bootloader的引导程序GRUB的一部分放在MBR中
引导加载器程序GRUB
grub 1.5阶段和2阶段
加载内核模块
先加载vmliuz内核,然后加载initramfs文件initd.img(里面都是预加载用到的的模块)
运行init,挂载硬盘和启动程序
运行init程序,init去读inittab启动模式,读取/etc/rc.d/rc.sysinit(里面有硬盘的挂载),找到相应模式对应的程序启动脚本,比如在5模式,去/etc/rc5.d里按顺序启动程序
sbin/init –/etc/inittab —/etc/rc.d/rc.sysinit(/etc/fstab) —/etc/rc5.d —/etc/rc.d/rc.local 
登录

Linux现连接一个新的存储(如/dev/sdb,容量为10T)一人应用程序需要在/data目录使用此存储的100G的存储空间,若做成LVM需要哪些步骤,请描述
#让服务器识别硬盘
echo '- - -' /sys/class/scsi_host/host2/scan
#lsblk可以看到硬盘
lsblk
lvm创建过程:
pvcreate /dev/sdb
vgcreate vg1 /dev/sdb
lvcreate -L 100G -n lv1 vg1
mkfs.ext4 /dev/vg1/lv1
mkdir /data
mount /dev/vg1/lv1 /data
如果要加到fstab里设成开机启动:
echo "/dev/vg1/lv1 /data ext4 defaults 0 0" >> /etc/fstab

修改上述网站的http 端口为9527 ,并为之增加SELinux 端口标签。
sed -i.bak 's/Listen\ 80/Listen\ 9527/g' /etc/httpd/conf/httpd.conf  # 修改端口为9527
semanage port -l| grep http_port_t  # SELinux策略里没有9527端口
semanage port -a -t http_port_t -p tcp 9527  # 添加9527端口
semanage port -l| grep http_port_t  # 再次查看有了
查看crond进程打开了哪些文件
lsof -c crond|grep REG|tr -s " " |cut -d" " -f9

请完成以下操作
1)查询file.txt文件里第一列数据数值之和(字段以&符号分隔)
2)查询Hie.txt第7行之前添加一行,内容为”#注释”
3)打印出file.txt文件第6到第10行
awk -F'&' 'NR==1 {for (i=1;i<=NF;i++){sum+=$i};print sum}' file.txt
sed -i.bak '7i/#注释' Hie.txt
awk 'NR >=6 && NR<=10' file.txt

编写脚本,利用变量RANDOM生成10个随机数字,输出这10个数字,并显示其中的最大值和最小值,用两种方法实现
1、for i in seq 0 9;do
array[$i]=$RANDOM
echo ${array[$i]}
done
echo "the min number:"
echo ${array[]}|awk -v RS=' ' -v ORS="\n" '{print $0}'|sort -n|grep -v '^$'|head -1
echo "the max number:"
echo ${array[
]}|awk -v RS=' ' -v ORS="\n" '{print $0}'|sort -n|grep -v '^$'|tail -1
2、for i in seq 10;do
j=$RANDOM
echo $j
if [ $i -eq 1 ];then
max=$j
min=$j
else
if [ $j -ge $max ];then
max=$j
fi
if [ $j -le $min ];then
min=$j
fi
fi
done

echo max number is $max
echo min number is $min

vim
复制/etc/ssh/sshd_config 到/tmp/中并更名为sshd_config.bak。将/tmp/sshd_config.bak文件中所有以非#号开头与包含空白字符的行保存至/tmp/sshd_config中。
cp /etc/ssh/sshd_config /tmp/sshd_config.bak
cat /tmp/sshd_config.bak |grep "^[^#]"|grep "^[^[:space:]*$]"
导航命令:% 括号匹配    插入命令: i 在当前位置生前插入、I 在当前行首插入、a 在当前位置后插入、A 在当前行尾插入、o 在当前行之后插入一行、O 在当前行之前插入一行
查找命令:/text  查找text,按n健查找下一个,按N健查找前一个。  ?text  查找text,反向查找,按n健查找下一个,按N健查找前一个。
替换命令:ra 将当前字符替换为a,当期字符即光标所在字符。
s/old/new/ 用old替换new,替换当前行的第一个匹配
%s/old/new/ 用old替换new,替换所有行的第一个匹配
移动命令:^ 移动到本行第一个非空白字符上。  0(数字0)移动到本行第一个字符上,   <HOME> 移动到本行第一个字符。同0键。  $ 移动到行尾    gg 移动到文件头。 = [[        G(shift + g) 移动到文件尾。 = ]]
跳到指定行,冒号+行号,回车,比如跳到240行就是 :240回车。另一个方法是行号+G,比如230G跳到230行。
Ctrl + e 向下滚动一行      Ctrl + y 向上滚动一行      Ctrl + d 向下滚动半屏    Ctrl + u 向上滚动半屏    Ctrl + f 向下滚动一屏      Ctrl + b 向上滚动一屏
x 删除当前字符         3x 删除当前光标开始向后三个字符
X 删除当前字符的前一个字符。X=dh
dl 删除当前字符, dl=x           dh 删除前一个字符       dd 删除当前行    dj 删除上一行       dk 删除下一行       10d 删除当前行开始的10行。
D 删除当前字符至行尾。D=d$      d$ 删除当前字符之后的所有字符(本行)
1,10d 删除1-10行      11,$d 删除11行及以后所有的行
删除全文:光标放置文首,:.,$d
拷贝粘贴:ddp交换当前行和其下一行        xp交换当前字符和其后一个字符

MYSQL部分

A.并发控制
1.共享锁(shared lock,读锁):共享的,相互不阻塞的       2.排他锁(exclusive lock,写锁):排他的,一个写锁会阻塞其他的写锁和读锁
B.事务
1.事务ACID
* 原子性(atomicity)一个事务必须被视为一个不可分割的最小工作单元,整个事务中所有操作要么全部提交成功,要么全部失败回滚,对于一个事务来说,不可能只执行其中的一部分操作
* 一致性(consistency)数据库总是从一个一致性的状态转换到另外一个一致性的状态
* 隔离性(isolation)一个事务所做的修改在最终提交以前,对其他事务是不可见的
* 持久性(durability)一旦事务提交,则其所做的修改就会永久保存到数据库中
2.四种隔离级别
* READ UNCOMMITTED(未提交读),事务中的修改,即使没有提交,对其他事务也都是可见的,事务可以读取未提交的数据,也被称为脏读(Dirty Read),这个级别会导致很多问题
* READ COMMITTED(提交读),大多数数据库系统的默认隔离级别,一个事务开始时,只能“看见”已经提交的事务所做的修改,一个事务从开始直到提交之前,所做的任何修改对其他事务都是不可见的,也叫不可重复读(nonrepeatable read),有可能出现幻读(Phantom Read),指的是当某个事务在读取某个范围内的记录时,另外一个事务又在该范围内插入了新的记录,当之前的事务再次读取该范围的记录时,会产生幻行(Phantom Row)
* REPEATABLE READ(可重复读),通过InnoDB和XtraDB存储引擎,是MySQL的默认事务隔离级别
* SERIALIZABLE(可串行化)最高级别,通过强制事务串行执行,避免了幻读问题,会在读取的每一行数据上都加锁,可能导致大量的超时和锁争用的问题
3.死锁:指两个或多个事务在同一资源上相互占用,并请求锁定对方占用的资源,从而导致恶性循环的现象
4.事务日志:存储引擎在修改表的数据时只需要修改其内存拷贝,再把该修改行为记录到持久在硬盘上的事务日志中,而不用每次都将修改的数据本身持久到磁盘。事务日志持久以后,内存中被修改的数据在后台可以慢慢地刷回到磁盘,称为预写式日志(Write-Ahead Logging)

A.索引基础
1.索引可以包含一个或多个列的值,如果索引包含多个列,那么列的顺序也十分重要,因为MySQL只能高效地使用索引的最左前缀列
2.ORM工具能够产生符合逻辑的、合法的查询,除非只是生成非常基本的查询,否则它很难生成适合索引的查询
3.在MySQL中,索引是在存储引擎层而不是服务器层实现的,所以,并没有统一的索引标准:不同存储引擎的索引的工作方式并不一样,也不是所有的存储引擎都支持所有类型的索引
4.B-Tree意味着所有的值都是按顺序存储的,并且每一个叶子页到根的距离相同,能够加快访问数据的速度,从索引的根节点开始进行搜索,适用于全键值、键值范围或键前缀查找
B.索引的优点
1.三个优点:    * 索引大大减少了服务器需要扫描的数据量     * 索引可以帮助服务器避免排序和临时表     * 索引可以将随机I/O变为顺序I/O

查询执行路径
* 客户端发送一条查询给服务器   * 服务器先检查查询缓存,如果命中则立刻返回,否则进入下一阶段   * 服务器端进行SQL解析、预处理,再由优化器生成对应的执行计划   * MySQL根据优化器生成的执行计划,调用存储引擎的API来执行查询    * 将结果返回给客户端

B.视图
1.视图本身是一个虚拟表,不存放任何数据,返回的数据是MySQL从其他表中生成的
2.MySQL使用两种算法:合并算法(MERGE)和临时表算法(TEMPTABLE),会尽可能地使用合并算法
3.如果视图中包含GROUP BY、DISTINCT、任何聚合函数、UNION、子查询等,只要无法在原表记录和视图记录中建立一一映射的场景中,MySQL都将使用临时表算法来实现视图
4.可更新视图(updatable view)是指可以通过更新这个视图来更新视图涉及的相关表,CHECK OPTION表示任何通过视图更新的行,都必须符合视图本身的WHERE条件定义
5.在重构schema的时候可以使用视图,使得在修改视图底层表结构的时候,应用代码还可能继续不报错运行
6.MySQL中不支持物化视图(指将视图结果数据存放在一个可以查看的表中,并定期从原始表中刷新数据到这个表中)
7.不会保存视图定义的原始SQL语句
HTTP部分:
http协议常用的状态码
200: 成功,请求数据通过响应报文的entity-body部分发送;OK
301: 请求的URL指向的资源已经被删除;但在响应报文中通过首部Location指明源现在所处的新位置;Moved Permanently
302: 响应报文Location指明资源临时新位置 Moved Temporarily
304: 客户端发出了条件式请求,但服务器上的资源未曾发生改变,则通过响应此状态码通知客户端;Not Modified
401: 需要输入账号和密码认证方能访问资源;Unauthorized
403: 请求被禁止;Forbidden 404: 服务器无法找到客户端请求的资源;Not Found
500: 服务器内部错误;Internal Server Error
502: 代理服务器从后端服务器收到了一条伪响应,如无法连接到网关;Bad Gate
503: 服务不可用,临时服务器维护或过载,服务器无法处理请求
504: 网关超时

转载于:https://blog.51cto.com/14128387/2347763

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_33696822/article/details/93031998

智能推荐

一、基于JAVA的GB28181实现之SIP服务_java gb28181-程序员宅基地

文章浏览阅读2.8k次。GB28181定义了了 基于SIP架构的 视频监控互联规范,而对于多数私有协议实现的监控系统如果想接入SIP架构,就要借助网关,GB28181 规范了实现 SIP 监控域与非SIP 监控域互联。最近用JAVA的SIP协议写了一个GB28181平台的对接,并成功完成了海康、大华、中威等设备,更重要的是海康平台、公安一所平台的对接。因为行业内很少有JAVA方面的设备接入实现,希望本篇能够让JAVA在安防接入生态中发挥越来越大的作用。_java gb28181

深入理解操作系统原理之文件系统_磁带设备的主要用途是作为文件系统的后备,存放不常用的信息或用做系统间传送信息-程序员宅基地

文章浏览阅读3.1w次,点赞20次,收藏154次。一、概述操作系统对系统的软件资源(不论是应用软件和系统软件)的管理都以文件方式进行,承担这部分功能的操作系统称为文件系统。1、文件计算机系统对系统中软件资源:无论是程序或数据、系统软件或应用软件都以文件方式来管理。文件是存贮在某种介质上的(如磁盘、磁带等)并具有文件名的一组有序信息的集合。 文件名是由字符和数字组成的,例如MS-DOS中文件名由三部分组成,格式如下:[] [._磁带设备的主要用途是作为文件系统的后备,存放不常用的信息或用做系统间传送信息

ipadpro编写java代码_iPad Pro变生产力工具,你还缺个轻量级浏览器端代码编辑器...-程序员宅基地

文章浏览阅读6.5k次,点赞3次,收藏15次。本文经AI新媒体量子位(公众号ID:QbitAI)授权转载,转载请联系出处。注意,这篇文章就是在劝你买iPad Pro(手动狗头)~最近,苹果推出了新的iPad Pro,号称生产力工具。然而对程序员来说,不能写代码,就难以称得上生产力。虽然也有一些优秀的写代码App可供程序员使用,但本着能不花钱就不花钱的原则,还是可以去找一些开源软件。于是乎,现在有一款免费的浏览器端代码编辑器CodeJar,值得..._ipad写代码软件java

Elasticsearch学习--2 安装es、kibana、分词器_kibana查看索引分词器-程序员宅基地

文章浏览阅读418次。ES的安装下载地址https://www.elastic.co/cn/downloads/past-releases#elasticsearch示例下载的6.2.4版本慢的话,可以去华为云镜像下载,速度杠杠的https://mirrors.huaweicloud.com/elasticsearch/安装步骤前置环境:centos7、jdk1.81、保证有linux的非root用户es不能通过root用户启动,会报错;如果没有,新建用户,命令如下:新建用户:useradd xxxx _kibana查看索引分词器

1.Echarts设置图例数值和名称样式不同_echarts series name 怎么设置不同的值-程序员宅基地

文章浏览阅读223次。Echarts设置图例数值和名称样式不同_echarts series name 怎么设置不同的值

Nodejs项目部署到华为云服务器并上线超详细教程_nodejs服务器-程序员宅基地

文章浏览阅读674次,点赞26次,收藏7次。由于是第一次做Nodejs项目,发现网上关于Nodejs项目部署服务器的教程的质量参差不齐,对于初学者很不友好,看了一堆教程,最后还是不会,一头雾水,所以决定自己写一个详细教程,方便以后学习查看并记录。废话不多说,正文正式开始;_nodejs服务器

随便推点

DOM Based Cross Site Scripting or XSS of the Third Kind_the application may be vulnerable to dom-based dom-程序员宅基地

文章浏览阅读2k次。SummaryWe all know what Cross Site Scripting (XSS) is, right? It’s that vulnerability wherein one sends malicious data (typically HTML stuff with Javascript code in it) that is echoed back later by _the application may be vulnerable to dom-based dom data manipulation. data i

Vue3父子组件emit参数传递(解决Vue2this.$emit无效问题)_vue3 this.$emit-程序员宅基地

文章浏览阅读2.4w次,点赞13次,收藏24次。之前写了一篇Vue3路由跳转问题的博客,发现还是有很多同学对基本的使用改变还没有了解,于是我就顺道把常用的组件间传递的方式也写一下吧.......注意的是:1.Vue3中不在强调this的使用,可以说你在setup中完全不能用this,不像Vue2中把全部的内容都集成到this中。2.Vue3现在由于compositionAPI的方式可以说是弱化了Vuex的存在(当然Vuex现在可以用没什么变化)。3.如果您有Vue2的开发经历,用Vue3也不会特别陌生,会很快上手。目录1.解决._vue3 this.$emit

Unity与C++网络游戏开发实战:基于VR、AI与分布式架构 【1.3】_unity分布式仿真-程序员宅基地

文章浏览阅读610次,点赞18次,收藏9次。C#语言从本质上来说是在C++语言的基础上衍生出来,它是基于托管生成和指针管理的一种面向对象的编程语言。相比C++语言,它是一门更加简单、安全和易于学习的语言。它继承了C++语言强大的功能,摒弃了一些C++语言里比较复杂的使用方法,比如去掉了宏模板多重继承这些复杂的概念。C#语言借用了Visual Basic语言的可视化编程方法,基于.NET的开发库,开发了一套C#使用的可视化编程库,让C#语言,既拥有C++语言的强大能力,也更加人性化,让开发人员更加易于上手。C#语言具有以下特性:·语言简洁。_unity分布式仿真

[proxy:0:0@WORKSTATION-DEV] HYDU_sock_write (utils/sock/sock.c:256): write error (Broken pipe)_[proxy:0:1@58264c013f86] launch_procs (./pm/pmiser-程序员宅基地

文章浏览阅读2k次。[proxy:0:0@WORKSTATION-DEV] HYDU_sock_write (utils/sock/sock.c:256): write error (Broken pipe)_[proxy:0:1@58264c013f86] launch_procs (./pm/pmiserv/pmip_cb.c:648): unable t

前端性能测试工具Lighthouse_lighthouse accessibility-程序员宅基地

文章浏览阅读8k次,点赞2次,收藏23次。在前端开发中,对于自己开发的app或者web page性能的好坏,一直是让前端开发很在意的话题。我们需要专业的网站测试工具,让我们知道自己的网页还有哪些需要更为优化的方面,我自己尝试了一款工具:Lighthouse,感觉还不错,记录下来,也顺便分享给用得着的伙伴。Lighthouse分析web应用程序和web页面,收集关于开发人员最佳实践的现代性能指标和见解,让开发人员根据生成的评估页面,来进行网站优化和完善,提高用户体验..._lighthouse accessibility

推荐文章

热门文章

相关标签