Linux. shell编程习题集

1、编写hello world脚本


 
 
  1. #!/bin/bash
  2. # 编写hello world脚本
  3. echo "Hello World!"

2、通过位置变量创建 Linux 系统账户及密码


 
 
  1. #!/bin/bash
  2. # 通过位置变量创建 Linux 系统账户及密码
  3. #$1 是执行脚本的第一个参数,$2 是执行脚本的第二个参数
  4. useradd "$1"
  5. echo "$2" | passwd ‐‐stdin "$1"

3、备份日志


 
 
  1. #!/bin/bash
  2. # 每周 5 使用 tar 命令备份/var/log 下的所有日志文件
  3. # vim /root/logbak.sh
  4. # 编写备份脚本,备份后的文件名包含日期标签,防止后面的备份将前面的备份数据覆盖
  5. # 注意 date 命令需要使用反引号括起来,反引号在键盘<tab>键上面
  6. tar -czf log-`date +%Y%m%d`.tar.gz /var/ log
  7. # crontab ‐e #编写计划任务,执行备份脚本
  8. 00 03 * * 5 /root/logbak.sh

4、一键部署 LNMP(RPM 包版本)


 
 
  1. #!/bin/bash
  2. # 一键部署 LNMP(RPM 包版本)
  3. # 使用 yum 安装部署 LNMP,需要提前配置好 yum 源,否则该脚本会失败
  4. # 本脚本使用于 centos7.2 或 RHEL7.2
  5. yum ‐y install httpd
  6. yum ‐y install mariadb mariadb‐devel mariadb‐server
  7. yum ‐y install php php‐mysql
  8. systemctl start httpd mariadb
  9. systemctl enable httpd mariadb

5、监控内存和磁盘容量,小于给定值时报警


 
 
  1. #!/bin/bash
  2. # 实时监控本机内存和硬盘剩余空间,剩余内存小于500M、根分区剩余空间小于1000M时,发送报警邮件给root管理员
  3. # 提取根分区剩余空间
  4. disk_size=$(df / | awk '/\//{print $4}')
  5. # 提取内存剩余空间
  6. mem_size=$(free | awk '/Mem/{print $4}')
  7. while :
  8. do
  9. # 注意内存和磁盘提取的空间大小都是以 Kb 为单位
  10. if [ $disk_size -le 512000 -a $mem_size -le 1024000 ]
  11. then
  12. mail ‐s "Warning" root <<EOF
  13. Insufficient resources,资源不足
  14. EOF
  15. fi
  16. done

6、猜数字游戏


 
 
  1. #!/bin/bash
  2. # 脚本生成一个 100 以内的随机数,提示用户猜数字,根据用户的输入,提示用户猜对了,
  3. # 猜小了或猜大了,直至用户猜对脚本结束。
  4. # RANDOM 为系统自带的系统变量,值为 0‐32767的随机数
  5. # 使用取余算法将随机数变为 1‐100 的随机数
  6. num=$[RANDOM%100+1]
  7. echo "$num"
  8. # 使用 read 提示用户猜数字
  9. # 使用 if 判断用户猜数字的大小关系:‐eq(等于),‐ne(不等于),‐gt(大于),‐ge(大于等于),
  10. # ‐lt(小于),‐le(小于等于)
  11. while :
  12. do
  13. read -p "计算机生成了一个 1‐100 的随机数,你猜: " cai
  14. if [ $cai -eq $num ]
  15. then
  16. echo "恭喜,猜对了"
  17. exit
  18. elif [ $cai -gt $num ]
  19. then
  20. echo "Oops,猜大了"
  21. else
  22. echo "Oops,猜小了"
  23. fi
  24. done

7、检测本机当前用户是否为超级管理员,如果是管理员,则使用 yum 安装 vsftpd,如果不是,则提示您非管理员(使用字串对比版本)


 
 
  1. #!/bin/bash
  2. # 检测本机当前用户是否为超级管理员,如果是管理员,则使用 yum 安装 vsftpd,如果不
  3. # 是,则提示您非管理员(使用字串对比版本)
  4. if [ $USER == "root" ]
  5. then
  6. yum ‐y install vsftpd
  7. else
  8. echo "您不是管理员,没有权限安装软件"
  9. fi

8、检测本机当前用户是否为超级管理员,如果是管理员,则使用 yum 安装 vsftpd,如果不是,则提示您非管理员(使用 UID 数字对比版本)


 
 
  1. #!/bin/bash
  2. # 检测本机当前用户是否为超级管理员,如果是管理员,则使用 yum 安装 vsftpd,如果不
  3. # 是,则提示您非管理员(使用 UID 数字对比版本)
  4. if [ $UID -eq 0 ]; then
  5. yum ‐y install vsftpd
  6. else
  7. echo "您不是管理员,没有权限安装软件"
  8. fi

9、编写脚本:提示用户输入用户名和密码,脚本自动创建相应的账户及配置密码。如果用户不输入账户名,则提示必须输入账户名并退出脚本;如果用户不输入密码,则统一使用默认的 123456 作为默认密码。


 
 
  1. #!/bin/bash
  2. # 编写脚本:提示用户输入用户名和密码,脚本自动创建相应的账户及配置密码。如果用户
  3. # 不输入账户名,则提示必须输入账户名并退出脚本;如果用户不输入密码,则统一使用默
  4. # 认的 123456 作为默认密码。
  5. read -p "请输入用户名: " user
  6. #使用‐z 可以判断一个变量是否为空,如果为空,提示用户必须输入账户名,并退出脚本,退出码为 2
  7. #没有输入用户名脚本退出后,使用$?查看的返回码为 2
  8. if [ -z $user ]; then
  9. echo "您不需输入账户名"
  10. exit 2
  11. fi
  12. #使用 stty ‐echo 关闭 shell 的回显功能
  13. #使用 stty echo 打开 shell 的回显功能
  14. stty - echo
  15. read -p "请输入密码: " pass
  16. stty echo
  17. pass= ${pass:‐123456}
  18. useradd "$user"
  19. echo "$pass" | passwd ‐‐stdin "$user"

10、输入三个数并进行升序排序


 
 
  1. #!/bin/bash
  2. # 依次提示用户输入 3 个整数,脚本根据数字大小依次排序输出 3 个数字
  3. read -p "请输入一个整数:" num1
  4. read -p "请输入一个整数:" num2
  5. read -p "请输入一个整数:" num3
  6. # 不管谁大谁小,最后都打印 echo "$num1,$num2,$num3"
  7. # num1 中永远存最小的值,num2 中永远存中间值,num3 永远存最大值
  8. # 如果输入的不是这样的顺序,则改变数的存储顺序,如:可以将 num1 和 num2 的值对调
  9. tmp=0
  10. # 如果 num1 大于 num2,就把 num1 和和 num2 的值对调,确保 num1 变量中存的是最小值
  11. if [ $num1 -gt $num2 ]; then
  12. tmp= $num1
  13. num1= $num2
  14. num2= $tmp
  15. fi
  16. # 如果 num1 大于 num3,就把 num1 和 num3 对调,确保 num1 变量中存的是最小值
  17. if [ $num1 -gt $num3 ]; then
  18. tmp= $num1
  19. num1= $num3
  20. num3= $tmp
  21. fi
  22. # 如果 num2 大于 num3,就把 num2 和 num3 对标,确保 num2 变量中存的是小一点的值
  23. if [ $num2 -gt $num3 ]; then
  24. tmp= $num2
  25. num2= $num3
  26. num3= $tmp
  27. fi
  28. echo "排序后数据(从小到大)为:$num1,$num2,$num3"

11、石头、剪刀、布游戏


 
 
  1. #!/bin/bash
  2. # 编写脚本,实现人机<石头,剪刀,布>游戏
  3. game=(石头 剪刀 布)
  4. num=$[RANDOM%3]
  5. computer= ${game[$num]}
  6. # 通过随机数获取计算机的出拳
  7. # 出拳的可能性保存在一个数组中,game[0],game[1],game[2]分别是 3 中不同的可能
  8. echo "请根据下列提示选择您的出拳手势"
  9. echo "1.石头"
  10. echo "2.剪刀"
  11. echo "3.布"
  12. read -p "请选择 1‐3:" person
  13. case $person in
  14. 1)
  15. if [ $num -eq 0 ]
  16. then
  17. echo "平局"
  18. elif [ $num -eq 1 ]
  19. then
  20. echo "你赢"
  21. else
  22. echo "计算机赢"
  23. fi;;
  24. 2)
  25. if [ $num -eq 0 ]
  26. then
  27. echo "计算机赢"
  28. elif [ $num -eq 1 ]
  29. then
  30. echo "平局"
  31. else
  32. echo "你赢"
  33. fi;;
  34. 3)
  35. if [ $num -eq 0 ]
  36. then
  37. echo "你赢"
  38. elif [ $num -eq 1 ]
  39. then
  40. echo "计算机赢"
  41. else
  42. echo "平局"
  43. fi;;
  44. *)
  45. echo "必须输入 1‐3 的数字"
  46. esac

12、编写脚本测试 192.168.4.0/24 整个网段中哪些主机处于开机状态,哪些主机处于关机状态(for 版本)


 
 
  1. #!/bin/bash
  2. # 编写脚本测试 192.168.4.0/24 整个网段中哪些主机处于开机状态,哪些主机处于关机
  3. # 状态(for 版本)
  4. for i in {1..254}
  5. do
  6. # 每隔0.3秒ping一次,一共ping2次,并以1毫秒为单位设置ping的超时时间
  7. ping ‐c 2 ‐i 0.3 ‐W 1 192.168.4. $i &>/dev/null
  8. if [ $? -eq 0 ]; then
  9. echo "192.168.4.$i is up"
  10. else
  11. echo "192.168.4.$i is down"
  12. fi
  13. done

13、编写脚本测试 192.168.4.0/24 整个网段中哪些主机处于开机状态,哪些主机处于关机状态(while 版本) 


 
 
  1. #!/bin/bash
  2. # 编写脚本测试 192.168.4.0/24 整个网段中哪些主机处于开机状态,哪些主机处于关机
  3. # 状态(while 版本)
  4. i=1
  5. while [ $i -le 254 ]
  6. do
  7. ping ‐c 2 ‐i 0.3 ‐W 1 192.168.4. $i &>/dev/null
  8. if [ $? -eq 0 ]; then
  9. echo "192.168.4.$i is up"
  10. else
  11. echo "192.168.4.$i is down"
  12. fi
  13. let i++
  14. done

