1.需求背景
系统程序突然报错,报错信息如下:
The transaction log for database '@dbname' is full. To find out why space in the log cannot be reused, see the log_reuse_wait_desc column in sys.databases
此时查看log文件,已达2T。
当时的紧急处理方案是,移除掉镜像,修改数据库恢复模式(由full修改为simple),收缩日志。
为了防止类似问题再次发生,需对log 文件的大小进行监控,当到达阈值后,触发告警。
2.主要基础组件(类)
配置文件qqmssqltest_db_server_conf.ini
同过此配置文件获取DB Server信息、DB信息、UID信息、邮件服务器信息等。
[sqlserver]
db_user = XXXXXX
db_pwd = XXXXXXX
[sqlserver_qq]
db_host = 110.119.120.114
db_port = 1433
[windows]
user =
pwd =
[mail]
host = zheshiceshidemail.qq.com
port = 25
user =
pwd =
sender = [email protected]
获取连接串的组件mssql_get_db_connect.py
# -*- coding: utf-8 -*-
import sys
import os
import datetime
import configparser
import pymssql
# pip3 install pymssql-2.1.4-cp37-cp37m-win_amd64.whl
# pip3 install pymssql -i https://pypi.doubanio.com/simple
# 获取连接串信息
def mssql_get_db_connect(db_host, db_port):
db_host = db_host
db_port = db_port
db_ps_file = os.path.join(sys.path[0], "qqmssqltest_db_server_conf.ini")
config = configparser.ConfigParser()
config.read(db_ps_file, encoding="utf-8")
db_user = config.get('sqlserver', 'db_user')
db_pwd = config.get('sqlserver', 'db_pwd')
conn = pymssql.connect(host=db_host, port=db_port, user=db_user, password=db_pwd, charset="utf8", login_timeout=5, timeout=600, autocommit=True)
return conn
执行SQL语句的组件mysql_exec_sql.py
# -*- coding: utf-8 -*-
import mysql_get_db_connect
def mysql_exec_dml_sql(db_host, db_port, exec_sql):
conn = mysql_get_db_connect.mysql_get_db_connect(db_host, db_port)
with conn.cursor() as cursor_db:
cursor_db.execute(exec_sql)
conn.commit()
def mysql_exec_select_sql(db_host, db_port, exec_sql):
conn = mysql_get_db_connect.mysql_get_db_connect(db_host, db_port)
with conn.cursor() as cursor_db:
cursor_db.execute(exec_sql)
sql_rst = cursor_db.fetchall()
return sql_rst
def mysql_exec_select_sql_include_colnames(db_host, db_port, exec_sql):
conn = mysql_get_db_connect.mysql_get_db_connect(db_host, db_port)
with conn.cursor() as cursor_db:
cursor_db.execute(exec_sql)
sql_rst = cursor_db.fetchall()
col_names = cursor_db.description
return sql_rst, col_names
发邮件的功能send_monitor_mail.py
# -*- coding: utf-8 -*-
# pip3 install PyEmail
import smtplib
from email.mime.text import MIMEText
import configparser
import os
import sys
# 发送告警邮件
def send_monitor_mail(mail_subject, mail_body, mail_receivers="[email protected] "):
db_ps_file = os.path.join(sys.path[0], "qqmssqltest_db_server_conf.ini")
config = configparser.ConfigParser()
config.read(db_ps_file, encoding="utf-8")
mail_host = config.get('mail', 'host')
mail_port = config.get('mail', 'port')
# mail_user = config.get('mail', 'user')
# mail_pwd = config.get('mail', 'pwd')
sender = config.get('mail', 'sender')
# receivers = config.get('mail', 'receivers')
# 发送HTML格式邮件
message = MIMEText(mail_body, 'html', 'utf-8')
# message = MIMEText(mail_body, 'plain', 'utf-8')
message['subject'] = mail_subject
message['From'] = sender
message['To'] = mail_receivers
try:
smtpObj = smtplib.SMTP()
smtpObj.connect(mail_host, mail_port) # 25 为 SMTP 端口号
# SMTP AUTH extension not supported by server.
# https://github.com/miguelgrinberg/microblog/issues/76
# smtpObj.ehlo()
# smtpObj.starttls()
# smtpObj.login(mail_user, mail_pwd)
smtpObj.sendmail(sender, mail_receivers, message.as_string())
smtpObj.quit()
print("邮件发送成功")
except Exception as e:
print(e)
# except smtplib.SMTPException:
# print("Error: 无法发送邮件")
3.主要功能代码
收集到的DB数据文件的信息保存到表mssql_dblogsize中,其建表的脚本如下:
CREATE TABLE [dbo].[mssql_dblogsize](
[id] [int] IDENTITY(1,1) NOT NULL,
[createtime] [datetime] NULL,
[vip] [nvarchar](100) NULL,
[port] [nvarchar](100) NULL,
[Environment] [nvarchar](200) NULL,
[Dbname] [varchar](200) NULL,
[Logical_Name] [varchar](200) NULL,
[Physical_Name] [varchar](1500) NULL,
[Size] [bigint] NULL,
PRIMARY KEY CLUSTERED
(
[id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
ALTER TABLE [dbo].[mssql_dblogsize] ADD DEFAULT (getdate()) FOR [createtime]
GO
为了方便对表mssql_dblogsize的数据进行管理和展示,在其基础上抽象加工出了一个视图v_mssql_dblogsize,注意Size大小的转换(Size/128/1024 as SizeGB)
创建视图的脚本如下:
CREATE view [dbo].[v_mssql_dblogsize]
as
SELECT [id]
,[createtime]
,[vip]
,[port]
,[Environment]
,[Dbname]
,[Logical_Name]
,[Physical_Name]
,Size/128/1024 as SizeGB
FROM [dbo].[mssql_dblogsize]
where size >50*128*1024
and Physical_Name like '%ldf%'
GO
本测试实例使用的数据库为qqDB,监控的各个DB Server保存在了表QQDBServer中,注意Port 不一定为标准端口1433.
collect_mssql_dblogsize_info.py
# -*- coding: utf-8 -*-
import sys
import os
import configparser
import pymssql
import mssql_get_db_connect
import mssql_exec_sql
from datetime import datetime
def collect_mssql_dblogsize_info():
db_ps_file = os.path.join(sys.path[0], "qqmssqltest_db_server_conf.ini")
config = configparser.ConfigParser()
config.read(db_ps_file, encoding="utf-8")
m_db_host = config.get('sqlserver_qq', 'db_host')
m_db_port = config.getint('sqlserver_qq', 'db_port')
# 获取需要遍历的DB列表
exec_sql_1 = """
SELECT IP, case Port when '1444,1433' then '1433' else Port end as Port, Environment
FROM qqDB.dbo.QQDBServer
where InUse =1 AND ServerType IN ('SQL')
and IP=VIP ;
"""
sql_rst_1 = mssql_exec_sql.mssql_exec_select_sql(m_db_host, m_db_port, exec_sql_1)
for j in sql_rst_1:
db_host_2 = j[0]
db_port_2 = j[1]
db_Environment = j[2]
exec_sql_2 = """
select '""" + db_host_2 + """' as vip, '""" + db_port_2 + """' as port, '""" + db_Environment + """' as Environment,DB_NAME(database_id) AS DatabaseName,
Name AS Logical_Name,
Physical_Name, size
FROM master.sys.master_files;
"""
try:
sql_rst_2 = mssql_exec_sql.mssql_exec_select_sql(db_host_2, db_port_2, exec_sql_2)
except Exception as e:
print(e)
for k in sql_rst_2:
exec_sql_3 = """
insert into qqDB..mssql_dblogsize([vip], [port], [Environment], [Dbname], [Logical_Name], [Physical_Name], [Size])
values('%s', '%s', '%s', '%s', '%s', '%s', '%s');
"""
conn = mssql_get_db_connect.mssql_get_db_connect(m_db_host, m_db_port)
with conn.cursor() as cursor_db:
cursor_db.execute(exec_sql_3 % (k[0], k[1], k[2], k[3], k[4], k[5], k[6] ))
conn.commit()
collect_mssql_dblogsize_info()
告警邮件的功能实现为mssql_alert_dblogsize.py,此份代码的告警阈值设置的为50G,数据来自于视图v_mssql_dblogsize。
# -*- coding: utf-8 -*-
import sys
import os
import configparser
import pymssql
import mssql_get_db_connect
import mssql_exec_sql
import datetime
import send_monitor_mail
import pandas as pd
def mssql_alert_dblogsize():
mail_subject = "SQL Server DB Log Size Greater than 50G, please check!!! "
mail_receivers = "[email protected] "
db_ps_file = os.path.join(sys.path[0], "qqmssqltest_db_server_conf.ini")
config = configparser.ConfigParser()
config.read(db_ps_file, encoding="utf-8")
m_db_host = config.get('sqlserver_qq', 'db_host')
m_db_port = config.getint('sqlserver_qq', 'db_port')
# 获取需要遍历的DB列表
exec_sql_4 = """
SELECT [vip] as IP,[port],[Environment],[Dbname]
,[Logical_Name],[Physical_Name],[SizeGB],[createtime]
FROM qqDB.[dbo].[v_mssql_dblogsize]
order by VIP,Dbname;
"""
sql_rst_4, col_name = mssql_exec_sql.mssql_exec_select_sql_include_colnames(m_db_host, m_db_port, exec_sql_4)
# print(sql_rst_4)
if len(sql_rst_4):
mail_time = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
columns = []
for i in range(len(col_name)):
columns.append(col_name[i][0])
df = pd.DataFrame(columns=columns)
for i in range(len(sql_rst_4)):
df.loc[i] = list(sql_rst_4[i])
mail_body = df.to_html(index=False, justify="left").replace('', ' ')
mail_html = "" + "Deal All : " + "" + "以下数据库的db log文件,已大于50G.请及时检查,谢谢! " + "" + mail_body + ""
send_monitor_mail.send_monitor_mail(mail_subject=mail_subject, mail_body=mail_html, mail_receivers=mail_receivers)
mssql_alert_dblogsize()
4.实现
定时任务是通过windows的计划任务来实现的,在此不做过多的叙述。告警邮件的部分截图如下:
5.附录
1.报错定位,判断是不是log文件过大
https://blog.csdn.net/weixin_30785593/article/details/99912405
2.关于为什么数据库log文件过大,我们可以参考以下分享的文章
https://blog.csdn.net/chinadm123/article/details/44941275
到此这篇关于通过Python实现对SQL Server 数据文件大小的监控告警的文章就介绍到这了,更多相关PythonSQL Server 数据监控告警内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
你可能感兴趣的:(通过Python实现对SQL Server 数据文件大小的监控告警功能)
2018-07-13
小倪_20e7
感赏孩子准点睡觉,今天准点起床,精神饱满,感赏儿子提醒我说了一句费话,有分辨能力,感赏孩子知道自己考的不好,感赏先生接纳孩子的成绩,儿子要求发红包,也奖励他,感赏自己不聚焦成绩,聚焦孩子有积极的一面。感赏孩子今天很放松出去玩。投射孩子对下学期学习计划的充满希望,投射儿子做假期计划,投射儿子明天开始去做计划暑假工,投射儿子在家帮做饭。
别再到处倾诉了
可可易希
文/可可易希新学期,随意打开抖音,感觉全网的教师都在调动,都在重先调整工作。这其中有悲有喜,有自怨自艾,有信心百倍。真希望自己永远活在单纯的世界里,快乐地教书,然而却总能赤裸裸地窥见现实的丑态和无奈。我所在的镇,是全县比较发达的镇了,所以大多数老师都是GXH。我们的镇特别大,所以偏僻的地方又远又偏僻,近的地方就在城郊。这就造成了城郊老师多,山头老师少,并且山头无人去的特殊状况。为了保证教学能正常开
前端请求两个不同的域名跨域
邱杉的博客
The'Access-Control-Allow-Origin'headercontainsmultiplevalues
「RIA学习力」 《故事思维》 NO.5 甄艾
甄艾
「RIA学习力授权导师」便签输出第3期第5天今日内容来自第一章《每个人都应该学会讲的6个故事》有6种类型的故事能有效地提升你的影响力。1.“我是谁”的故事2.“为什么我会在这里”的故事3.“愿景”的故事4“教学”的故事5.“行动价值”的故事6.“我知道你们在想什么”的故事拆页六P19“我为何而来”的故事当人们从你的身上嗅出了欺诈的味道,他们会远远地避开你。我们天生都有警惕心,会怀疑他人的动机。即使
日精进;——203天;
能量在此
分享修身命——上海站!体验入:深刻感受到时间对于我的重要性,比钱更宝贵的就是时间。找核心:不能让时间过我,我要主动的过时间!转身用:告别没有必要的聚会!见面客气而不能解决的话语!!合理的时间让自己更加有精气神(外在气质有型,内在饱满有道)!!!
Nginx实现URL重写
dalaoyang
本文利用Nginx实现URL重写,本文使用Nginx与静态页面配合重写URL。image1.准备工作。结合本文场景,需要安装Nginx。1.1关于Linux系统安装Nginx可以参考我的文章---(传送门)。2.什么是URL重写?URL重写是指将一个URL请求重新写成网站可以处理的另一个URL的过程。这样说可能不是很好理解,举个例子来说明一下,在开发中可能经常遇到这样的需求,比如通过浏览器请求的h
这个世界在我眼中
蔓露清扬
时间是人世间最昂贵的成本!爱情中,女人希望最多的无疑就是男人陪伴自己的时间久一点。陪伴是爱的表现,在女人看来。但男人可能会觉得没出息才会讨好女人,男人看重更多的是自己的事业和能拥有多少财富。男人的世界,有了事业有了钱不愁没女人爱!女人的世界,你给我钱给我事业我要的只是爱!男人觉得女人傻!女人认为男人活的不像人!钱到一定程度就是一串数字,没有情感没有温度,可男人喜欢,乐此不疲!当然,也有在钱和情感中
孩子,你的梦里有梦吗?
关耳人青
某个初春的夜晚,我在梦里睡着了,在那里,飞着我很开心,很快活……在紫色的路灯下,我看到了,梦到了?在那里,一个淡蓝色的玻璃瓶,瓶子里,住着一条小小的金鱼。我很激动、兴奋地拾起,坐上我的小飞车和它一起回家……回到家,妈妈笑着问我,“今天,看到了什么?”我捧起我的小鱼,笑着说:“我看到了它,它也看到了我。”从那天起,我同小鱼天天在一起。不管是吃早饭、睡午觉还是玩游戏。我把小鱼带进了我的世界,而我也跟着
配置docker的代理
东鹏特饮
笔记系列 docker 运维 linux centos ubuntu
目录一.将socks5的代理转换成http的代理二.配置docker使用http的代理三.拉取镜像关闭镜像加速器一.将socks5的代理转换成http的代理1.安装epel-release仓库和privoxy并编辑配置文件yum-yinstallepel-releaseyum-yinstallprivoxyvim/etc/privoxy/config2.内容如下listen-address0.0.
海龟教室的时光(三)
微雨老师
喜爱一朵花,就陪它绽放;爱着一群孩子,就伴他们成长。行走在春光里,眼下已是第七周。1.自主管理进步中当孩子们把自己当做教室的主人,一切都美丽了起来。下雨天,孩子们自行摆放好的雨具:图片发自App宣传委员带领下更新的软板:图片发自App图片发自App小书虫们自发粘贴好书架上残缺的书籍:图片发自App图片发自App晨诵之前大声朗读振士气已经成为常态:图片发自App在同学们共同努力下,又收获一枚银星!老
项目实战-多子集循环嵌套 更新时的处理逻辑
ahauedu
项目实战与案例分析 spring boot 后端
项目实战多子集循环嵌套更新时的处理逻辑商品多子集循环嵌套更新场景时的处理逻辑场景背景:业务中,套餐下面有多个商品,每个商-品又有多个sku。目前分为套餐表、商品表、sku表,现在更新套餐时商品和sku都有可能出现增删改的情况,代码里如何区分是新增修改和删除呢假设我们是SpringBoot项目,在处理套餐、商品、SKU的增删改操作时,可以采用以下方案来区分并处理新增、修改和删除操作。一、前端传递完整
「感恩日语」2021-060篇,一不小心怎么就变老了呢
能学多少学多少
因大学宿舍小七从国外回来,于是计算机班同学因此小聚一下,大学的生活尽管已经过去近20年,但是好像还跟昨天一样。遥远的过去像昨天,而前几年的聚会就像一天中的上午。时间总是在不经意间如白马过隙,上次小聚,看似昨天发生的事情,实则已经是三年前的景色。三年过去了,人还是那些人,但是音容相貌却掩盖不了岁月的侵蚀,刻痕留在了脸颊。思想仿若不断生化,哪些该看淡,哪些最重要,在人生历程中慢慢的深刻体会到了。学习或
电商系统-核心架构思路
allin8116
#高并发下单主要包括以下几个方面:分库分表多应用实例全局唯一订单号数据库连接买家查询订单卖家查询订单扩容问题业务拆分一、分库分表随着订单量的增长,数据库的发展主要经历以下几个步骤:1主-1从架构双主-多从架构,读写分离表分区,提高并发分表,提高并发Master更换SSD分库,分表,提高并发###分库分表实现过程订单分成16个库,每个库64个表进行存储,总共1024个表,mysql单表性能超过千万级
阅读《高效能人士的七个习惯》第11天
N1252杨红梅
今天我阅读了《高效能人士的七个习惯》第十章习惯七不断更新一一平衡的自我提升原则人生最值得的投资就是磨练自己,因为生活与服务人群都得靠自己,这是最珍贵的工具。工作本身并不能带来经济上的安全感,具备良好的思考,学习,创造与适应能力,才能利于不败之地,拥有财富并不代表经济独立,拥有创造财富的能力才真正可靠。那我们要怎样实现自我提升和完善呢?作者给我们的建议是自我提升和完善,它可以从四个层面上去进行更新,
2021年10月30日,星期六
尚汉学
J阴九月廿五(辛丑戊戌辛亥)黄历新说辛金阴柔,具有语言沟通的特点,生在金秋戌月,宜伏藏静守,保持安稳,不宜贸然举事。今日要顺天应人,心存敬畏,凡事要三思而后行,切勿偏执过激。凡动工营建、开业庆典、嫁娶安葬、上任谋职、业务洽谈、投资交易、合作聚会、远行搬家等重要事情,尽量避开此日。辛亥之日,要防范出错,大忌婚姻嫁娶之事。易象解读:天干印星戊土透出月干,土金相生,要顺天应人,切勿偏执过激。辛金坐下亥水
阿里云自研大模型“通义千问”亮相,我们进行了深度实测
桃朵十三
年初以来,AI大模型概念持续引发市场关注,相关上市公司股价持续上扬。在透露正在研发类ChatGPT对话机器人两个月后,阿里终于亮出了自己的研究成果,这也再度推高了中文大模型的热度。4月7日中午,没有高调召开发布会,而是通过官方微信,阿里云宣布自研大模型“通义千问”正式开始邀请用户测试体验。据称,现阶段“通义千问”模型主要定向邀请企业用户进行体验测试。观察者网也率先拿到了“通义千问”的首批测试资格,
Python | Leetcode Python题解之第388题文件的最长绝对路径
Mopes__
分享 Python Leetcode 题解
题目:题解:classSolution:deflengthLongestPath(self,input:str)->int:ans,i,n=0,0,len(input)level=[0]*(n+1)whilei1:length+=level[depth-1]+1ifisFile:ans=max(ans,length)else:level[depth]=lengthreturnans
《光天化日》电影上映在即!看高情商沈腾如何扭转局面
小胡说电影哟
今天我们来说说一个很有意思的男人,沈腾仿佛在今年年初,就已经被推上了舆论的风口浪尖了!看高情商沈腾如何扭转局面!这次沈腾也带来了自己的新电影《光天化日》,阔别以往的喜剧风格,这部电影还是有点突破的!我也比较期待看看沈腾的另一面!现在沈腾通过春节档电影,完全达到“喜剧界天花板”的地位了,这也让很多网友,拿沈腾和周星驰比较!1999年,周星驰的封神之作《喜剧之王》上映时,当时沈腾才20岁呀!考上了军艺
Redis常见问题及解决方案
黑话话梅@卡卡罗特
redis 数据库 java
1.Redis宕机如何保证数据不丢失?将内存的数据持久化到磁盘中,通过RDB和AOF实现。RDB:内存快照,只产生一个一个持久化文件,体积小,速度快,备份方便,缺点没有办法百分比存储数据。AOF:记录写命令,记录数据库的增加和修改,他的有点是格式清晰,保存数据完全,缺点体积较大,恢复速度慢。2.如何保证Redis和数据库的⼀致性?1.采用延时双删方案:通过先删除缓存的数据,在更新数据库的数据并设置
JAVA常用英语汇总(献给所有英语基础差的同学)
Gary_____
java 其他
abstract(关键字)抽象[‘.bstr.kt]accessvt.访问,存取[‘.kses]’(n.入口,使用权)algorithmn.算法[‘.lg.riem]annotation[java]代码注释[.n.u’tei…n]anonymousadj.匿名的[.’n.nim.s]’(反义:directlyadv.直接地,立即[di’rektli,dai’rektli])applyv.应用,适用
前端PWA(Progressive Web App)技术(二)
Good_tea_h
前端 web app
三、PWA的优势相对于原生应用和传统Web应用,PWA具有以下显著优势:四、PWA的应用场景PWA技术因其独特的优势,在多个领域得到了广泛的应用,包括但不限于:五、结论PWA技术作为一种结合了Web应用和原生应用优点的新型应用开发模式,具有跨平台兼容性、可安装性、离线访问、快速加载、沉浸式体验等显著特点。这些特点使得PWA应用能够为用户提供更加流畅、便捷和安全的体验,同时也为开发者提供了更低的开发
5天坚持体验营到底能学到什么?看看他们的故事吧!
张云教坚持
大家好,我是云姐。时间过得真快,2022年已经遥遥在望,不知道你今年的目标完成了多少呢?昨晚,18期体验营热热闹闹地结营了,看到大家的表白和肯定,我特别感激和鼓舞。仔细想想,从当初第一期训练营开始,有些学员已经跟了我两年多了呢,能够不负大家的期望,我真的很开心。今天的体验营学员故事,有反思,有总结,有进步,分享给大家,希望对你有一点帮助!1暖阳在加入云姐五天坚持体验营的前几天,我恰逢经历极度受挫的
【C++】二维数组传参方式
虚拟笔记使
C++ c++ 开发语言
最近刚开始刷剑指offer,刚做到第三题的时候,发现C++二维数组的传参方式和C语言略有些不同,所以在这篇博客中,会列出C/C++常见的二维数组传参方式。(本方式和代码都是基于vs环境所编写)一.C语言二维数组传参方式C语言二维数组传参一般有三个方式。1.指针形式接收#includevoidPrint1(int*parr,introws,intcols)//指针,行数,列数{for(inti=0;
关于“著作权”!2021年10月28日!
傅申1980
关于“著作权”!!(二零二一年,十月二十八日,星期四,上海市,北部,宝山区!!)。我傅申写得东西,从来都不讲究,所谓的“著作权”!!谁爱用,谁用;谁爱摘编,谁摘编!!大家可以自由的进行编辑!!我觉得“著作权”是不太好的,它极大的限制了,人们的交流,思想的传播!!它太经济化了!它说到底,就是人们想办法牟利的一种方法和手段!!我傅申不需要!!我的东西,都是公共产品!!大家共享!!备注:(本文,写作时间
泛型相关内容
AngeliaXue
开发语言 java
1.什么是泛型泛型就是定义一种模板,既实现了编写一次,万能匹配,又通过编译器保证了类型安全。2.使用泛型1)使用泛型时,把泛型参数替换为需要的class类型,不指定时默认为Object。2)可以在接口中定义泛型类型,实现此接口的类必须实现正确的泛型。3.编写泛型1)静态方法的方法参数和返回类型不能使用类定义的泛型,但是它可以在static单独定义泛型,并使用。2)多个泛型类型希望不总是存储相同类型
JRE和JDK概念区分
AngeliaXue
java 开发语言 jdk
1.JREJavaRuntimeEnvironment:java运行环境。JVM+Java类库。开发好的java程序,直接运行,可只安装JRE。2.JDKJavaDevelopmentKit:java软件开发工具包。JRE+Java开发工具。编译、运行java代码。3.总结JRE就是运行Java字节码的虚拟机,而Java字节码需要编译就需要JDK,JDK除了包含JRE还包含编译器、调试器等开发工具
流程控制(多重选择)
AngeliaXue
java 后端 switch 多重选择
1.switch的字符串判断a.普通写法b.优化写法,表达式写法2.switch的赋值a.普通写法b.优化写法,表达式写法3.yield返回返回值4.总结a.switch做多重选择,执行匹配的case语句内容。b.只能是整形,字符串或者枚举类型。c.java14开始,switch语句正式升级为表达式,不再需要break,并且允许使用yield返回返回值。
黑与白
孫艶
简单的白,重复,可以是简约,可以是单调重复的黑,可以是沉稳,可以是黯然在黑白中行走,在黑白中选择表面的透明也不过是黑白不分的灰,美丽如花的黑也被误认为假世间的旖旎,静下来思考,转为黑白分明,重返简单。图片发自App图片发自App图片发自App图片发自App图片发自App图片发自App图片发自App图片发自App
种植什么药材最赚钱收益快?药材市场价格行情如何?
氧惠导师
药材即可供制药的原材料,在中国尤指是中药材,即未经加工或未制成成品的中药原料。那么,现在种植什么药材最赚钱?市场价格行情如何?现整理如下。➤推荐网购返利app“氧惠”,一个领隐藏优惠券+现金返利的平台。氧惠只提供领券返利链接,下单全程都在淘宝、京东、拼多多等原平台,更支持抖音、快手电商、外卖红包返利等。(应用市场搜“氧惠”下载,邀请码:521521,全网优惠上氧惠!)➤由于信息差的关系,很多剁手党
做个孩子王真不容易
dd6eea41175d
做个孩子王真不容易今天又是让老师很有感触的一天,九点多的时候,穆佳林给我打了个电话,说:“尹玉博的信息表,忘带了,李璐欣的信息表撕烂了。康翔没到,所以信息表也没到。樊世怡请假了。”就是一个补课,然后怎么会有这么多的问题?那时那刻,我正在房子里面打扫卫生。满手都是灰尘,但是赶快去接电话。“给李璐欣,和尹玉博请假到十点回去整理信息表!”因为手头没有班里的这个信息表,所以心里很忐忑,樊世怡没给我请假呀!
Spring的注解积累
yijiesuifeng
spring 注解
用注解来向Spring容器注册Bean。
需要在applicationContext.xml中注册:
<context:component-scan base-package=”pagkage1[,pagkage2,…,pagkageN]”/>。
如:在base-package指明一个包
<context:component-sc
传感器
百合不是茶
android 传感器
android传感器的作用主要就是来获取数据,根据得到的数据来触发某种事件
下面就以重力传感器为例;
1,在onCreate中获得传感器服务
private SensorManager sm;// 获得系统的服务
private Sensor sensor;// 创建传感器实例
@Override
protected void
[光磁与探测]金吕玉衣的意义
comsci
这是一个古代人的秘密:现在告诉大家
信不信由你们:
穿上金律玉衣的人,如果处于灵魂出窍的状态,可以飞到宇宙中去看星星
这就是为什么古代
精简的反序打印某个数
沐刃青蛟
打印
以前看到一些让求反序打印某个数的程序。
比如:输入123,输出321。
记得以前是告诉你是几位数的,当时就抓耳挠腮,完全没有思路。
似乎最后是用到%和/方法解决的。
而今突然想到一个简短的方法,就可以实现任意位数的反序打印(但是如果是首位数或者尾位数为0时就没有打印出来了)
代码如下:
long num, num1=0;
PHP:6种方法获取文件的扩展名
IT独行者
PHP 扩展名
PHP:6种方法获取文件的扩展名
1、字符串查找和截取的方法
1
$extension
=
substr
(
strrchr
(
$file
,
'.'
), 1);
2、字符串查找和截取的方法二
1
$extension
=
substr
面试111
文强chu
面试
1事务隔离级别有那些 ,事务特性是什么(问到一次)
2 spring aop 如何管理事务的,如何实现的。动态代理如何实现,jdk怎么实现动态代理的,ioc是怎么实现的,spring是单例还是多例,有那些初始化bean的方式,各有什么区别(经常问)
3 struts默认提供了那些拦截器 (一次)
4 过滤器和拦截器的区别 (频率也挺高)
5 final,finally final
XML的四种解析方式
小桔子
dom jdom dom4j sax
在平时工作中,难免会遇到把 XML 作为数据存储格式。面对目前种类繁多的解决方案,哪个最适合我们呢?在这篇文章中,我对这四种主流方案做一个不完全评测,仅仅针对遍历 XML 这块来测试,因为遍历 XML 是工作中使用最多的(至少我认为)。 预 备 测试环境: AMD 毒龙1.4G OC 1.5G、256M DDR333、Windows2000 Server
wordpress中常见的操作
aichenglong
中文注册 wordpress 移除菜单
1 wordpress中使用中文名注册解决办法
1)使用插件
2)修改wp源代码
进入到wp-include/formatting.php文件中找到
function sanitize_user( $username, $strict = false
小飞飞学管理-1
alafqq
管理
项目管理的下午题,其实就在提出问题(挑刺),分析问题,解决问题。
今天我随意看下10年上半年的第一题。主要就是项目经理的提拨和培养。
结合我自己经历写下心得
对于公司选拔和培养项目经理的制度有什么毛病呢?
1,公司考察,选拔项目经理,只关注技术能力,而很少或没有关注管理方面的经验,能力。
2,公司对项目经理缺乏必要的项目管理知识和技能方面的培训。
3,公司对项目经理的工作缺乏进行指
IO输入输出部分探讨
百合不是茶
IO
//文件处理 在处理文件输入输出时要引入java.IO这个包;
/*
1,运用File类对文件目录和属性进行操作
2,理解流,理解输入输出流的概念
3,使用字节/符流对文件进行读/写操作
4,了解标准的I/O
5,了解对象序列化
*/
//1,运用File类对文件目录和属性进行操作
//在工程中线创建一个text.txt
getElementById的用法
bijian1013
element
getElementById是通过Id来设置/返回HTML标签的属性及调用其事件与方法。用这个方法基本上可以控制页面所有标签,条件很简单,就是给每个标签分配一个ID号。
返回具有指定ID属性值的第一个对象的一个引用。
语法:
&n
励志经典语录
bijian1013
励志 人生
经典语录1:
哈佛有一个著名的理论:人的差别在于业余时间,而一个人的命运决定于晚上8点到10点之间。每晚抽出2个小时的时间用来阅读、进修、思考或参加有意的演讲、讨论,你会发现,你的人生正在发生改变,坚持数年之后,成功会向你招手。不要每天抱着QQ/MSN/游戏/电影/肥皂剧……奋斗到12点都舍不得休息,看就看一些励志的影视或者文章,不要当作消遣;学会思考人生,学会感悟人生
[MongoDB学习笔记三]MongoDB分片
bit1129
mongodb
MongoDB的副本集(Replica Set)一方面解决了数据的备份和数据的可靠性问题,另一方面也提升了数据的读写性能。MongoDB分片(Sharding)则解决了数据的扩容问题,MongoDB作为云计算时代的分布式数据库,大容量数据存储,高效并发的数据存取,自动容错等是MongoDB的关键指标。
本篇介绍MongoDB的切片(Sharding)
1.何时需要分片
&nbs
【Spark八十三】BlockManager在Spark中的使用场景
bit1129
manager
1. Broadcast变量的存储,在HttpBroadcast类中可以知道
2. RDD通过CacheManager存储RDD中的数据,CacheManager也是通过BlockManager进行存储的
3. ShuffleMapTask得到的结果数据,是通过FileShuffleBlockManager进行管理的,而FileShuffleBlockManager最终也是使用BlockMan
yum方式部署zabbix
ronin47
yum方式部署zabbix
安装网络yum库#rpm -ivh http://repo.zabbix.com/zabbix/2.4/rhel/6/x86_64/zabbix-release-2.4-1.el6.noarch.rpm 通过yum装mysql和zabbix调用的插件还有agent代理#yum install zabbix-server-mysql zabbix-web-mysql mysql-
Hibernate4和MySQL5.5自动创建表失败问题解决方法
byalias
J2EE Hibernate4
今天初学Hibernate4,了解了使用Hibernate的过程。大体分为4个步骤:
①创建hibernate.cfg.xml文件
②创建持久化对象
③创建*.hbm.xml映射文件
④编写hibernate相应代码
在第四步中,进行了单元测试,测试预期结果是hibernate自动帮助在数据库中创建数据表,结果JUnit单元测试没有问题,在控制台打印了创建数据表的SQL语句,但在数据库中
Netty源码学习-FrameDecoder
bylijinnan
java netty
Netty 3.x的user guide里FrameDecoder的例子,有几个疑问:
1.文档说:FrameDecoder calls decode method with an internally maintained cumulative buffer whenever new data is received.
为什么每次有新数据到达时,都会调用decode方法?
2.Dec
SQL行列转换方法
chicony
行列转换
create table tb(终端名称 varchar(10) , CEI分值 varchar(10) , 终端数量 int)
insert into tb values('三星' , '0-5' , 74)
insert into tb values('三星' , '10-15' , 83)
insert into tb values('苹果' , '0-5' , 93)
中文编码测试
ctrain
编码
循环打印转换编码
String[] codes = {
"iso-8859-1",
"utf-8",
"gbk",
"unicode"
};
for (int i = 0; i < codes.length; i++) {
for (int j
hive 客户端查询报堆内存溢出解决方法
daizj
hive 堆内存溢出
hive> select * from t_test where ds=20150323 limit 2;
OK
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
问题原因: hive堆内存默认为256M
这个问题的解决方法为:
修改/us
人有多大懒,才有多大闲 (评论『卓有成效的程序员』)
dcj3sjt126com
程序员
卓有成效的程序员给我的震撼很大,程序员作为特殊的群体,有的人可以这么懒, 懒到事情都交给机器去做 ,而有的人又可以那么勤奋,每天都孜孜不倦得做着重复单调的工作。
在看这本书之前,我属于勤奋的人,而看完这本书以后,我要努力变成懒惰的人。
不要在去庞大的开始菜单里面一项一项搜索自己的应用程序,也不要在自己的桌面上放置眼花缭乱的快捷图标
Eclipse简单有用的配置
dcj3sjt126com
eclipse
1、显示行号 Window -- Prefences -- General -- Editors -- Text Editors -- show line numbers
2、代码提示字符 Window ->Perferences,并依次展开 Java -> Editor -> Content Assist,最下面一栏 auto-Activation
在tomcat上面安装solr4.8.0全过程
eksliang
Solr solr4.0后的版本安装 solr4.8.0安装
转载请出自出处:
http://eksliang.iteye.com/blog/2096478
首先solr是一个基于java的web的应用,所以安装solr之前必须先安装JDK和tomcat,我这里就先省略安装tomcat和jdk了
第一步:当然是下载去官网上下载最新的solr版本,下载地址
Android APP通用型拒绝服务、漏洞分析报告
gg163
漏洞 android APP 分析
点评:记得曾经有段时间很多SRC平台被刷了大量APP本地拒绝服务漏洞,移动安全团队爱内测(ineice.com)发现了一个安卓客户端的通用型拒绝服务漏洞,来看看他们的详细分析吧。
0xr0ot和Xbalien交流所有可能导致应用拒绝服务的异常类型时,发现了一处通用的本地拒绝服务漏洞。该通用型本地拒绝服务可以造成大面积的app拒绝服务。
针对序列化对象而出现的拒绝服务主要
HoverTree项目已经实现分层
hvt
编程 .net Web C# ASP.ENT
HoverTree项目已经初步实现分层,源代码已经上传到 http://hovertree.codeplex.com请到SOURCE CODE查看。在本地用SQL Server 2008 数据库测试成功。数据库和表请参考:http://keleyi.com/a/bjae/ue6stb42.htmHoverTree是一个ASP.NET 开源项目,希望对你学习ASP.NET或者C#语言有帮助,如果你对
Google Maps API v3: Remove Markers 移除标记
天梯梦
google maps api
Simply do the following:
I. Declare a global variable:
var markersArray = [];
II. Define a function:
function clearOverlays() {
for (var i = 0; i < markersArray.length; i++ )
jQuery选择器总结
lq38366
jquery 选择器
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
基础数据结构和算法六:Quick sort
sunwinner
Algorithm Quicksort
Quick sort is probably used more widely than any other. It is popular because it is not difficult to implement, works well for a variety of different kinds of input data, and is substantially faster t
如何让Flash不遮挡HTML div元素的技巧_HTML/Xhtml_网页制作
刘星宇
html Web
今天在写一个flash广告代码的时候,因为flash自带的链接,容易被当成弹出广告,所以做了一个div层放到flash上面,这样链接都是a触发的不会被拦截,但发现flash一直处于div层上面,原来flash需要加个参数才可以。
让flash置于DIV层之下的方法,让flash不挡住飘浮层或下拉菜单,让Flash不档住浮动对象或层的关键参数:wmode=opaque。
方法如下:
Mybatis实用Mapper SQL汇总示例
wdmcygah
sql mysql mybatis 实用
Mybatis作为一个非常好用的持久层框架,相关资料真的是少得可怜,所幸的是官方文档还算详细。本博文主要列举一些个人感觉比较常用的场景及相应的Mapper SQL写法,希望能够对大家有所帮助。
不少持久层框架对动态SQL的支持不足,在SQL需要动态拼接时非常苦恼,而Mybatis很好地解决了这个问题,算是框架的一大亮点。对于常见的场景,例如:批量插入/更新/删除,模糊查询,多条件查询,联表查询,