大神带你一天了解zabbix(一)
第15章 Zabbix的搭建
15.1 为什么使用监控服务
- 对系统实现不间断的监控,实现报警通知(电话,微信,邮件,发短信,手环)
- 实时反馈系统当前的状态信息
- 保证服务的可靠安全性
- 保证业务的稳定运行
15.2 监控服务的实现方式
15.2.1 命令实现
15.2.1.1 查看cpu命令
- w
- top
- htop(yum -y install htop)
- glances
15.2.1.2 查看系统内存的命令
free
15.2.1.3 查看系统硬盘的命令
df
15.2.1.4 查看系统进程命令
15.2.1.4.1 top
- us 用户状态(与用户操作有关系)
- sy 系统状态(与内核处理有关系)
- id(id<20%的时候就要报警) 空闲状态(系统CPU空闲状态比)
15.2.1.4.2 htop
15.2.1.5 查看系统负载命令
uptime 监控系统启动时间的信息命令
15.2.1.6 查看网络信息命令
ifconfig/route/glances/iftop/nethogs
15.2.1.7 查看网络连接命令
netstat
15.2.1.8 查看磁盘读写命令
iostat/iotop
15.2.1.9 查看硬件信息命令
vmstat
15.2.2 脚本实现
使用脚本+定时任务来进行
15.2.3 zabbix实现
安装zabbix客户端来实现
15.3 监控服务的软件部署
15.3.1 更新yum源(LTS是稳定源)
15.3.1.1 4.0 yum源的更新
15.3.1.2 3.0 yum源的更新
rpm -ivh https://mirrors.tuna.tsinghua.edu.cn/zabbix/zabbix/3.0/rhel/7/x86_64/zabbix-release-3.0-1.el7.noarch.rpm
15.3.2 安装LAMP架构和zabbix相关的软件
zabbix服务程序软件 zabbix-server-mysql
zabbix服务web软件: zabbix-web-mysql httpd php
数据库服务软件: mariadb-server
[root@zabbix-server ~] # yum install -y zabbix-server-mysql zabbix-web-mysql httpd php mariadb-server
15.3.3 修改zabbix-server服务的配置文件
[root@zabbix-server ~] # vim /etc/zabbix/zabbix_server.conf
91 # DBHost=localhost 指定连接的数据库是本地还是远程,如果是远程,指定IP地址
100 DBName=Zabbix 指定数据库的名称
116 DBUser=Zabbix 指定用户名称
125 DBPassword=Zabbix 指定密码信息
15.3.4 创建数据库和用户
15.3.4.1 启动数据库
[root@zabbix-server ~] # systemctl start mariadb.service
15.3.4.2 创建数据库zabbix
[root@zabbix-server ~] # mysql -uzabbix -pzabbix
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 1884
Server version: 5.5.64-MariaDB MariaDB Server
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]> create database zabbix character set utf8 collate utf8_bin; 创建数据库
MariaDB [(none)]> grant all privileges on zabbix.* to zabbix@localhost identified by 'zabbix'; 创建数据库对用的用户
15.3.4.3 将zabbix数据库信息导入到zabbix数据库
[root@zabbix-server ~] # zcat /usr/share/doc/zabbix-server-mysql-4.0.15/create.sql.gz|mysql -uzabbix -pzabbix zabbix
15.3.5 修改zabbix.conf里面的时区信息
[root@zabbix-server ~] # vim /etc/httpd/conf.d/zabbix.conf
20 php_value date.timezone Asia/Shanghai 修改时区为你创建zabbix所在的时区
15.3.6 重启zabbix服务和LNMP服务
[root@zabbix-server ~] # systemctl start zabbix-server.service httpd mariadb.service
[root@zabbix-server ~] # systemctl enable zabbix-server.service httpd mariadb.service
15.3.6.1 为什么没有启动php服务
- LAMP架构的http服务里面的php是他的一个模块是不需要启动的
- LNMP架构中的nginx服务和php服务是独立的服务,所以需要启动
15.3.7 登录web界面
15.3.7.1 输入10.0.0.71/Zabbix来登录web界面(Admin,zabbix)
15.3.7.2 修改背景颜色和语言
15.3.8 web界面的配置功能使用
15.3.8.1 这会添加监控的服务器发现172.16.1.7根本没有被监控的服务
【zabbix-agent服务的配置】
15.3.8.1.1 在客户端进行更新yum源
15.3.8.1.2 安装zabbix-agent服务
[root@web01 ~] # yum -y install zabbix-agent
15.3.8.1.3 修改配置文件
[root@web01 ~] # vim /etc/zabbix/zabbix_agentd.conf
98 Server=172.16.1.71 指定要哪台服务器可以进行监控我这台服务器
15.3.8.1.4 重启zabbix-agent服务
[root@web01 ~] # systemctl restart zabbix-agent.service
15.3.8.2 添加模板
15.3.8.3 查看服务端和客户端是否连接成功,可以开始监测了
15.3.8.4 连接失败怎么解决(也就是zabbix不变绿或者变红了)
- 使用telnet来进行查看客户端的服务是否可以正常
- 查看模板和主机是否配置正确
- 查看zabbix日志看下
- 查看zabbix-server和zabbix-agent配置文件是否正确
15.4 监控服务的应用过程(基础应用)
15.4.1 监控配置方法
15.4.1.1 本身系统设置好的
15.4.1.1.1 点击配置,在找主机,接着监控项
15.4.1.1.2 发现有许多的过滤项
15.4.1.1.3 点击其中一个应用集,选择下面要具体监控的项
15.4.1.1.4 点击你选择的一个available memory,点击,会发现下图
15.4.1.1.5 点击监测,在点击最新数据,选择你要找的主机和应用集
15.4.1.1.6 图形监测,点击下面的图形
15.4.1.2 自定义监控项
15.4.1.2.1 创建自定义监控项
- 点击配置,主机,监控项,在里面选择创建监控项
- 选择具体的内容
15.4.1.2.2 创建监控项key值
- 客户端的配置(Zabbix-agent)
- 通过配置文件找到系统配置key值的配置文件
[root@web01 ~] # vim /etc/zabbix/zabbix_agentd.conf
268 Include=/etc/zabbix/zabbix_agentd.d/*.conf
- 查看系统的key值配置方法(发现key是自己设置,后面根你具体监控的值或者其他)
- 配置自己的key值
[root@web01 zabbix_agentd.d] # cat user_count.conf
UserParameter=user.count,w | grep -c "pts" 统计当前登录的用户
- 服务端的配置(Zabbix-server)
- 检查key值是否配置成功
- 安装zabbix-get
[root@zabbix-server ~] # yum -y install zabbix-get
- 开始检测
[root@zabbix-server ~] # zabbix_get -s 172.16.1.7 -k user.count 检测成功
1
15.4.1.2.3 点击检测,最新数据,选择你要检测的应用集
15.4.1.2.4 在次登录一个用户
- 在linux界面测试的结果
[root@zabbix-server ~] # zabbix_get -s 172.16.1.7 -k user.count
2
- 在图形界面测试的结果
15.4.2 实现tcp11种状态的监控
15.4.2.1 在客户端配置key值
[root@web01 scripts] # cd /etc/zabbix/zabbix_agentd.d/
[root@web01 zabbix_agentd.d] # vim tcp_eleven_status.conf
UserParameter=tcp_eleven.status[*],netstat -an|grep -ic $1
15.4.2.2 在服务端测试key值配置是否正确(其他自己测试)
[root@zabbix-server ~] # zabbix_get -s 172.16.1.7 -k tcp_eleven.status[LISTEN]
83
[root@zabbix-server ~] # zabbix_get -s 172.16.1.7 -k tcp_eleven.status[ESTABLISHED]
4
15.4.2.3 在web界面配置监控项(如果看不懂,请看我的监控配置方法章节的)
15.4.2.4 查看最终监控的数据(同样看不懂看监控配置方法)
15.4.3 触发器的设置
15.4.3.1 触发器的概念
触发器为了解决人为监控看数据,可以通过设定一个值来进行判断,当到达这个阈值的时候就会触发报警
15.4.3.2 配置触发器功能(自己定义键值监控nginx服务是否正常)
15.4.3.2.1 客户端编写脚本来判断nginx的状态
[root@web01 zabbix_agentd.d] # vim /server/scripts/monitor_web.sh
#!/bin/bash
netstat -lntup|grep -w 80 &>/dev/null
if [ $? -ne 0 ]
then
echo 0
else
echo 1
fi
15.4.3.2.2 客户端配置触发功能
[root@web01 zabbix_agentd.d] # cd /etc/zabbix/zabbix_agentd.d/
[root@web01 zabbix_agentd.d] # cat server.conf
UserParameter=net.tcp.checkweb,/server/scripts/monitor_web.sh
[root@web01 zabbix_agentd.d] #
15.4.3.2.3 在服务端查看键值是否成功
[root@zabbix-server ~] # zabbix_get -s 172.16.1.7 -k net.tcp.checkweb
1 正常
You have new mail in /var/spool/mail/root
15.4.3.2.4 配置监控项
15.4.3.2.5 查看监控数据
15.4.3.2.6 再次更新监控项
15.4.3.2.7 再次查看最新的数据
15.4.3.2.8 配置触发器
15.4.3.2.9 查看触发器是否正常
- 当前状态
- 将nginx服务关闭以后
[root@web01 zabbix_agentd.d] # systemctl stop nginx
You have new mail in /var/spool/mail/root
[root@web01 zabbix_agentd.d] #
15.4.3.2.10 给触发器加入声音报警功能
如果不行,就需要清除下浏览器缓存在看下
15.4.3.2.11 更换报警声音
<option value="alarm_disaster.mp3" selected="selected">alarm_disaster</option> 复制出来的内容
- 查看zabbix所在的站点
[root@zabbix-server ~] # cd /etc/httpd/conf.d/
You have new mail in /var/spool/mail/root
[root@zabbix-server conf.d] # vim zabbix.conf 配置文件所在的目录
#
# Zabbix monitoring system php web frontend
#
Alias /zabbix /usr/share/zabbix
<Directory "/usr/share/zabbix"> Zabbix所在的站点目录
Options FollowSymLinks
AllowOverride None
- 通过find命令查看音乐播放文件
[root@zabbix-server conf.d] # find /usr/share/zabbix -name "alarm_disaster.mp3" 查找
/usr/share/zabbix/audio/alarm_disaster.mp3 查找出来的结果
[root@zabbix-server conf.d] # cd /usr/share/zabbix/audio/ 切换到这个目录下
[root@zabbix-server audio] # ls
alarm_average.mp3 alarm_disaster.mp3 alarm_high.mp3 alarm_information.mp3 alarm_ok.mp3 alarm_warning.mp3 no_sound.mp3 可以又很多音乐文件,将自己的音乐文件放进去,更换成你要换的名字即可
如果出现不会播放更换自己的音乐,你要自己清除下缓存即可
15.4.4 实现不同的方法来进行报警
15.4.4.1 为什么需要实现多种
- 人们查看信息方式的不同
- 时间地点不同的时候也需要不同的方式来进行报警
- 多种办法可以使事情在发生的时候能够更快的处理
15.4.4.2 邮件报警
15.4.4.2.1 配置报警媒介(你要选择那个来进行报警)
15.4.4.2.2 配置要发送给谁
15.4.4.2.3 发送什么内容,通过什么介质发送
15.4.4.2.4 编写邮件脚本,放入服务端
- 查看zabbix存在脚本的路径
[root@zabbix-server audio] # vim /etc/zabbix/zabbix_server.conf
508 ### Option: AlertScriptsPath
509 # Full path to location of custom alert scripts.
510 # Default depends on compilation options.
511 # To see the default path run command "zabbix_server --help".
512 #
513 # Mandatory: no
514 # Default:
515 # AlertScriptsPath=${datadir}/zabbix/alertscripts
516
517 AlertScriptsPath=/usr/lib/zabbix/alertscripts 存放脚本的路径
- 将脚本放入到这个目录下面
- 脚本的编写代码信息
[root@zabbix-server alertscripts] # cat mail_163.py
#!/usr/bin/python
#coding:utf-8
import smtplib
from email.mime.text import MIMEText
import sys
mail_user = '460523471@qq.com' 指定你设置的邮箱
mail_pass = 'enoncgdkvjhlbjbd' 你的验证密码
def send_mail(to_list,subject,content):
me = "zabbix 监控告警平台"+"<"+mail_user+">"
msg = MIMEText(content, 'plain', 'utf-8')
msg['Subject'] = subject
msg['From'] = me
msg['to'] = to_list
try:
s = smtplib.SMTP("smtp.qq.com", 25) 这儿你的smtp服务器是qq就写qq,是其他就写其他
s.login(mail_user,mail_pass)
s.sendmail(me,to_list,msg.as_string())
s.close()
return True
except Exception,e:
print str(e)
return False
if __name__ == "__main__":
send_mail(sys.argv[1], sys.argv[2], sys.argv[3])
You have new mail in /var/spool/mail/root
- 脚本开始测试
15.4.4.2.5 邮件测试
- 将nginx服务模拟停止
[root@web01 zabbix_agentd.d] # systemctl stop nginx
[root@web01 zabbix_agentd.d] #
- 查看动作日志
- 查看163邮箱
15.4.4.3 微信报警
15.4.4.3.1 配置报警媒介(你要选择那个来进行报警)
- 到这里我们发现脚本名称是什么?下面的3个变量具体是干什么的,为什么是这3个宏来指定这些信息,根据这些问题,我们发现我们不能先配置web界面,需要先将微信和linux界面的东西配置好
15.4.4.3.2 配置企业微信
https://work.weixin.qq.com/wework_admin/loginpage_wx--------登陆进去,注册登陆
- 查找企业ID,在我的企业里面
- 在应用管理选择创建应用
- 随便写
15.4.4.3.3 配置linux界面weixin脚本
- 授予执行权限,如果出现报错,说找不见request包的时候,需要使用pip install request来进行安装,如果pip没有,可以使用yum install python-pip安装,在使用pip安装request
- pip安装过程中失败可以使用
[root@zabbix-server alertscripts] # cat ~/.pip/pip.conf
[global]
index-url = https://mirrors.aliyun.com/pypi/simple/
[install]
trusted-host=mirrors.aliyun.com
You have new mail in /var/spool/mail/root
[root@zabbix-server alertscripts] #
- 微信脚本内容拿出来进行更改
[root@zabbix-server alertscripts] # cat weixin.py
#!/usr/bin/env python
#-*- coding: utf-8 -*-
#author: yanggd
#date: 2018-04-20
#comment: zabbix接入微信报警脚本
import requests
import sys
import os
import json
import logging
logging.basicConfig(level = logging.DEBUG, format = '%(asctime)s, %(filename)s, %(levelname)s, %(message)s',
datefmt = '%a, %d %b %Y %H:%M:%S',
filename = os.path.join('/tmp','weixin.log'),
filemode = 'a')
corpid='ww3ff5e031e93d32d9' 写成自己的企业ID
appsecret='qG_KF_Ot2yUnevM0K3b8PaoOC7zqZT3IZwx_o9JeHcc' 写成自己的secury
agentid=1000002 写成自己的AgentID
#获取accesstoken
token_url='https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=' + corpid + '&corpsecret=' + appsecret
req=requests.get(token_url)
accesstoken=req.json()['access_token']
#发送消息
msgsend_url='https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=' + accesstoken
touser=sys.argv[1]
subject=sys.argv[2]
#toparty='3|4|5|6'
message=sys.argv[2] + "\n\n" +sys.argv[3]
params={
"touser": touser,
# "toparty": toparty,
"msgtype": "text",
"agentid": agentid,
"text": {
"content": message
},
"safe":0
}
req=requests.post(msgsend_url, data=json.dumps(params))
logging.info('sendto:' + touser + ';;subject:' + subject + ';;message:' + message)
- 运行自己的微信脚本
[root@zabbix-server alertscripts] # ./weixin.py LiangYuXing test_info "we check nginx"
15.4.4.3.4 配置web界面,实现可以微信接收信息
{ALERT.SENDTO}
{ALERT.SUBJECT}
{ALERT.MESSAGE}
- 配置发送给谁
- 发送什么内容,通过什么介质
- 微信测试
- 将nginx服务停止
[root@web01 zabbix_agentd.d] # systemctl stop nginx
- 查看动作日志
- 查看企业微信
`15.4.4.4 电话或者短信报警
15.4.4.4.1 睿象云平台设置
https://user.aiops.com/pages/v2/login?from=oneacaoptcmfhaot--------登录注册
- 选择CA报警方式
- 点击集成,选择zabbix监控
- 接着我们会看见安装Agent(这个Agent是安装在服务端的,不是客户端)
15.4.4.4.2 安装Agent
- 切换到zabbix脚本目录
[root@zabbix-server ~] # cd /usr/lib/zabbix/alertscripts/
- 获取Cloud Alert Agent包:
[root@zabbix-server alertscripts] # wget https://download.aiops.com/ca_agent/zabbix/ca_zabbix_release-2.1.0.tar.gz
- 解压
[root@zabbix-server alertscripts] # tar -xzf ca_zabbix_release-2.1.0.tar.gz
[root@zabbix-server alertscripts] #
[root@zabbix-server alertscripts] # cd cloudalert/bin
- 开始安装
[root@zabbix-server bin] # bash install.sh 72f622ad-9b2c-76ea-41c9-3c5de8be95e5
start to create config file...
Zabbix管理地址: http://10.0.0.71/zabbix/ 你zabbix的登录地址,不需要加index.php
Zabbix管理员账号: Admin
Zabbix管理员密码(zabbix) 上面默认不显示
15.4.4.4.3 zabbixweb界面查看
15.4.4.4.4 睿象云配置电话或者短信给谁打或者发送
15.4.4.4.5 查看是否电话可以通知
- 将nginx服务关闭
[root@web01 ~] # systemctl stop nginx
[root@web01 ~] #
- 查看电话,短信,qq邮箱信息
15.4.5 监控图形的显示
15.4.5.1 系统自带的监控图形
15.4.5.2 自定义图形
15.4.5.3 图形字符集的优化
15.4.5.3.1 现在的图形文字显示
15.4.5.3.2 查找存放字符集的目录
- 查看站点目录
15.4.5.3.3 切换到站点目录
[root@zabbix-server fonts] # cd /usr/share/zabbix/assets/fonts
[root@zabbix-server fonts] # ll
15.4.5.3.4 将windows电脑上面的字符集放入到linux服务器上面
- windows路径: C:\Windows\Fonts------选择自己喜欢的字符集放入到linux目录里面
- 修改名字为现在上面的软连接名字
[root@zabbix-server fonts] # mv graphfont.ttf graphfont.ttf_backup
[root@zabbix-server fonts] # mv msyh.ttc graphfont.ttf
[root@zabbix-server fonts] # ls
graphfont.ttf graphfont.ttf_backup
[root@zabbix-server fonts] #
15.4.5.3.5 再次查看文字
15.4.5.4 使用grafana结合zabbix来设置图形
15.4.5.4.1 下载grafana
官方网址链接: https://grafana.com/
告示:只是告诉你们,具体我这里有下载地址
15.4.5.4.2 开始下载
[root@zabbix-server fonts] # wget https://mirrors.tuna.tsinghua.edu.cn/grafana/yum/rpm/grafana-6.5.1-1.x86_64.rpm
15.4.5.4.3 本地rpm包安装
[root@zabbix-server fonts] # yum localinstall -y grafana-6.5.1-1.x86_64.rpm
15.4.5.4.4 启动grafana
[root@zabbix-server ~] # systemctl restart grafana-server.service
[root@zabbix-server ~] # systemctl enable grafana-server.service
Created symlink from /etc/systemd/system/multi-user.target.wants/grafana-server.service to /usr/lib/systemd/system/grafana-server.service.
[root@zabbix-server ~] #
15.4.5.4.5 web界面登录
账号:admin 密码:admin
15.4.5.4.6 下载zabbix和grafana结合的zabbix插件(一)
- 查找zabbix的ID和版本号
[root@zabbix-server ~] # grafana-cli plugins list-remote | grep zabbix
id: alexanderzobnin-zabbix-app version: 3.10.4
You have new mail in /var/spool/mail/root
[root@zabbix-server ~] #
- 插件下载的路径
https://grafana.com/api/plugins/alexanderzobnin-zabbix-app/versions/3.10.4/download
- 创建插件目录
[root@zabbix-server ~] # mkdir -p /var/lib/grafana/plugins
- 将插件解压
[root@zabbix-server plugins] # unzip grafana_zabbix插件.zip
- 解压的结果
- 重启grafana
[root@zabbix-server ~] # systemctl restart grafana-server.service
[root@zabbix-server ~] #
通过grafana-cli plugins install来安装
- 查找zabbix的ID和版本号
[root@zabbix-server ~] # grafana-cli plugins list-remote | grep zabbix
id: alexanderzobnin-zabbix-app version: 3.10.4
You have new mail in /var/spool/mail/root
[root@zabbix-server ~] #
- 安装
[root@zabbix-server ~] # grafana-cli plugins install alexanderzobnin-zabbix-app
- 重启grafana
[root@zabbix-server ~] # systemctl restart grafana-server.service
[root@zabbix-server ~] #
15.4.5.4.8 再次打开web界面
zabbix模板的介绍
15.4.6.1 为什么需要监控模板
配置监控模板,可以少很多重复的工作,可以提高工作效率
15.4.6.2 怎么配置模板
15.4.6.3 怎么能借鉴别人的模板里面的内容变成自己的内容
15.4.7 zabbix自动发现主机(网络发现)
15.4.7.1 还原最初始的状态
15.4.7.2 点击配置自动发现
15.4.7.3 点击配置,然后选择动作
15.4.7.4 测试是否可以自动发现(监测-自动发现)
- 注意:监测失败或者一直没有怎么解决
- 查看服务端日志信息(tail -f /var/log/zabbix/zabbix_server.log)
- 服务端日志没报错的情况,可以重启服务端看下
15.4.8 监控维度信息
15.4.8.1 面试:你了解监控吗? 你们公司是如何实现监控的?
15.4.8.1.1 硬件监控
- 服务器
- 路由器
- 交换机
- 防火墙
15.4.8.1.2 系统监控
- CPU
- 内存
- 磁盘
- 网络
- 进程
- TCP
15.4.8.1.3 服务监控
- nginx
- php
- tomcat
- redis
- memcache
- mysql
15.4.8.1.4 网站监控
- 请求时间
- 响应时间
- 加载时间
15.4.8.1.5 日志监控
- ELK(收集 存储 分析 展示)
- 日志易
15.4.8.1.6 安全监控
- Firewalld
- WAF(Nginx+lua)
- 安全宝
- 牛盾云
- 安全狗
15.4.8.1.7 网络监控
- smokeping
- 监控宝
- 站长工具
- 奇云测
- 多机房
15.4.8.1.8 业务监控
- 活动产生多少流量
- 产生多少注册量
- 带来多少价值
大神带你一天了解zabbix(一)的更多相关文章
- 老猪带你玩转自定义控件三——sai大神带我实现ios 8 时间滚轮控件
ios 8 的时间滚轮控件实现了扁平化,带来很好用户体验,android没有现成控件,小弟不才,数学与算法知识不过关,顾十分苦恼,幸好在github上找到sai大神实现代码,甚为欣喜,顾把学习这个控件 ...
- 【附案例】UI交互设计不会做?设计大神带你开启动效灵感之路
随着网络技术的创新发展,如今UI交互设计应用越来越广泛,显然已经成为设计的主流及流行的必然趋势.UI界面交互设计中的动效包括移动,滑块,悬停效果,GIF动画等.UI界面交互设计为何越来越受到青睐?它有 ...
- Java大神带你领略queue的风采
作为数据结构中比较常见的类型,你足够了解队列(queue)吗?从今天开始,我将为你讲解关于队列(queue)的一切,包括概念.类型和具体使用方法,如果你对此足够感兴趣,赶快来加入我们,我将同你一起探索 ...
- 酷派大神F2系列使用QPST进行nv备份和恢复,解决无信号问题(附备份文件)
测试机器: 大神F2联通版 8675_W00 系统COOLUI55 写贴原因: 自己无意间刷错了包,结果手机无信号,进入工程模式怎么设置都没有用.尝试过系统还原(备份过).刷新的ROM.线刷, ...
- wire与reg的区别?转载大神!
本文转自:http://www.cnblogs.com/thymon/archive/2010/06/09/1754541.html //------------------------------- ...
- 兄台息怒,关于arguments,您的想法和大神是一样一样的----闲聊JS中的apply和call
JavaScript提供了apply和call两种调用方式来确定函数体中this的指向,表现出来的特征就是:对象可以'借用'其他对象的方法.之前的几篇博客回顾了一些Web控件的一些开发方法,我们聊了如 ...
- 有关UITableViewCell的侧滑删除以及使用相关大神框架MGSwipeTableCell遇到的小问题
提起笔,却不知道从何写起了,今天一整天都耗费在了这个可能根本不算是问题的小问题上,至今仍有一种蛋蛋的忧桑..(噢,不是提笔,是键盘手T_T) 表格视图在项目中就像是每日的家常便饭,在cell上添加侧滑 ...
- dropout理解:1神带9坑
Dropout是深度学习中防止过拟合的一项非常常见的技术,是hinton大神在12年提出的一篇论文里所采用的方法.有传言hinton大神的数学功底不是很好,所以他所提出的想法背后的数学原理并不是很复杂 ...
- 实战经验|大神战队都在i春秋教你打CTF
全国大学生信息安全竞赛创新实践能力赛旨在培养.选拔.推荐优秀信息安全专业人才创造条件,促进高等学校信息安全专业课程体系.教学内容和方法的改革,培养学生的创新意识与团队合作精神,普及信息安全知识,增强学 ...
随机推荐
- lqb 基础练习 十六进制转十进制
基础练习 十六进制转十进制 时间限制:1.0s 内存限制:512.0MB 问题描述 从键盘输入一个不超过8位的正的十六进制数字符串,将它转换为正的十进制数后输出. 注:十六进制数中的10~ ...
- 2019CSP day1t2 括号树
题目背景 本题中合法括号串的定义如下: () 是合法括号串. 如果 A 是合法括号串,则 (A) 是合法括号串. 如果 A,B 是合法括号串,则 AB 是合法括号串. 本题中子串与不同的子串的定义如下 ...
- Json用途
Json用途 转自:https://www.cnblogs.com/daikefeng/p/6366229.html JSON定义 JSON(JavaScript Object Notation) ...
- 源码包的安装、rsync同步、inotify监测
一.源码包的安装 1.源码包的作用:yum 使用的是rpm包,rpm包安装的不能指定安装位置 源码包可以按需选择/定制,及时修复bug ,适用于各种平台 2.大致过程:源码包——>make gc ...
- 勾股数专题-SCAU-1079 三角形-18203 神奇的勾股数(原创)
勾股数专题-SCAU-1079 三角形-18203 神奇的勾股数(原创) 大部分的勾股数的题目很多人都是用for来便利,然后判断是不是平方数什么什么的,这样做的时候要对变量类型和很多细节都是要掌握好的 ...
- PHP中的服务容器与依赖注入的思想
依赖注入 当A类需要依赖于B类,也就是说需要在A类中实例化B类的对象来使用时候,如果B类中的功能发生改变,也会导致A类中使用B类的地方也要跟着修改,导致A类与B类高耦合.这个时候解决方式是,A类应该去 ...
- Linux安装redis数据库
这几天在搞redis数据库,花了好大功夫,才成功安装在Linux上,这里将自己的安装步骤分享出来,同时也做个记录,备忘. 新人一枚,不对之处,请多指教! 首先登陆Linux服务器 Linux里,我习惯 ...
- java的回调和C#的委托
曾经有人对我说java的回调很巧妙. 今天我自己看了一下,回调的关键就是一个接口的事情. 也许是因为用了一定的手法,一开始不好懂吧,所以看懂了会感觉巧妙. 但是我心里的想法却是,真啰嗦! 回调的实例 ...
- 请求https前缀的网站验证SSL证书的解决方案之一
from requests.packages.urllib3.exceptions import InsecureRequestWarning # 禁用安全请求警告requests.packages. ...
- Spring(Bean)5
spel <bean id="address" class="com.atguigu.spring.beans.spel.Address"> < ...