14、编写脚本测试 192.168.4.0/24 整个网段中哪些主机处于开机状态,哪些主机处于关机状态(多进程版)


 
 
  1. #!/bin/bash
  2. # 编写脚本测试 192.168.4.0/24 整个网段中哪些主机处于开机状态,哪些主机处于关机
  3. # 状态(多进程版)
  4. #定义一个函数,ping 某一台主机,并检测主机的存活状态
  5. myping(){
  6. ping ‐c 2 ‐i 0.3 ‐W 1 $1 &>/dev/null
  7. if [ $? -eq 0 ]; then
  8. echo "$1 is up"
  9. else
  10. echo "$1 is down"
  11. fi
  12. }
  13. for i in {1..254}
  14. do
  15. myping 192.168.4. $i &
  16. done
  17. # 使用&符号,将执行的函数放入后台执行
  18. # 这样做的好处是不需要等待ping第一台主机的回应,就可以继续并发ping第二台主机,依次类推。

15、编写脚本,显示进度条


 
 
  1. #!/bin/bash
  2. # 编写脚本,显示进度条
  3. jindu(){
  4. while :
  5. do
  6. echo -n '#'
  7. sleep 0.2
  8. done
  9. }
  10. jindu &
  11. cp -a $1 $2
  12. killall $0
  13. echo "拷贝完成"

16、进度条,动态时针版本;定义一个显示进度的函数,屏幕快速显示|  / ‐ \


 
 
  1. #!/bin/bash
  2. # 进度条,动态时针版本
  3. # 定义一个显示进度的函数,屏幕快速显示| / ‐ \
  4. rotate_line(){
  5. INTERVAL=0.5 #设置间隔时间
  6. COUNT= "0" #设置4个形状的编号,默认编号为 0(不代表任何图像)
  7. while :
  8. do
  9. COUNT=`expr $COUNT + 1` #执行循环,COUNT 每次循环加 1,(分别代表4种不同的形状)
  10. case $COUNT in #判断 COUNT 的值,值不一样显示的形状就不一样
  11. "1") #值为 1 显示‐
  12. echo -e '‐' "\b\c"
  13. sleep $INTERVAL
  14. ;;
  15. "2") #值为 2 显示\\,第一个\是转义
  16. echo -e '\\' "\b\c"
  17. sleep $INTERVAL
  18. ;;
  19. "3") #值为 3 显示|
  20. echo -e "|\b\c"
  21. sleep $INTERVAL
  22. ;;
  23. "4") #值为 4 显示/
  24. echo -e "/\b\c"
  25. sleep $INTERVAL
  26. ;;
  27. *) #值为其他时,将 COUNT 重置为 0
  28. COUNT= "0";;
  29. esac
  30. done
  31. }
  32. rotate_line

17、9*9 乘法表


 
 
  1. #!/bin/bash
  2. # 9*9 乘法表(编写 shell 脚本,打印 9*9 乘法表)
  3. for i in `seq 9`
  4. do
  5. for j in `seq $i`
  6. do
  7. echo -n "$j*$i=$[i*j] "
  8. done
  9. echo
  10. done

18、使用死循环实时显示 eth0 网卡发送的数据包流量


 
 
  1. #!/bin/bash
  2. # 使用死循环实时显示 eth0 网卡发送的数据包流量
  3. while :
  4. do
  5. echo '本地网卡 eth0 流量信息如下: '
  6. ifconfig eth0 | grep "RX pack" | awk '{print $5}'
  7. ifconfig eth0 | grep "TX pack" | awk '{print $5}'
  8. sleep 1
  9. done

19、使用 user.txt 文件中的人员名单,在计算机中自动创建对应的账户并配置初始密码本脚本执行,需要提前准备一个 user.txt 文件,该文件中包含有若干用户名信息


 
 
  1. #!/bin/bash
  2. # 使用 user.txt 文件中的人员名单,在计算机中自动创建对应的账户并配置初始密码
  3. # 本脚本执行,需要提前准备一个 user.txt 文件,该文件中包含有若干用户名信息
  4. for i in `cat user.txt`
  5. do
  6. useradd $i
  7. echo "123456" | passwd ‐‐stdin $i
  8. done

20、编写批量修改扩展名脚本


 
 
  1. #!/bin/bash
  2. # 编写批量修改扩展名脚本,如批量将 txt 文件修改为 doc 文件
  3. # 执行脚本时,需要给脚本添加位置参数
  4. # 脚本名 txt doc(可以将 txt 的扩展名修改为 doc)
  5. # 脚本名 doc jpg(可以将 doc 的扩展名修改为 jpg)
  6. for i in `ls *. $1`
  7. do
  8. mv $i ${i%.*}. $2
  9. done

21、使用 expect 工具自动交互密码远程其他主机安装 httpd 软件


 
 
  1. #!/bin/bash
  2. # 使用 expect 工具自动交互密码远程其他主机安装 httpd 软件
  3. # 删除~/.ssh/known_hosts 后,ssh 远程任何主机都会询问是否确认要连接该主机
  4. rm ‐rf ~/.ssh/known_hosts
  5. expect <<EOF
  6. spawn ssh 192.168.4.254
  7. expect "yes/no" {send "yes\r"}
  8. # 根据自己的实际情况将密码修改为真实的密码字串
  9. expect "password" {send "密码\r"}
  10. expect "#" {send "yum ‐y install httpd\r"}
  11. expect "#" {send "exit\r"}
  12. EOF

22、一键部署 LNMP(源码安装版本)


 
 
  1. #!/bin/bash
  2. # 一键部署 LNMP(源码安装版本)
  3. menu()
  4. {
  5. clear
  6. echo " ##############‐‐‐‐Menu‐‐‐‐##############"
  7. echo "# 1. Install Nginx"
  8. echo "# 2. Install MySQL"
  9. echo "# 3. Install PHP"
  10. echo "# 4. Exit Program"
  11. echo " ########################################"
  12. }
  13. choice()
  14. {
  15. read -p "Please choice a menu[1‐9]:" select
  16. }
  17. install_nginx()
  18. {
  19. id nginx &>/dev/null
  20. if [ $? -ne 0 ]; then
  21. useradd -s /sbin/nologin nginx
  22. fi
  23. if [ -f nginx‐1.8.0.tar.gz ]; then
  24. tar -xf nginx‐1.8.0.tar.gz
  25. cd nginx‐1.8.0
  26. yum -y install gcc pcre‐devel openssl‐devel zlib‐devel make
  27. ./configure ‐‐prefix=/usr/ local/nginx ‐‐with‐http_ssl_module
  28. make
  29. make install
  30. ln -s /usr/ local/nginx/sbin/nginx /usr/sbin/
  31. cd ..
  32. else
  33. echo "没有 Nginx 源码包"
  34. fi
  35. }
  36. install_mysql()
  37. {
  38. yum -y install gcc gcc‐c++ cmake ncurses‐devel perl
  39. id mysql &>/dev/null
  40. if [ $? -ne 0 ]; then
  41. useradd -s /sbin/nologin mysql
  42. fi
  43. if [ -f mysql‐5.6.25.tar.gz ]; then
  44. tar -xf mysql‐5.6.25.tar.gz
  45. cd mysql‐5.6.25
  46. cmake .
  47. make
  48. make install
  49. /usr/ local/mysql/scripts/mysql_install_db ‐‐user=mysql ‐‐datadir=/usr/ local/mysql/data/
  50. ‐‐basedir=/usr/ local/mysql/
  51. chown -R root.mysql /usr/ local/mysql
  52. chown -R mysql /usr/ local/mysql/data
  53. /bin/cp -f /usr/ local/mysql/support‐files/mysql.server /etc/init.d/mysqld
  54. chmod +x /etc/init.d/mysqld
  55. /bin/cp -f /usr/ local/mysql/support‐files/my‐default.cnf /etc/my.cnf
  56. echo "/usr/local/mysql/lib/" >> /etc/ld.so.conf
  57. ldconfig
  58. echo 'PATH=\$PATH:/usr/local/mysql/bin/' >> /etc/profile
  59. export PATH
  60. else
  61. echo "没有 mysql 源码包"
  62. exit
  63. fi
  64. }
  65. install_php()
  66. {
  67. #安装 php 时没有指定启动哪些模块功能,如果的用户可以根据实际情况自行添加额外功能如‐‐with‐gd 等
  68. yum -y install gcc libxml2‐devel
  69. if [ -f mhash‐0.9.9.9.tar.gz ]; then
  70. tar -xf mhash‐0.9.9.9.tar.gz
  71. cd mhash‐0.9.9.9
  72. ./configure
  73. make
  74. make install
  75. cd ..
  76. if [ ! ‐f /usr/lib/libmhash.so ]; then
  77. ln -s /usr/ local/lib/libmhash.so /usr/lib/
  78. fi
  79. ldconfig
  80. else
  81. echo "没有 mhash 源码包文件"
  82. exit
  83. fi
  84. if [ -f libmcrypt‐2.5.8.tar.gz ]; then
  85. tar -xf libmcrypt‐2.5.8.tar.gz
  86. cd libmcrypt‐2.5.8
  87. ./configure
  88. make
  89. make install
  90. cd ..
  91. if [ ! -f /usr/lib/libmcrypt.so ]; then
  92. ln -s /usr/ local/lib/libmcrypt.so /usr/lib/
  93. fi
  94. ldconfig
  95. else
  96. echo "没有 libmcrypt 源码包文件"
  97. exit
  98. fi
  99. if [ -f php‐5.4.24.tar.gz ]; then
  100. tar -xf php‐5.4.24.tar.gz
  101. cd php‐5.4.24
  102. ./configure ‐‐prefix=/usr/ local/php5 ‐‐with‐mysql=/usr/ local/mysql ‐‐ enable‐fpm ‐‐
  103. enable‐mbstring ‐‐with‐mcrypt ‐‐with‐mhash ‐‐with‐config‐file‐path=/usr/ local/php5/etc ‐‐with‐
  104. mysqli=/usr/ local/mysql/bin/mysql_config
  105. make && make install
  106. /bin/cp -f php.ini‐production /usr/ local/php5/etc/php.ini
  107. /bin/cp -f /usr/ local/php5/etc/php‐fpm.conf.default /usr/ local/php5/etc/php‐fpm.conf
  108. cd ..
  109. else
  110. echo "没有 php 源码包文件"
  111. exit
  112. fi
  113. }
  114. while :
  115. do
  116. menu
  117. choice
  118. case $select in
  119. 1)
  120. install_nginx
  121. ;;
  122. 2)
  123. install_mysql
  124. ;;
  125. 3)
  126. install_php
  127. ;;
  128. 4)
  129. exit
  130. ;;
  131. *)
  132. echo Sorry!
  133. esac
  134. done

23、编写脚本快速克隆 KVM 虚拟机


 
 
  1. #!/bin/bash
  2. # 编写脚本快速克隆 KVM 虚拟机
  3. # 本脚本针对 RHEL7.2 或 Centos7.2
  4. # 本脚本需要提前准备一个 qcow2 格式的虚拟机模板,
  5. # 名称为/var/lib/libvirt/images /.rh7_template 的虚拟机模板
  6. # 该脚本使用 qemu‐img 命令快速创建快照虚拟机
  7. # 脚本使用 sed 修改模板虚拟机的配置文件,将虚拟机名称、UUID、磁盘文件名、MAC 地址
  8. # exit code:
  9. # 65 ‐> user input nothing
  10. # 66 ‐> user input is not a number
  11. # 67 ‐> user input out of range
  12. # 68 ‐> vm disk image exists
  13. IMG_DIR=/var/lib/libvirt/images
  14. BASEVM=rh7_template
  15. read -p "Enter VM number: " VMNUM
  16. if [ $VMNUM -le 9 ]; then
  17. VMNUM=0 $VMNUM
  18. fi
  19. if [ -z "${VMNUM}" ]; then
  20. echo "You must input a number."
  21. exit 65
  22. elif [[ ${VMNUM} =~ [a‐z] ]; then
  23. echo "You must input a number."
  24. exit 66
  25. elif [ ${VMNUM} -lt 1 -o ${VMNUM} -gt 99 ]; then
  26. echo "Input out of range"
  27. exit 67
  28. fi
  29. NEWVM=rh7_node ${VMNUM}
  30. if [ -e $IMG_DIR/ ${NEWVM}.img ]; then
  31. echo "File exists."
  32. exit 68
  33. fi
  34. echo -en "Creating Virtual Machine disk image......\t"
  35. qemu‐img create -f qcow2 ‐b $IMG_DIR/. ${BASEVM}.img $IMG_DIR/ ${NEWVM}.img &> /dev/null
  36. echo -e "\e[32;1m[OK]\e[0m"
  37. #virsh dumpxml ${BASEVM} > /tmp/myvm.xml
  38. cat /var/lib/libvirt/images/.rhel7.xml > /tmp/myvm.xml
  39. sed -i "/<name>${BASEVM}/s/${BASEVM}/${NEWVM}/" /tmp/myvm.xml
  40. sed -i "/uuid/s/<uuid>.*<\/uuid>/<uuid>$(uuidgen)<\/uuid>/" /tmp/myvm.xml
  41. sed -i "/${BASEVM}\.img/s/${BASEVM}/${NEWVM}/" /tmp/myvm.xml
  42. # 修改 MAC 地址,本例使用的是常量,每位使用该脚本的用户需要根据实际情况修改这些值
  43. # 最好这里可以使用便利,这样更适合于批量操作,可以克隆更多虚拟机
  44. sed -i "/mac /s/a1/0c/" /tmp/myvm.xml
  45. echo -en "Defining new virtual machine......\t\t"
  46. virsh define /tmp/myvm.xml &> /dev/null
  47. echo -e "\e[32;1m[OK]\e[0m"

24、点名器脚本


 
 
  1. #!/bin/bash
  2. # 编写一个点名器脚本
  3. # 该脚本,需要提前准备一个 user.txt 文件
  4. # 该文件中需要包含所有姓名的信息,一行一个姓名,脚本每次随机显示一个姓名
  5. while :
  6. do
  7. #统计 user 文件中有多少用户
  8. line=`cat user.txt |wc ‐l`
  9. num=$[RANDOM%line+1]
  10. sed -n "${num}p" user.txt
  11. sleep 0.2
  12. clear
  13. done

25、查看有多少远程的 IP 在连接本机


 
 
  1. #!/bin/bash
  2. # 查看有多少远程的 IP 在连接本机(不管是通过 ssh 还是 web 还是 ftp 都统计)
  3. # 使用 netstat ‐atn 可以查看本机所有连接的状态,‐a 查看所有,
  4. # -t仅显示 tcp 连接的信息,‐n 数字格式显示
  5. # Local Address(第四列是本机的 IP 和端口信息)
  6. # Foreign Address(第五列是远程主机的 IP 和端口信息)
  7. # 使用 awk 命令仅显示第 5 列数据,再显示第 1 列 IP 地址的信息
  8. # sort 可以按数字大小排序,最后使用 uniq 将多余重复的删除,并统计重复的次数
  9. netstat -atn | awk '{print $5}' | awk '{print $1}' | sort -nr | uniq -c

26、对 100 以内的所有正整数相加求和(1+2+3+4...+100)


 
 
  1. #!/bin/bash
  2. # 对 100 以内的所有正整数相加求和(1+2+3+4...+100)
  3. #seq 100 可以快速自动生成 100 个整数
  4. sum=0
  5. for i in `seq 100`
  6. do
  7. sum=$[sum+i]
  8. done
  9. echo "总和是:$sum"

27、统计 13:30 到 14:30 所有访问 apache 服务器的请求有多少个


 
 
  1. #!/bin/bash
  2. # 统计 13:30 到 14:30 所有访问 apache 服务器的请求有多少个
  3. # awk 使用‐F 选项指定文件内容的分隔符是/或者:
  4. # 条件判断$7:$8 大于等于 13:30,并且要求,$7:$8 小于等于 14:30
  5. # 最后使用 wc ‐l 统计这样的数据有多少行,即多少个
  6. awk -F "[ /:]" '$7":"$8>="13:30" && $7":"$8<="14:30"' /var/ log/httpd/access_log |wc -l

28、统计 13:30 到 14:30 所有访问本机 Aapche 服务器的远程 IP 地址是什么 


 
 
  1. #!/bin/bash
  2. # 统计 13:30 到 14:30 所有访问本机 Aapche 服务器的远程 IP 地址是什么
  3. # awk 使用‐F 选项指定文件内容的分隔符是/或者:
  4. # 条件判断$7:$8 大于等于 13:30,并且要求,$7:$8 小于等于 14:30
  5. # 日志文档内容里面,第 1 列是远程主机的 IP 地址,使用 awk 单独显示第 1 列即可
  6. awk -F "[ /:]" '$7":"$8>="13:30" && $7":"$8<="14:30"{print $1}' /var/ log/httpd/access_log

29、打印国际象棋棋盘


 
 
  1. #!/bin/bash
  2. # 打印国际象棋棋盘
  3. # 设置两个变量,i 和 j,一个代表行,一个代表列,国际象棋为 8*8 棋盘
  4. # i=1 是代表准备打印第一行棋盘,第 1 行棋盘有灰色和蓝色间隔输出,总共为 8 列
  5. # i=1,j=1 代表第 1 行的第 1 列;i=2,j=3 代表第 2 行的第 3 列
  6. # 棋盘的规律是 i+j 如果是偶数,就打印蓝色色块,如果是奇数就打印灰色色块
  7. # 使用 echo ‐ne 打印色块,并且打印完成色块后不自动换行,在同一行继续输出其他色块
  8. for i in {1..8}
  9. do
  10. for j in {1..8}
  11. do
  12. sum=$[i+j]
  13. if [ $[sum%2] -eq 0 ]; then
  14. echo -ne "\033[46m \033[0m"
  15. else
  16. echo -ne "\033[47m \033[0m"
  17. fi
  18. done
  19. echo
  20. done

30、统计每个远程 IP 访问了本机 apache 几次?


 
 
  1. #!/bin/bash
  2. # 统计每个远程 IP 访问了本机 apache 几次?
  3. awk '{ip[$1]++}END{for(i in ip){print ip[i],i}}' /var/ log/httpd/access_log

31、统计当前 Linux 系统中可以登录计算机的账户有多少个


 
 
  1. #!/bin/bash
  2. # 统计当前 Linux 系统中可以登录计算机的账户有多少个
  3. #方法 1:
  4. grep "bash$" /etc/passwd | wc -l
  5. #方法 2:
  6. awk -f: '/bash$/{x++}end{print x}' /etc/passwd

32、统计/var/log 有多少个文件,并显示这些文件名


 
 
  1. #!/bin/bash
  2. # 统计/var/log 有多少个文件,并显示这些文件名
  3. # 使用 ls 递归显示所有,再判断是否为文件,如果是文件则计数器加 1
  4. cd /var/ log
  5. sum=0
  6. for i in `ls -r *`
  7. do
  8. if [ -f $i ]; then
  9. let sum++
  10. echo "文件名:$i"
  11. fi
  12. done
  13. echo "总文件数量为:$sum"

33、自动为其他脚本添加解释器信息


 
 
  1. #!/bin/bash
  2. # 自动为其他脚本添加解释器信息#!/bin/bash,如脚本名为 test.sh 则效果如下:
  3. # ./test.sh abc.sh 自动为 abc.sh 添加解释器信息
  4. # ./test.sh user.sh 自动为 user.sh 添加解释器信息
  5. # 先使用 grep 判断对象脚本是否已经有解释器信息,如果没有则使用 sed 添加解释器以及描述信息
  6. if ! grep -q "^#!" $1; then
  7. sed '1i #!/bin/bash' $1
  8. sed '2i #Description: '
  9. fi
  10. # 因为每个脚本的功能不同,作用不同,所以在给对象脚本添加完解释器信息,以及 Description 后还希望
  11. # 继续编辑具体的脚本功能的描述信息,这里直接使用 vim 把对象脚本打开,并且光标跳转到该文件的第 2 行
  12. vim +2 $1

34、自动化部署 varnish 源码包软件


 
 
  1. #!/bin/bash
  2. # 自动化部署 varnish 源码包软件
  3. # 本脚本需要提前下载 varnish‐3.0.6.tar.gz 这样一个源码包软件,该脚本即可用自动源码安装部署软件
  4. yum -y install gcc readline‐devel pcre‐devel
  5. useradd -s /sbin/nologin varnish
  6. tar -xf varnish‐3.0.6.tar.gz
  7. cd varnish‐3.0.6
  8. # 使用 configure,make,make install 源码安装软件包
  9. ./configure ‐‐prefix=/usr/ local/varnish
  10. make && make install
  11. # 在源码包目录下,将相应的配置文件拷贝到 Linux 系统文件系统中
  12. # 默认安装完成后,不会自动拷贝或安装配置文件到 Linux 系统,所以需要手动 cp 复制配置文件
  13. # 并使用 uuidgen 生成一个随机密钥的配置文件
  14. cp redhat/varnish.initrc /etc/init.d/varnish
  15. cp redhat/varnish.sysconfig /etc/sysconfig/varnish
  16. cp redhat/varnish_reload_vcl /usr/bin/
  17. ln -s /usr/ local/varnish/sbin/varnishd /usr/sbin/
  18. ln -s /usr/ local/varnish/bin/* /usr/bin
  19. mkdir /etc/varnish
  20. cp /usr/ local/varnish/etc/varnish/default.vcl /etc/varnish/
  21. uuidgen > /etc/varnish/secret

35、编写 nginx 启动脚本


 
 
  1. #!/bin/bash
  2. # 编写 nginx 启动脚本
  3. # 本脚本编写完成后,放置在/etc/init.d/目录下,就可以被 Linux 系统自动识别到该脚本
  4. # 如果本脚本名为/etc/init.d/nginx,则 service nginx start 就可以启动该服务
  5. # service nginx stop 就可以关闭服务
  6. # service nginx restart 可以重启服务
  7. # service nginx status 可以查看服务状态
  8. program=/usr/ local/nginx/sbin/nginx
  9. pid=/usr/ local/nginx/logs/nginx.pid
  10. start(){
  11. if [ -f $pid ]; then
  12. echo "nginx 服务已经处于开启状态"
  13. else
  14. $program
  15. fi
  16. stop(){
  17. if [ -! -f $pid ]; then
  18. echo "nginx 服务已经关闭"
  19. else
  20. $program -s stop
  21. echo "关闭服务 ok"
  22. fi
  23. }
  24. status(){
  25. if [ -f $pid ]; then
  26. echo "服务正在运行..."
  27. else
  28. echo "服务已经关闭"
  29. fi
  30. }
  31. case $1 in
  32. start)
  33. start;;
  34. stop)
  35. stop;;
  36. restart)
  37. stop
  38. sleep 1
  39. start;;
  40. status)
  41. status;;
  42. *)
  43. echo "你输入的语法格式错误"
  44. esac

36、自动对磁盘分区、格式化、挂载


 
 
  1. #!/bin/bash
  2. # 自动对磁盘分区、格式化、挂载
  3. # 对虚拟机的 vdb 磁盘进行分区格式化,使用<<将需要的分区指令导入给程序 fdisk
  4. # n(新建分区),p(创建主分区),1(分区编号为 1),两个空白行(两个回车,相当于将整个磁盘分一个区)
  5. # 注意:1 后面的两个回车(空白行)是必须的!
  6. fdisk /dev/vdb << EOF
  7. n
  8. p
  9. 1
  10. wq
  11. EOF
  12. #格式化刚刚创建好的分区
  13. mkfs.xfs /dev/vdb1
  14. #创建挂载点目录
  15. if [ -e /data ]; then
  16. exit
  17. fi
  18. mkdir /data
  19. #自动挂载刚刚创建的分区,并设置开机自动挂载该分区
  20. echo '/dev/vdb1 /data xfs defaults 1 2' >> /etc/fstab
  21. mount -a

37、自动优化 Linux 内核参数


 
 
  1. #!/bin/bash
  2. # 自动优化 Linux 内核参数
  3. #脚本针对 RHEL7
  4. cat >> /usr/lib/sysctl.d/00‐system.conf <<EOF
  5. fs.file‐max=65535
  6. net.ipv4.tcp_timestamps = 0
  7. net.ipv4.tcp_synack_retries = 5
  8. net.ipv4.tcp_syn_retries = 5
  9. net.ipv4.tcp_tw_recycle = 1
  10. net.ipv4.tcp_tw_reuse = 1
  11. net.ipv4.tcp_fin_timeout = 30
  12. #net.ipv4.tcp_keepalive_time = 120
  13. net.ipv4.ip_local_port_range = 1024 65535
  14. kernel.shmall = 2097152
  15. kernel.shmmax = 2147483648
  16. kernel.shmmni = 4096
  17. kernel.sem = 5010 641280 5010 128
  18. net.core.wmem_default=262144
  19. net.core.wmem_max=262144
  20. net.core.rmem_default=4194304
  21. net.core.rmem_max=4194304
  22. net.ipv4.tcp_fin_timeout = 10
  23. net.ipv4.tcp_keepalive_time = 30
  24. net.ipv4.tcp_window_scaling = 0
  25. net.ipv4.tcp_sack = 0
  26. EOF
  27. sysctl –p

38、切割 Nginx 日志文件(防止单个文件过大,后期处理很困难)


 
 
  1. #mkdir /data/scripts
  2. #vim /data/scripts/nginx_log.sh
  3. #!/bin/bash
  4. # 切割 Nginx 日志文件(防止单个文件过大,后期处理很困难)
  5. logs_path= "/usr/local/nginx/logs/"
  6. mv ${logs_path}access.log ${logs_path}access_$(date -d "yesterday" + "%Y%m%d"). log
  7. kill -USR1 `cat /usr/ local/nginx/logs/nginx.pid`
  8. # chmod +x /data/scripts/nginx_log.sh
  9. # crontab ‐e #脚本写完后,将脚本放入计划任务每天执行一次脚本
  10. 0 1 * * * /data/scripts/nginx_log.sh

39、检测 MySQL 数据库连接数量


 
 
  1. #!/bin/bash
  2. # 检测 MySQL 数据库连接数量
  3. # 本脚本每 2 秒检测一次 MySQL 并发连接数,可以将本脚本设置为开机启动脚本,或在特定时间段执行
  4. # 以满足对 MySQL 数据库的监控需求,查看 MySQL 连接是否正常
  5. # 本案例中的用户名和密码需要根据实际情况修改后方可使用
  6. log_file=/var/ log/mysql_count.log
  7. user=root
  8. passwd=123456
  9. while :
  10. do
  11. sleep 2
  12. count=`mysqladmin -u "$user" -p "$passwd" status | awk '{print $4}'`
  13. echo "`date +%Y‐%m‐%d` 并发连接数为:$count" >> $log_file
  14. done

40、根据 md5 校验码,检测文件是否被修改


 
 
  1. #!/bin/bash
  2. # 根据 md5 校验码,检测文件是否被修改
  3. # 本示例脚本检测的是/etc 目录下所有的 conf 结尾的文件,根据实际情况,您可以修改为其他目录或文件
  4. # 本脚本在目标数据没有被修改时执行一次,当怀疑数据被人篡改,再执行一次
  5. # 将两次执行的结果做对比,MD5 码发生改变的文件,就是被人篡改的文件
  6. for i in $(ls /etc/*.conf)
  7. do
  8. md5sum "$i" >> /var/ log/conf_file.log
  9. done

41、检测 MySQL 服务是否存活


 
 
  1. #!/bin/bash
  2. # 检测 MySQL 服务是否存活
  3. # host 为你需要检测的 MySQL 主机的 IP 地址,user 为 MySQL 账户名,passwd 为密码
  4. # 这些信息需要根据实际情况修改后方可使用
  5. host=192.168.51.198
  6. user=root
  7. passwd=123456
  8. mysqladmin -h '$host' -u '$user' -p '$passwd' ping &>/dev/null
  9. if [ $? -eq 0 ]
  10. then
  11. echo "MySQL is UP"
  12. else
  13. echo "MySQL is down"
  14. fi

42、备份 MySQL 的 shell 脚本(mysqldump版本)


 
 
  1. #!/bin/bash
  2. # 备份 MySQL 的 shell 脚本(mysqldump版本)
  3. # 定义变量 user(数据库用户名),passwd(数据库密码),date(备份的时间标签)
  4. # dbname(需要备份的数据库名称,根据实际需求需要修改该变量的值,默认备份 mysql 数据库)
  5. user=root
  6. passwd=123456
  7. dbname=mysql
  8. date=$(date +%Y%m%d)
  9. # 测试备份目录是否存在,不存在则自动创建该目录
  10. [ ! -d /mysqlbackup ] && mkdir /mysqlbackup
  11. # 使用 mysqldump 命令备份数据库
  12. mysqldump -u "$user" -p "$passwd" "$dbname" > /mysqlbackup/ "$dbname"- ${date}.sql

43、将文件中所有的小写字母转换为大写字母


 
 
  1. #!/bin/bash
  2. # 将文件中所有的小写字母转换为大写字母
  3. # $1是位置参数,是你需要转换大小写字母的文件名称
  4. # 执行脚本,给定一个文件名作为参数,脚本就会将该文件中所有的小写字母转换为大写字母
  5. tr "[a‐z]" "[A‐Z]" < $1

44、非交互自动生成 SSH 密钥文件


 
 
  1. #!/bin/bash
  2. # 非交互自动生成 SSH 密钥文件
  3. # ‐t 指定 SSH 密钥的算法为 RSA 算法;‐N 设置密钥的密码为空;‐f 指定生成的密钥文件>存放在哪里
  4. rm -rf ~/.ssh/{known_hosts,id_rsa*}
  5. ssh‐keygen -t RSA -N '' -f ~/.ssh/id_rsa

45、检查特定的软件包是否已经安装


 
 
  1. #!/bin/bash
  2. # 检查特定的软件包是否已经安装
  3. if [ $# -eq 0 ]; then
  4. echo "你需要制定一个软件包名称作为脚本参数"
  5. echo "用法:$0 软件包名称 ..."
  6. fi
  7. # $@提取所有的位置变量的值,相当于$*
  8. for package in "$@"
  9. do
  10. if rpm -q ${package} &>/dev/null ; then
  11. echo -e "${package}\033[32m 已经安装\033[0m"
  12. else
  13. echo -e "${package}\033[34;1m 未安装\033[0m"
  14. fi
  15. done

46、监控 HTTP 服务器的状态(测试返回码)


 
 
  1. #!/bin/bash
  2. # 监控 HTTP 服务器的状态(测试返回码)
  3. # 设置变量,url为你需要检测的目标网站的网址(IP 或域名),比如百度
  4. url=http://http://183.232.231.172/index.html
  5. # 定义函数 check_http:
  6. # 使用 curl 命令检查 http 服务器的状态
  7. # ‐m 设置curl不管访问成功或失败,最大消耗的时间为 5 秒,5 秒连接服务为相应则视为无法连接
  8. # ‐s 设置静默连接,不显示连接时的连接速度、时间消耗等信息
  9. # ‐o 将 curl 下载的页面内容导出到/dev/null(默认会在屏幕显示页面内容)
  10. # ‐w 设置curl命令需要显示的内容%{http_code},指定curl返回服务器的状态码
  11. check_http()
  12. {
  13. status_code=$(curl -m 5 -s -o /dev/null -w %{http_code} $url)
  14. }
  15. while :
  16. do
  17. check_http
  18. date=$(date +%Y%m%d‐%H:%M:%S)
  19. # 生成报警邮件的内容
  20. echo "当前时间为:$date
  21. $url 服务器异常,状态码为${status_code}.
  22. 请尽快排查异常." > /tmp/http$$.pid
  23. # 指定测试服务器状态的函数,并根据返回码决定是发送邮件报警还是将正常信息写入日志
  24. if [ $status_code -ne 200 ]; then
  25. mail -s Warning root < /tmp/http$$.pid
  26. else
  27. echo "$url 连接正常" >> /var/ log/http.log
  28. fi
  29. sleep 5
  30. done

47、自动添加防火墙规则,开启某些服务或端口(适用于 RHEL7)


 
 
  1. #!/bin/bash
  2. # 自动添加防火墙规则,开启某些服务或端口(适用于 RHEL7)
  3. #
  4. # 设置变量定义需要添加到防火墙规则的服务和端口号
  5. # 使用 firewall‐cmd ‐‐get‐services 可以查看 firewall 支持哪些服务
  6. service= "nfs http ssh"
  7. port= "80 22 8080"
  8. # 循环将每个服务添加到防火墙规则中
  9. for i in $service
  10. do
  11. echo "Adding $i service to firewall"
  12. firewall‐cmd --add-service= ${i}
  13. done
  14. #循环将每个端口添加到防火墙规则中
  15. for i in $port
  16. do
  17. echo "Adding $i Port to firewall"
  18. firewall‐cmd --add-port= ${i}/tcp
  19. done
  20. #将以上设置的临时防火墙规则,转换为永久有效的规则(确保重启后有效)
  21. firewall‐cmd --runtime-to-permanent

48、使用脚本自动创建逻辑卷


 
 
  1. #!/bin/bash
  2. # 使用脚本自动创建逻辑卷
  3. # 清屏,显示警告信息,创建将磁盘转换为逻辑卷会删除数据
  4. clear
  5. echo -e "\033[32m !!!!!!警告(Warning)!!!!!!\033[0m"
  6. echo
  7. echo "+++++++++++++++++++++++++++++++++++++++++++++++++"
  8. echo "脚本会将整个磁盘转换为 PV,并删除磁盘上所有数据!!!"
  9. echo "This Script will destroy all data on the Disk"
  10. echo "+++++++++++++++++++++++++++++++++++++++++++++++++"
  11. echo
  12. read -p "请问是否继续 y/n?:" sure
  13. # 测试用户输入的是否为 y,如果不是则退出脚本
  14. [ $sure != y ] && exit
  15. # 提示用户输入相关参数(磁盘、卷组名称等数据),并测试用户是否输入了这些值,如果没有输入,则脚本退出
  16. read -p "请输入磁盘名称,如/dev/vdb:" disk
  17. [ -z $disk ] && echo "没有输入磁盘名称" && exit
  18. read -p "请输入卷组名称:" vg_name
  19. [ -z $vg_name ] && echo "没有输入卷组名称" && exit
  20. read -p "请输入逻辑卷名称:" lv_name
  21. [ -z $lv_name ] && echo "没有输入逻辑卷名称" && exit
  22. read -p "请输入逻辑卷大小:" lv_size
  23. [ -z $lv_size ] && echo "没有输入逻辑卷大小" && exit
  24. # 使用命令创建逻辑卷
  25. pvcreate $disk
  26. vgcreate $vg_name $disk
  27. lvcreate -L ${lv_size}M -n ${lv_name} ${vg_name}

49、显示 CPU 厂商信息


 
 
  1. #!/bin/bash
  2. # 显示 CPU 厂商信息
  3. awk '/vendor_id/{print $3}' /proc/cpuinfo | uniq

50、删除某个目录下大小为 0 的文件


 
 
  1. #!/bin/bash
  2. # 删除某个目录下大小为 0 的文件
  3. #/var/www/html 为测试目录,脚本会清空该目录下所有 0 字节的文件
  4. dir= "/var/www/html"
  5. find $dir - type f -size 0 - exec rm -rf {} \;

51、查找 Linux 系统中的僵尸进程


 
 
  1. #!/bin/bash
  2. # 查找 Linux 系统中的僵尸进程
  3. # awk 判断 ps 命令输出的第 8 列为 Z 是,显示该进程的 PID 和进程命令
  4. ps aux | awk '{if($8 == "Z"){print $2,$11}}'

52、提示用户输入年份后判断该年是否为闰年


 
 
  1. #!/bin/bash
  2. # 提示用户输入年份后判断该年是否为闰年
  3. # 能被4整除并且并不能被100整除的年份是闰年
  4. # 能被400整除的年份也是闰年
  5. read -p "请输入一个年份:" year
  6. if [ "$year" = "" ]; then
  7. echo "没有输入年份"
  8. exit

2、通过位置变量创建 Linux 系统账户及密码


 
 
  1. #!/bin/bash
  2. # 通过位置变量创建 Linux 系统账户及密码
  3. #$1 是执行脚本的第一个参数,$2 是执行脚本的第二个参数
  4. useradd "$1"
  5. echo "$2" | passwd ‐‐stdin "$1"

3、备份日志


 
 
  1. #!/bin/bash
  2. # 每周 5 使用 tar 命令备份/var/log 下的所有日志文件
  3. # vim /root/logbak.sh
  4. # 编写备份脚本,备份后的文件名包含日期标签,防止后面的备份将前面的备份数据覆盖
  5. # 注意 date 命令需要使用反引号括起来,反引号在键盘<tab>键上面
  6. tar -czf log-`date +%Y%m%d`.tar.gz /var/ log
  7. # crontab ‐e #编写计划任务,执行备份脚本
  8. 00 03 * * 5 /root/logbak.sh

4、一键部署 LNMP(RPM 包版本)


 
 
  1. #!/bin/bash
  2. # 一键部署 LNMP(RPM 包版本)
  3. # 使用 yum 安装部署 LNMP,需要提前配置好 yum 源,否则该脚本会失败
  4. # 本脚本使用于 centos7.2 或 RHEL7.2
  5. yum ‐y install httpd
  6. yum ‐y install mariadb mariadb‐devel mariadb‐server
  7. yum ‐y install php php‐mysql
  8. systemctl start httpd mariadb
  9. systemctl enable httpd mariadb

5、监控内存和磁盘容量,小于给定值时报警


 
 
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
├─第一阶段 │      源码+ppt.rar │      高并发编程第一阶段01讲、课程大纲及主要内容介绍.wmv │      高并发编程第一阶段02讲、简单介绍什么是线程.wmv │      高并发编程第一阶段03讲、创建并启动线程.mp4 │      高并发编程第一阶段04讲、线程生命周期以及start方法源码剖析.mp4 │      高并发编程第一阶段05讲、采用多线程方式模拟银行排队叫号.mp4 │      高并发编程第一阶段06讲、用Runnable接口将线程的逻辑执行单元从控制中抽取出来.mp4 │      高并发编程第一阶段07讲、策略模式在Thread和Runnable中的应用分析.mp4 │      高并发编程第一阶段08讲、构造Thread对象你也许不知道的几件事.mp4 │      高并发编程第一阶段09讲、多线程与JVM内存结构的关系,虚拟机栈实验.mp4 │      高并发编程第一阶段10讲、Thread构造函数StackSize详细讲解.mp4 │      高并发编程第一阶段11讲、Thread构造函数StackSize详细讲解-续.mp4 │      高并发编程第一阶段12讲、Daemon线程的创建以及使用场景分析.mp4 │      高并发编程第一阶段13讲、线程ID,优先级讲解.mp4 │      高并发编程第一阶段14讲、Thread的join方法详细介绍,结合一个典型案例.mp4 │      高并发编程第一阶段15讲、Thread中断Interrupt方法详细讲解.mp4 │      高并发编程第一阶段16讲、采用优雅的方式结束线程生命周期.mp4 │      高并发编程第一阶段17讲、Thread API综合实战,编写ThreadService实现暴力结束线程的综合实战.mp4 │      高并发编程第一阶段18讲、数据同步的引入与Synchronized的简单介绍.mp4 │      高并发编程第一阶段19讲、结合jconsole,jstack以及汇编指令认识synchronized关键字.mp4 │      高并发编程第一阶段20讲、同步代码块以及同步方法之间的区别和关系.mp4 │      高并发编程第一阶段21讲、通过实验分析This锁的存在.mp4 │      高并发编程第一阶段22讲、通过实验分析Class锁的存在.mp4 │      高并发编程第一阶段23讲、多线程死锁分析,案例介绍.mp4 │      高并发编程第一阶段24讲、线程间通信快速入门,使用wait和notify进行线程间的数据通信.mp4 │      高并发编程第一阶段25讲、多Produce多Consume之间的通讯导致出现程序假死的原因分析.mp4 │      高并发编程第一阶段26讲、多线程下的生产者消费者模型,以及详细介绍notifyAll方法.mp4 │      高并发编程第一阶段27讲、wait和sleep的本质区别是什么,深入分析(面试常见问题).mp4 │      高并发编程第一阶段28讲、线程生产者消费者的综合实战结合Java8语法.mp4 │      高并发编程第一阶段29讲、如何实现一个自己的显式锁Lock精讲上.mp4 │      高并发编程第一阶段30讲、如何实现一个自己的显式锁Lock精讲下(让锁具备超时功能).mp4 │      高并发编程第一阶段31讲、如何给你的应用程序注入钩子程序,Linux下演示.mp4 │      高并发编程第一阶段32讲、如何捕获线程运行期间的异常.mp4 │      高并发编程第一阶段33讲、ThreadGroup API介绍之一.mp4 │      高并发编程第一阶段34讲、ThreadGroup API介绍之二.mp4 │      高并发编程第一阶段35讲、线程池原理与自定义线程池.mp4 │      高并发编程第一阶段36讲、自定义个简单的线程池并且测试.mp4 │      高并发编程第一阶段37讲、给线程池增加拒绝策略以及停止方法.mp4 │      高并发编程第一阶段38讲、给线程池增加自动扩充线程数量,以及闲时自动回收的功能.mp4 │      高并发编程第一阶段39讲、课程结束,内容回顾,下季内容预告.mp4 │ ├─第二阶段 │       Java并发编程.png │       ppt+源码.rar │       高并发编程第二阶段01讲、课程大纲及主要内容介绍.wmv │       高并发编程第二阶段02讲、介绍四种Singleton方式的优缺点在多线程情况下.wmv │       高并发编程第二阶段03讲、介绍三种高效优雅的Singleto
Java基础 6 1. 面向对象的特征有哪些方面 6 2. String是最基本的数据类型吗? 7 3. int 和 Integer 有什么区别 7 4. String 和StringBuffer的区别 7 5. 运行时异常与一般异常有何异同? 7 6. 说出ArrayList,Vector, LinkedList的存储性能和特性。 7 7. Collection 和 Collections的区别。 7 8. &和&&的区别。 8 9. HashMap和Hashtable的区别。 8 10. final, finally, finalize的区别。 8 11. sleep() 和 wait() 有什么区别? 8 12. Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型? 8 13. error和exception有什么区别? 9 14. 同步和异步有何异同,在什么情况下分别使用他们?举例说明。 9 15. abstract class和interface有什么区别? 9 16. heap和stack有什么区别。 9 17. Static Nested Class 和 Inner Class的不同。 9 18. 什么时候用assert。 9 19. GC是什么? 为什么要有GC? 9 20. short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错? 10 21. Math.round(11.5)等於多少? Math.round(-11.5)等於多少? 10 22. String s = new String("xyz");创建了几个String Object? 10 23. Java有没有goto? 10 24. 启动一个线程是用run()还是start()? 10 25. 给我一个你最常见到的runtime exception。 10 26. 接口是否可继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可继承实体类(concrete class)? 10 27. List, Set, Map是否继承自Collection接口? 10 28. abstract的method是否可同时是static,是否可同时是native,是否可同时是synchronized? 10 29. 数组有没有length()这个方法? String有没有length()这个方法? 10 30. Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别? 10 31. 构造器Constructor是否可被override? 10 32. 是否可以继承String类? 11 33. swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上? 11 34. try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后? 11 35. 两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对? 11 36. 当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递? 11 37. 当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法? 11 38. Java的接口和C++的虚类的相同和不同处。 11 39. Java中的异常处理机制的简单原理和应用。 11 40. 垃圾回收的优点和原理。并考虑2种回收机制。 11 41. 你所知道的集合类都有哪些?主要方法? 12 42. 描述一下JVM加载class文件的原理机制? 12 43. char型变量中能不能存贮一个中文汉字?为什么? 12 44. 多线程有几种实现方法,都是什么?同步有几种实现方法,都是什么? 12 45. 线程的基本概念、线程的基本状态以及状态之间的关系 12 46. 在linux下 怎么查看tomcat的进程? 12 47. 简述逻辑操作(&,|,^)与条件操作(&&,||)的区别。 12 48. XML文档定义有几种形式?它们之间有何本质区别?解析XML文档有哪几种方式? 12 49. 你在项目中用到了xml技术的哪些方面?如何实现的? 12 50. 简述synchronized和java.util.concurrent.locks.Lock的异同 ? 13 51. 排序都有哪几种方法?请列举。用JAVA实现一个快速排序。 13 52. JAVA语言如何进行异常处理,关键字:throws,throw,try,catch,finally分别代表什么意义?在try块中可以抛出异常吗? 13 53. 一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制? 13 54. java中有几种方法可以实现一个线程?用什么关键字修饰同步方法? stop()和suspend()方法为何不推荐使用? 13 55. java中有几种类型的流?JDK为每种类型的流提供了一些抽象类以供继承,请说出他们分别是哪些类? 14 56. java中会存在内存泄漏吗,请简单描述。 14 57. java中实现多态的机制是什么? 14 58. 垃圾回收器的基本原理是什么?垃圾回收器可以马上回收内存吗?有什么办法主动通知虚拟机进行垃圾回收? 14 59. 静态变量和实例变量的区别? 14 60. 什么是java序列化,如何实现java序列化? 14 61. 是否可以从一个static方法内部发出对非static方法的调用? 14 62. 写clone()方法时,通常都有一行代码,是什么? 14 63. 在JAVA中,如何跳出当前的多重嵌套循环? 14 64. List、Map、Set三个接口,存取元素时,各有什么特点? 14 65. UML方面 14 66. 说出一些常用的类,包,接口,请各举5个 14 67. 开发中都用到了那些设计模式?用在什么场合? 15 68. Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)? 15 69. LINUX下线程,GDI类的解释。 15 70. java常用的设计模式?说明工厂模式。 15 71. 内部类可以引用他包含类的成员吗?有没有什么限制? 15 J2EE 15 1. JSP的内置对象及方法。 15 2. JSP的常用指令 16 3. Request对象的主要方法: 16 4. jsp有哪些动作?作用分别是什么? 16 5. JSP中动态INCLUDE与静态INCLUDE的区别? 17 6. JSP和Servlet有哪些相同点和不同点,他们之间的联系是什么? 17 7. forward 和redirect的区别 17 8. 说出在JSP页面里是怎么分页的? 17 9. 什么情况下调用doGet()和doPost()? 17 10. servlet的生命周期 17 11. Servlet执行时一般实现哪几个方法? 17 12. Servlet和CGI的区别。 18 13. 如何现实servlet的单线程模式 18 14. servlet的配置 18 15. STRUTS的应用(如STRUTS架构) 18 16. MVC的各个部分都有那些技术来实现?如何实现? 18 17. Form元素的属性 18 18. 页面间对象传递的方法 18 19. 四种会话跟踪技术 18 20. J2EE是什么? 19 21. J2EE是技术还是平台还是框架? 19 22. 请对以下在J2EE中常用的名词进行解释(或简单描述) 19 23. WEB SERVICE名词解释。JSWDL开发包的介绍。JAXP、JAXM的解释。SOAP、UDDI,WSDL解释。 19 24. 应用服务器与WEB SERVER的区别? 20 25. 应用服务器有那些? 20 EJB/服务器 20 1. EJB与JAVA BEAN的区别? 20 2. EJB是基于哪些技术实现的?并说出SessionBean和EntityBean的区别,StatefulBean和StatelessBean的区别。 20 3. EJB的角色和三个对象 21 4. EJB容器提供的服务 21 5. EJB规范规定EJB中禁止的操作有哪些? 21 6. remote接口和home接口主要作用 21 7. bean 实例的生命周期 21 8. EJB的激活机制 21 9. EJB的几种类型 21 10. EJB需直接实现它的业务接口或Home接口吗,请简述理由。 21 11. 客服端调用EJB对象的几个基本步骤 21 12. EJB包括(SessionBean,EntityBean)说出他们的生命周期,及如何管理事务的? 21 13. 如何给weblogic指定大小的内存? 22 14. 如何设定的weblogic的热启动模式(开发模式)与产品发布模式? 22 15. 如何启动时不需输入用户名与密码? 22 16. 在weblogic管理制台中对一个应用域(或者说是一个网站,Domain)进行jms及ejb或连接池等相关信息进行配置后,实际保存在什么文件中? 22 17. 说说weblogic中一个Domain的缺省目录结构?比如要将一个简单的helloWorld.jsp放入何目录下,然的在浏览器上就可打入http://主机:端口号//helloword.jsp就可以看到运行结果了? 又比如这其中用到了一个自己写的javaBean该如何办? 22 18. 在weblogic中发布ejb需涉及到哪些配置文件 22 19. 如何在weblogic中进行ssl配置与客户端的认证配置或说说j2ee(标准)进行ssl的配置 22 20. 如何查看在weblogic中已经发布的EJB? 22 21. 说说在weblogic中开发消息Bean时的persistent与non-persisten的差别 22 22. 说说你所熟悉或听说过的j2ee中的几种常用模式? 22 数据库 23 1. 说出数据连接池的工作机制是什么? 23 2. 存储过程和函数的区别。 23 3. 事务是什么? 23 4. 游标的作用?如何知道游标已经到了最后? 23 5. 触发器分为事前触发和事后触发,这两种触发有和区别。语句级触发和行级触发有何区别? 23 简答题 23 1. 作用域public,protected,private,以及不写时的区别 23 2. BS与CS的联系与区别。 24 3. JDO是什么? 25 4. Cookies 25 5. Sessions 25 6. Cookies和Sessions的比较 26 7. 过滤器 26 8. 什么是事件监听器? 27 9. EJB 28 10. CORBA是什么?用途是什么? 29 11. Spring transaction properties 29 编程/代码 30 1. 编程题: 用最有效率的方法算出2乘以8等於几? 30 2. 我们在web应用开发过程中经常遇到输出某种编码的字符,如iso8859-1等,如何输出一个某种编码的字符串? 30 3. 请问输出什么,为什么? 30 4. 编程题: 写一个Singleton出来。 31 5. 设计4个线程,其中两个线程每次对j增加1,另外两个线程对j每次减少1。写出程序。 以下程序使用内部类实现线程,对j增减的时候没有考虑顺序问题。 31 6. 写一段Jdbc连Oracle的程序. 32 7. 编码实现内部类 34 8. 输入n个数字,以逗号,分开;然后可选择升或者降序排序;按提交键就在另一页面显示按什么排序,结果为,提供reset 34 9. 如何去小数点前两位,并四舍五入。 35 10. 如何取得年月日,小时分秒 35 11. 如何取得从1970年到现在的毫秒数 35 12. 如何列出某个目录下的所有子目录 35 13. 根据代码,选出正确的选项 36 14. JAVA代码查错 36 15. 金额转换,阿拉伯数字的金额转换成中国传统的形式如:(¥1011)->(一千零一拾一元整)输出。 40
嵌入式系统开发基础——基于ARM微处理器和Linux操作系统[滕英岩][习题解答] 目录第1章 嵌入式系统基础知识 1.1 嵌入式系统的特点及分类 1.1.1 嵌入式系统的特点 1.1.2 嵌入式系统的分类 1.2 嵌入式系统的软硬件结构 1.3 嵌入式微处理器ARM 1.3.1 ARM简述 1.3.2 ARM编程模型 1.3.3 ARM指令集 1.3.4 C语言和汇编语言的混合编程 1.4 嵌入式操作系统 1.5 基于ARM和Linux的嵌入式开发平台 习题 第2章 嵌入式交叉编译环境 2.1 嵌入式交叉编译环境简介 2.2 NFS服务 2.3 Samba服务 2.4 Windows和LJnux混合开发模式 2.4.1 VMware虚拟机设置共享 2.4.2 SSH客户端软件 2.4.3 Windows下的文本编辑工具 2.5 GCC编译器 2.5.1 GCC的编译过程 2.5.2 GCC的其他选项 2.6 GDB调试器 2.6.1 GDB基本使用方法 2.6.2 GDB基本命令 2.6.3 GDB典型实例 2.7 Make工具的使用 2.7.1 Makefile基础知识 2.7.2 Makefile应用 2.7.3 使用autotools自动生成Makefile文件 2.8 嵌入式交叉编译环境的搭建 2.8.1 嵌入式交叉编译环境的安装与配置 2.8.2 minicom和Windows XP超级终端的配置 习题 第3章 嵌入式开发环境的搭建 3.1 嵌入式开发环境概述 3.2 Flash程序烧写 3.3 BootLoader程序 3.3.1 BootLoader程序原理 3.3.2 几种流行的Linux BootLoader 3.3.3 S3C2410平台上的VIVI分析 3.4 内核的裁减和编译 3.4.1 内核的裁减 3.4.2 内核的编译 3.4.3 内核的烧写 3.5 根文件系统的构建 3.5.1 根文件系统 3.5.2 BusyBox工具介绍 3.5.3 根文件系统的构建过程 3.6 驱动程序原理与开发 3.6.1 驱动程序基本原理 3.6.2 Linux下字符型设备驱动管理 3.6.3 Linux下字符型设备驱动程序实例分析 习题 第4章 MiniGUI应用程序设计 4.1 嵌入式GUI概述 4.2 常用嵌入式GUI介绍 4.3 MiniGUI概述 4.4 MiniGUI的编译和安装 4.5 MiniGUI程序框架 4.6 MiniGUI编程基础 4.6.1 MiniGUI窗口 4.6.2 MiniGUI消息及消息队列 4.6.3 MiniGUI对话框 4.6.4 MiniGUI菜单 4.6.5 MiniGUI基本控件 4.7 MiniGUI综合实例 习题 第5章 嵌入式数据库 5.1 嵌入式数据库的特点 5.2 嵌入式数据库的应用 5.3 SQLite数据库 5.3.1 SQLite3的安装 5.3.2 SQLite3的命令 5.3.3 SQLite3的数据类型 5.3.4 SQLite3的API函数 5.3.5 SQLite3在MiniGUI中的应用 习题 第6章 Qt图形界面应用程序开发 6.1 Qt简介 6.1.1 Qt的历史 6.1.2 Qt中主要的类 6.1.3 信号和槽 6.1.4 Qt的帮助文档 6.1.5 Qt4的特点和优势 6.1.6 Qt4的安装与配置 6.1.7 Qt4程序结构及实例 6.2 Qt4 Designer的应用 6.2.1 Qt Designer的应用 6.2.2 Qt中的控件及对话框类 6.2.3 Qt应用程序实例——计算器 6.3 Qt4与数据库 6.3.1 Qt4与数据库的连接 6.3.2 执行SQL命令 6.3.3 SQL模型 6.3.4 Linux下中文输入 6.3.5 Qt4与SQLite3的应用程序实例 6.4 Qt/Embedded 6.4.1 Qt/Embedded的图形引擎实现 6.4.2 Qt/Embedded的事件驱动 6.4.3 Qt/Embedded的移植 6.4.4 VMware增加虚拟的硬盘 6.4.5 Qt/Embedded的安装 习题 参考文献
├─第一阶段 │      源码+ppt.rar │      高并发编程第一阶段01讲、课程大纲及主要内容介绍.wmv │      高并发编程第一阶段02讲、简单介绍什么是线程.wmv │      高并发编程第一阶段03讲、创建并启动线程.mp4 │      高并发编程第一阶段04讲、线程生命周期以及start方法源码剖析.mp4 │      高并发编程第一阶段05讲、采用多线程方式模拟银行排队叫号.mp4 │      高并发编程第一阶段06讲、用Runnable接口将线程的逻辑执行单元从控制中抽取出来.mp4 │      高并发编程第一阶段07讲、策略模式在Thread和Runnable中的应用分析.mp4 │      高并发编程第一阶段08讲、构造Thread对象你也许不知道的几件事.mp4 │      高并发编程第一阶段09讲、多线程与JVM内存结构的关系,虚拟机栈实验.mp4 │      高并发编程第一阶段10讲、Thread构造函数StackSize详细讲解.mp4 │      高并发编程第一阶段11讲、Thread构造函数StackSize详细讲解-续.mp4 │      高并发编程第一阶段12讲、Daemon线程的创建以及使用场景分析.mp4 │      高并发编程第一阶段13讲、线程ID,优先级讲解.mp4 │      高并发编程第一阶段14讲、Thread的join方法详细介绍,结合一个典型案例.mp4 │      高并发编程第一阶段15讲、Thread中断Interrupt方法详细讲解.mp4 │      高并发编程第一阶段16讲、采用优雅的方式结束线程生命周期.mp4 │      高并发编程第一阶段17讲、Thread API综合实战,编写ThreadService实现暴力结束线程的综合实战.mp4 │      高并发编程第一阶段18讲、数据同步的引入与Synchronized的简单介绍.mp4 │      高并发编程第一阶段19讲、结合jconsole,jstack以及汇编指令认识synchronized关键字.mp4 │      高并发编程第一阶段20讲、同步代码块以及同步方法之间的区别和关系.mp4 │      高并发编程第一阶段21讲、通过实验分析This锁的存在.mp4 │      高并发编程第一阶段22讲、通过实验分析Class锁的存在.mp4 │      高并发编程第一阶段23讲、多线程死锁分析,案例介绍.mp4 │      高并发编程第一阶段24讲、线程间通信快速入门,使用wait和notify进行线程间的数据通信.mp4 │      高并发编程第一阶段25讲、多Produce多Consume之间的通讯导致出现程序假死的原因分析.mp4 │      高并发编程第一阶段26讲、多线程下的生产者消费者模型,以及详细介绍notifyAll方法.mp4 │      高并发编程第一阶段27讲、wait和sleep的本质区别是什么,深入分析(面试常见问题).mp4 │      高并发编程第一阶段28讲、线程生产者消费者的综合实战结合Java8语法.mp4 │      高并发编程第一阶段29讲、如何实现一个自己的显式锁Lock精讲上.mp4 │      高并发编程第一阶段30讲、如何实现一个自己的显式锁Lock精讲下(让锁具备超时功能).mp4 │      高并发编程第一阶段31讲、如何给你的应用程序注入钩子程序,Linux下演示.mp4 │      高并发编程第一阶段32讲、如何捕获线程运行期间的异常.mp4 │      高并发编程第一阶段33讲、ThreadGroup API介绍之一.mp4 │      高并发编程第一阶段34讲、ThreadGroup API介绍之二.mp4 │      高并发编程第一阶段35讲、线程池原理与自定义线程池.mp4 │      高并发编程第一阶段36讲、自定义个简单的线程池并且测试.mp4 │      高并发编程第一阶段37讲、给线程池增加拒绝策略以及停止方法.mp4 │      高并发编程第一阶段38讲、给线程池增加自动扩充线程数量,以及闲时自动回收的功能.mp4 │      高并发编程第一阶段39讲、课程结束,内容回顾,下季内容预告.mp4 │ ├─第二阶段 │       Java并发编程.png │       ppt+源码.rar │       高并发编程第二阶段01讲、课程大纲及主要内容介绍.wmv │       高并发编程第二阶段02讲、介绍四种Singleton方式的优缺点在多线程情况下.wmv │       高并发编程第二阶段03讲、介绍三种高效优雅的Singleton实现方式.wmv │       高并发编程第二阶段04讲、多线程的休息室WaitSet详细介绍与知识点总结.mp4 │       高并发编程第二阶段05讲、一个解释volatile关键字作用最好的例子.mp4 │       高并发编程第二阶段06讲、Java内存模型以及CPU缓存不一致问题的引入.mp4 │       高并发编程第二阶段07讲、CPU以及CPU缓存的结构,解决高速缓存一致性问题的两种方案介绍.mp4 │       高并发编程第二阶段08讲、并发编程的三个重要概念,原子性,可见性,有序性.mp4 │       高并发编程第二阶段09讲、指令重排序,happens-before规则精讲.mp4 │       高并发编程第二阶段10讲、volatile关键字深入详解.mp4 │       高并发编程第二阶段11讲、volatile关键字总结.mp4 │       高并发编程第二阶段12讲、观察者设计模式介绍.mp4 │       高并发编程第二阶段13讲、使用观察者设计模式观察线程的生命周期.mp4 │       高并发编程第二阶段14讲、单线程执行设计模式,有一个门,始终只能一个人通过-上.mp4 │       高并发编程第二阶段15讲、单线程执行设计模式,有一个门,始终只能一个人通过-下.mp4 │       高并发编程第二阶段16讲、多线程读写锁分离设计模式讲解-上.mp4 │       高并发编程第二阶段17讲、多线程读写锁分离设计模式讲解-中.mp4 │       高并发编程第二阶段18讲、多线程读写锁分离设计模式讲解-下.mp4 │       高并发编程第二阶段19讲、多线程不可变对象设计模式Immutable-上.mp4 │       高并发编程第二阶段20讲、多线程不可变对象设计模式Immutable-下.mp4 │       高并发编程第二阶段21讲、多线程Future设计模式详细介绍-上.mp4 │       高并发编程第二阶段22讲、多线程Future设计模式详细介绍-下.mp4 │       高并发编程第二阶段23讲、第二阶段课程答疑学员问题.mp4 │       高并发编程第二阶段24讲、Guarded Suspension设计模式-上.mp4 │       高并发编程第二阶段25讲、Guarded Suspension设计模式-下.mp4 │       高并发编程第二阶段26讲、ThreadLocal使用详解,深入原理介绍.mp4 │       高并发编程第二阶段27讲、多线程运行上下文设计模式介绍.mp4 │       高并发编程第二阶段28讲、使用ThreadLocal重新实现一个上下文设计模式.mp4 │       高并发编程第二阶段29讲、多线程Balking设计模式-上.mp4 │       高并发编程第二阶段30讲、多线程Balking设计模式-下.mp4 │       高并发编程第二阶段31讲、多线程Producer and Consumer设计模式.mp4 │       高并发编程第二阶段32讲、多线程Count Down设计模式.mp4 │       高并发编程第二阶段33讲、多线程Thread-Per-Message设计模式.mp4 │       高并发编程第二阶段34讲、多线程Two Phase Termination设计模式-上.mp4 │       高并发编程第二阶段35讲、多线程Two Phase Termination设计模式-下.mp4 │       高并发编程第二阶段36讲、多线程Worker-Thread设计模式-上.mp4 │       高并发编程第二阶段37讲、多线程Worker-Thread设计模式-上.mp4 │       高并发编程第二阶段38讲、多线程Active Objects设计模式(接受异步消息的主动对象)-上.mp4 │       高并发编程第二阶段39讲、多线程Active Objects设计模式(接受异步消息的主动对象)-中.mp4 │       高并发编程第二阶段40讲、多线程Active Objects设计模式(接受异步消息的主动对象)-下.mp4 │       高并发编程第二阶段41讲、多线程设计模式内容回顾与总结.mp4 │       高并发编程第二阶段42讲、ClassLoader课程大纲介绍.mp4 │       高并发编程第二阶段43讲、类加载的过程以及类主动使用的六种情况详细介绍.mp4 │       高并发编程第二阶段44讲、被动引用和类加载过程的练习巩固训练题.mp4 │       高并发编程第二阶段45讲、ClassLoader加载阶段发生的故事.mp4 │       高并发编程第二阶段46讲、ClassLoader链接阶段(验证,准备,解析)过程详细介绍.mp4 │       高并发编程第二阶段47讲、ClassLoader初始化阶段详细介绍clinit.mp4 │       高并发编程第二阶段48讲、JVM内置三大类加载器的详细介绍.mp4 │       高并发编程第二阶段49讲、自定义类加载器ClassLoader顺便问候了一下世界.mp4 │       高并发编程第二阶段50讲、ClassLoader父委托机制详细介绍.mp4 │       高并发编程第二阶段51讲、加密解密类加载实战演示.mp4 │       高并发编程第二阶段52讲、加密解密类加载实战演示-续.mp4 │       高并发编程第二阶段53讲、ClassLoader打破双父亲委托机制,重写loadClass实战练习.mp4 │       高并发编程第二阶段54讲、ClassLoader命名空间,运行时包,类卸载详细介绍.mp4 │       高并发编程第二阶段55讲、线程上下文类加载器以及数据库驱动案例分析.mp4 │       └─第三阶段        Java并发编程.png        Java高并发第三阶段(JUC).png        高并发编程第三阶段01讲 AtomicInteger多线程下测试讲解.mkv        高并发编程第三阶段02讲 AtomicInteger API详解,以及CAS算法详细介绍.mkv        高并发编程第三阶段03讲 利用CAS构造一个TryLock自定义显式锁.mp4        高并发编程第三阶段04讲 利用CAS构造一个TryLock自定义显式锁-增强并发情况下.mp4        高并发编程第三阶段05讲 AtomicBoolean源码分析.mp4        高并发编程第三阶段06讲 AtomicLong源码分析.mp4        高并发编程第三阶段07讲 AtomicReference详解,CAS算法带来的ABA问题详解.mp4        高并发编程第三阶段08讲 AtomicStampReference详解,解决CAS带来的ABA问题.mp4        高并发编程第三阶段09讲 AtomicIntegerArray,AtomicLongArray,AtomicReferenceArray讲解.mp4        高并发编程第三阶段10讲 AtomicIntegerFieldUpdater,AtomicLongFieldUpdater,AtomicReferenceFieldUpdater讲解.mp4        高并发编程第三阶段11讲 AtomicXXXFieldUpdater源码分析及使用场景分析.mp4        高并发编程第三阶段12讲 sun.misc.Unsafe介绍以及几种Counter方案性能对比.mp4        高并发编程第三阶段13讲 一个JNI程序的编写,通过Java去调用C,C++程序.mp4        高并发编程第三阶段14讲 Unsafe中的方法使用,一半是天使,一半是魔鬼的Unsafe.mp4        高并发编程第三阶段15讲 Unsafe背后的汇编指令,牛逼男人背后的女人_.mp4        高并发编程第三阶段16讲 CountDownLatch经典案例讲解-上_.mp4        高并发编程第三阶段17讲 CountDownLatch经典案例讲解及API精讲-中_.mp4        高并发编程第三阶段18讲 CountDownLatch经典案例讲解如何给离散平行任务增加逻辑层次关系-下_.mp4        高并发编程第三阶段19讲 CyclicBarrier工具的使用场景介绍_.mp4        高并发编程第三阶段20讲 CyclicBarrier vs CountDownLatch_.mp4        高并发编程第三阶段21讲 Exchanger工具的使用以及常见问题分析-上_.mp4        高并发编程第三阶段22讲 Exchanger工具的使用以及常见问题分析-下_.mp4        高并发编程第三阶段23讲 Semaphore工具的介绍以及借助于Semaphore构造一个Lock_.mp4        高并发编程第三阶段24讲 Semaphore工具API详细介绍-上_.mp4        高并发编程第三阶段25讲 Semaphore工具API详细介绍-下_.mp4        高并发编程第三阶段26讲 Lock&ReentrantLock详细讲解_.mp4        高并发编程第三阶段27讲 ReadWriteLock&ReentrantReadWriteLock详细讲解_.mp4        高并发编程第三阶段28讲 Condition初步使用,提出几个疑问_.mp4        高并发编程第三阶段29讲 关于Condition疑问的几个小实验,对比Wait&Notify_.mp4        高并发编程第三阶段30讲 使用Condition实现一个多线程下的Producer-Consumer_.mp4        高并发编程第三阶段31讲 JDK8-StampedLock详细介绍-上_.mp4        高并发编程第三阶段32讲 JDK8-StampedLock详细介绍-下.mp4        高并发编程第三阶段33讲 ForkJoin框架之RecursiveTask_.mp4        高并发编程第三阶段34讲 ForkJoin框架之RecursiveAction_.mp4        高并发编程第三阶段35讲 Phaser工具的实战案例使用第一部分_.mp4        高并发编程第三阶段36讲 Phaser工具的实战案例使用第二部分_.mp4        高并发编程第三阶段37讲 Phaser工具的实战案例使用第三部分_.mp4        高并发编程第三阶段38讲 Executor&ExecutorService讲解_.mp4        高并发编程第三阶段39讲 ThreadPoolExecutor七大构造参数详细讲解_.mp4        高并发编程第三阶段40讲 ThreadPoolExecutor关闭(很重要)精讲_.mp4        高并发编程第三阶段41讲 newCache&newFixed&single ExecutorService详解_.mp4        高并发编程第三阶段42讲 newWorkStealingPool ExecutorService详解_.mp4        高并发编程第三阶段43讲 Scheduler的前奏Timer&Linux Crontab & quartz比较_.mp4        高并发编程第三阶段44讲 ExecutorService API详细讲解-上_.mp4        高并发编程第三阶段45讲 ExecutorService 四大内置拒绝策略深入探究_.mp4        高并发编程第三阶段46讲 ExecutorService API详细讲解-中_.mp4        高并发编程第三阶段47讲 ExecutorService API详细讲解-下_.mp4        高并发编程第三阶段48讲 Future&Callable详细讲解-上_.mp4        高并发编程第三阶段49讲 Future&Callable详细讲解-下_.mp4        高并发编程第三阶段50讲 CompletionService详细介绍_.mp4        高并发编程第三阶段51讲 ScheduledExecutorService详细讲解-上_.mp4        高并发编程第三阶段52讲 ScheduledExecutorService详细讲解-下_.mp4        高并发编程第三阶段53讲 知识回顾与串联_.mp4        高并发编程第三阶段54讲 课程问题答疑,ExecutorService中的陷阱_.mp4        高并发编程第三阶段55讲 CompletableFuture的使用精讲(体验)-1_.mp4        高并发编程第三阶段56讲 CompletableFuture的使用精讲(构建)-2_.mp4        高并发编程第三阶段57讲 CompletableFuture的使用精讲(熟练)-3_.mp4        高并发编程第三阶段58讲 CompletableFuture的使用精讲(深入)-4_.mp4        高并发编程第三阶段59讲 CompletableFuture的使用精讲(掌握)-5_.mp4        高并发编程第三阶段60讲 LinkedList和有序LinkedList的实现_.mp4        高并发编程第三阶段61讲 跳表数据结构的Java实现-1_.mp4        高并发编程第三阶段62讲 跳表数据结构的Java实现-2_.mp4        高并发编程第三阶段63讲 跳表数据结构的Java实现(解决Bug)-3_.mp4        高并发编程第三阶段64讲 ArrayBlockingList详细讲解_.mp4        高并发编程第三阶段65讲 PriorityBlockingQueue详细讲解_.mp4        高并发编程第三阶段66讲 LinkedBlockingQueue详细讲解_.mp4        高并发编程第三阶段67讲 SynchronousQueue详细讲解_.mp4        高并发编程第三阶段68讲 DelayQueue详细讲解_.mp4        高并发编程第三阶段69讲 LinkedBlockingDeque详细讲解_.mp4        高并发编程第三阶段70讲 LinkedTransferQueue详细讲解_.mp4        高并发编程第三阶段71讲 七大BlockingQueue的特点总结,可以不用详细看_.mp4        高并发编程第三阶段72讲 ConcurrentHashMap性能测试以及JDK1.7原理讲解_.mp4        高并发编程第三阶段73讲 ConcurrentHashMap性能测试以及JDK1.8原理讲解_.mp4        高并发编程第三阶段74讲 ConcurrentSkipListMap详细讲解_.mp4        高并发编程第三阶段75讲 ConcurrentSkipListMap vs ConcurrentHashMap_.mp4        高并发编程第三阶段76讲 ConcurrentLinkedQueue&ConcurrentLinkedDeque_.mp4        高并发编程第三阶段77讲 CopyOnWriteArrayList&CopyOnWriteArraySet源码分析_.mp4        高并发编程第三阶段78讲 ConcurrentLinkedList vs CopyOnWriteArrayList vs SynchronizedList性能对比_.mp4        高并发编程第三阶段79讲 实现一个高并发的无锁队列(Lock-Free).mp4        高并发编程第三阶段80讲 总结与回顾,闲聊与感谢.mp4

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值