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 数据文件大小的监控告警功能)
[Ubuntu 20.04]Realtek ALC294无声音解决
CatTomCSDN
ubuntu linux
本文首发于本人博客:[Ubuntu20.04]RealtekALC294无声音解决目录环境问题解决附:查看你使用的声卡型号参考环境ASUSFL8000UUbuntu20.04问题RealtekALC294声卡在Ubuntu20.04下外放/耳机无声音估计这个问题应该只要是ASUS都可能会遇到,不论笔记本还是主板…解决修改/etc/modprobe.d/alsa-base.conf在文件的最后添加o
JavaScript系列(68)--运行时优化技术详解
ᅟᅠ 一进制
JavaScript javascript java 前端
JavaScript运行时优化技术详解今天,让我们深入探讨JavaScript的运行时优化技术。运行时优化是提升JavaScript应用性能的另一个关键环节,它关注代码在实际执行过程中的性能表现。运行时优化基础概念小知识:JavaScript运行时优化是指在代码执行过程中,通过各种技术手段来提高代码的执行效率。这包括即时编译(JIT)、内联缓存、类型特化等技术。基本优化实现//1.函数执行优化器c
土星云NAS企业网盘:AI引领的未来办公新纪元
土星云SaturnCloud
产品 人工智能 计算机外设 图像处理 机器学习
网络存储服务器(NAS)是一种通过局域网提供文件级别数据存储的系统设备方案,不仅为个人家庭的影音娱乐所用,也可以作为企业的数据文件存储平台。但是传统NAS设备并非专为企业应用所设计,硬件可靠性不足,软件操作复杂更难言数据安全管理,如何在满足数据存储需求的基础上更进一步高效协同智慧办公成了待解的难题。土星云NAS企业网盘为企业用户带来了全新的最优答案,它是由北京国科环宇科技股份有限公司和杭州可道云网
监控系统和AI辅助建议功能的实现
后端
家里小朋友养了一只小乌龟,到了冬天就冬眠了,早早地准备了一个冬眠箱,铺上椰土,在室温低于15℃时,就把小乌龟放到冬眠箱里,不一会儿它就自己钻入土中把自己藏了起来。按照惯例,需要每隔一定时间,对冬眠箱进行补水,以保持土壤湿润,防止小乌龟缺水,但有时候也会忘记补水的工作,造成冬眠箱过于干燥,不利于乌龟健康。翻箱倒柜,找到一个9年前买的树莓派2ModelB,32位,4核1GB的设备,正好可以利用起来,做
如何利用缺陷项目统计表提高项目管理效率?
项目管理
在软件开发过程中,缺陷管理是项目管理的关键环节之一。缺陷项目统计表作为一种有效的工具,能够帮助项目经理和团队成员更好地掌握项目质量状况,从而提高项目管理效率。本文将深入探讨如何充分利用缺陷项目统计表,以优化项目流程,提升产品质量。缺陷项目统计表不仅仅是一个简单的数据记录工具,它能够为项目管理提供全面的洞察。通过系统性地收集、分析和呈现缺陷数据,项目团队可以更快速地识别问题模式,制定有针对性的改进策
为什么DevOps很好,但却很难落地
devops
DevOps的优势在于加速交付、提升协作效率、增强系统稳定性,但落地难的核心原因集中在文化冲突、技术复杂性、流程脱节三大层面。以文化冲突为例,传统开发与运维团队的“部门墙”是最大阻碍。开发团队追求快速迭代,而运维团队强调稳定可控,两者的目标天然对立。根据2023年《全球DevOps现状报告》,78%的企业承认“跨部门协作不足”是转型失败的主因。正如GeneKim在《DevOps实践指南》中所说:“
C++ 多态与 C# 的公有继承详解
雪域Code
c++ c# 开发语言 C#
多态是面向对象编程中的一个重要概念,它能够实现在父类引用指向子类对象时的动态绑定,从而在运行时确定调用哪个子类对象的方法。C++和C#是两种流行的面向对象编程语言,在多态性和继承方面有一些共同之处,但也存在一些差异。本文将详细讨论C++中的多态和C#中的公有继承,并附带相应的源代码示例。首先,让我们来看一下C++中的多态性。在C++中,实现多态性通常需要通过虚函数和基类指针或引用来实现。虚函数是在
qt UI设计架构对比
yaofei2006
qt ui 架构
在Qt中,UI设计架构的选择对应用程序的可维护性、扩展性和开发效率有重要影响。以下是几种常见的QtUI设计架构及其对比:1.MVC(Model-View-Controller)MVC是一种经典的设计模式,将应用程序分为三个部分:Model:管理数据和业务逻辑。View:负责显示数据(UI)。Controller:处理用户输入并更新Model和View。在Qt中的实现Model:使用QAbstrac
Django ORM - 聚合查询
lsx202406
开发语言
DjangoORM-聚合查询引言Django是一个强大的PythonWeb框架,它拥有一个功能丰富的对象关系映射(Object-RelationalMapping,简称ORM)。ORM允许开发者以Python类和对象的交互方式来操作数据库,而不是直接编写SQL查询。本文将深入探讨DjangoORM中的聚合查询功能,包括其基本用法、常用函数以及在实际开发中的应用场景。聚合查询简介聚合查询,顾名思义,
调用DeepSeek API接口:实现智能数据挖掘与分析
IT·小灰灰
数据挖掘 人工智能 python java javascript
在当今数据驱动的时代,企业和开发者越来越依赖高效的数据挖掘与分析工具来获取有价值的洞察。DeepSeek作为一款先进的智能数据挖掘平台,提供了强大的API接口,帮助用户轻松集成其功能到自己的应用中。本文将详细介绍如何调用DeepSeekAPI接口,并探讨其在数据挖掘与分析中的应用。目录一、DeepSeekAPI接口概述二、调用DeepSeekAPI的基本步骤2.1获取API密钥2.2构建HTTP请
Windows下Kanass简明安装教程(入门级)
烟雨下扬州
jira
Kanass是一款国产开源免费的项目管理工具,工具简洁易用、开源免费。本文将介绍如何在windows下安装配置kanass。1、安装下载,下载地址:Kanass-下载,下载安装包如tiklab-kanass.1.0.4.exe安装,双击exe文件安装应用启动,双击应用程序或桌面Kanass应用图标,启动应用2、登录应用启动成功控制台会显示应用访问地址,浏览器输入http://ip:9500打开应用
《Operating System Concepts》阅读笔记:p17-p25
操作系统
《OperatingSystemConcepts》学习第5天,p17-p25总结,总计9页。一、技术总结1.计算机系统的组成结构(1)CPU—Thehardwarethatexecutesinstructions.(2)Processor—AphysicalchipthatcontainsoneormoreCPUs.(3)Core—ThebasiccomputationunitoftheCPU.(
如何编写有效的管理系统测试文档模板?
项目管理
管理系统测试文档模板是确保软件质量和项目成功的关键工具。一个优秀的测试文档模板不仅能提高测试效率,还能促进团队协作,减少错误和疏漏。本文将深入探讨如何编写有效的管理系统测试文档模板,为研发项目管理从业者提供实用的指导和建议。测试文档模板的重要性在管理系统开发过程中,测试文档模板扮演着至关重要的角色。它不仅是测试过程的指南,更是项目质量的保证。一个设计良好的模板能够:1.标准化测试流程:通过统一的格
介绍gruntwork模块服务和体系结构目录
weixin_26755331
python linux java
Today,I’mexcitedtorevealthenewdesignoftheGruntworkInfrastructureasCodeLibrary(IaCLibrary):今天,我很高兴地将Gruntwork基础结构的新设计作为代码库(IaC库)予以揭示:TheGruntworkModuleCatalogBuildyourinfrastructurebymixing&matchinghun
解决方案之高效检测PDF文件中的XSS攻击问题
引言随着互联网的普及和数字化办公的推进,PDF(PortableDocumentFormat)文件已成为信息交换的重要载体。然而,PDF文件的安全性问题也日益凸显,尤其是跨站脚本攻击(Cross-SiteScripting,XSS)的威胁。XSS攻击通过在PDF文件中嵌入恶意脚本,当用户打开文件时,脚本会在其浏览器中执行,可能导致敏感信息泄露、会话劫持等严重后果。因此,高效检测PDF文件中的XSS
【Spring Boot】Spring AOP动态代理,以及静态代理
web13508588635
面试 学习路线 阿里巴巴 spring spring boot 后端
目录SpringAOP代理一.代理的概念二.静态代理三.JDK代理3.1重写invoke方法进?功能增强3.2通过Proxy类随机生成代理对象四.CGLIB代理4.1自定义类来重写intercept方法4.2通过Enhancer类的create方法来创建代理类五.AOP源码剖析总结(重中之重,精华)SpringAOP代理一.代理的概念根据前面的学习想必大家都已经对SpringAOP有所了解了,接下
在Linux系统上使用nmcli命令配置各种网络(有线、无线、vlan、vxlan、路由、网桥等)
web13508588635
linux 网络 服务器
1、更新于2024/5/13,新增VethPair配置2、更新于2024/5/19,修复NetworkManager接管网络配置无效的错误3、更新于2024/5/20,新增Ubuntu两种版本下NetworkManager接管网络的配置目录一、配置NetworkManager接管网络(选)安装Network-Manager并启动netplan管理网络的系统ifupdown管理网络的系统二、nmcl
深入理解Kafka—如何保证Exactly Once语义
AI天才研究院
Python实战 自然语言处理 人工智能 语言模型 编程实践 开发语言 架构设计
作者:禅与计算机程序设计艺术1.简介Kafka是一种高吞吐量、分布式、可分区、多副本的消息系统。它在使用上非常灵活,可以作为Pulsar、RabbitMQ的替代品。但同时也带来了一些复杂性和问题,比如ExactlyOnce语义。从本质上说,ExactlyOnce就是对消费者读取的数据只要不丢失,就一定能得到一次完整的处理,而且不会被重复处理。确保ExactlyOnce语义一直是企业级应用中必须考虑
DeepSeek与ChatGPT的全面对比
测试者家园
人工智能 ChatGPT DeepSeek ChatGPT DeepSeek 人工智能 质量效能
在人工智能(AI)领域,生成式预训练模型(GPT)已成为推动技术革新的核心力量。OpenAI的ChatGPT自发布以来,凭借其卓越的自然语言处理能力,迅速占据市场主导地位。然而,近期中国AI初创公司DeepSeek推出的R1模型,以其高效性和低成本,迅速引起全球关注。本文将深入探讨DeepSeek与ChatGPT的技术差异、性能表现以及各自的应用前景,旨在为读者提供全新的视角和启发。一、技术架构与
【kafka系列】生产者
漫步者TZ
kafka kafka 数据库 大数据
目录发送流程1.流程逻辑分析阶段一:主线程处理阶段二:Sender线程异步发送核心设计思想2.流程关键点总结重要参数一、核心必填参数二、可靠性相关参数三、性能优化参数四、高级配置五、安全性配置(可选)六、错误处理与监控典型配置示例关键注意事项发送流程序列化与分区:消息通过Partitioner选择目标分区(默认轮询或哈希),序列化后加入RecordAccumulator缓冲区。批次合并:Sende
【kafka系列】broker
漫步者TZ
kafka 数据库 分布式 kafka
目录Broker接收生产者消息和返回消息给消费者的流程逻辑分析Broker处理生产者消息的核心流程Broker处理消费者消息的核心流程关键点总结Broker接收生产者消息和返回消息给消费者的流程逻辑分析Broker处理生产者消息的核心流程接收请求Broker的SocketServer接收来自生产者的ProduceRequest(基于Reactor网络模型)。请求解析与验证解析请求头(Topic、P
音响坏了还能修吗——deepseek和chatgpt回答对比
分享是一种传递,一种快乐
学习
共享您说:音响坏了还能修吗ChatGPT说:ChatGPT音响是否能修理,取决于具体的故障原因和损坏程度。你可以按照以下步骤来判断是否值得维修:1.检查基础问题电源问题:确保音响电源连接正常,尝试更换电源插座或适配器。音频线故障:尝试更换或重新插拔音频线,检查是否是连接问题。音量或静音:检查音量是否调到最低或是否开启了静音模式。设备兼容性:如果是蓝牙音响,尝试重新配对。2.判断具体故障
使用 Canal 实时从 MySql 向其它库同步数据
m0_74823239
面试 学习路线 阿里巴巴 mysql 数据库
目前绝大多数项目还是采用mysql作为数据存储,对于用户访问量较高的网站来说,mysql读写性能有限,我们通常会把mysql中的数据实时同步到Redis、mongodb、elasticsearch等中间件中,应对高并发访问场景,减轻mysql压力,防止数据库宕机。在项目开发中,为了不会原有代码进行侵入,采用canal中间件实现mysql向其它库的实时同步,是一种很不错的方案。canal译意为水道/
WebRTC学习二:WebRTC音视频数据采集
m0_74823239
webrtc 学习 音视频
系列文章目录第一篇基于SRS的WebRTC环境搭建第二篇基于SRS实现RTSP接入与WebRTC播放第三篇centos下基于ZLMediaKit的WebRTC环境搭建第四篇WebRTC学习一:获取音频和视频设备第五篇WebRTC学习二:WebRTC音视频数据采集文章目录系列文章目录前言一、获取音视频流1.设置请求的媒体流参数2.调用getUserMedia3.处理获取到的媒体流4.处理错误二、完整
Hadoop常用端口号
海洋 之心
Hadoop问题解决 hadoop hbase 大数据
Hadoop是一个由多个组件构成的分布式系统,每个组件都会使用一些特定的端口号来进行通信和交互。以下是Hadoop2.x常用的端口号列表:HDFS端口号:NameNode:50070SecondaryNameNode:50090DataNode:50010DataNode(数据传输):50020YARN端口号:ResourceManager:8088NodeManager:8042MapReduc
用js代码实现贪吃蛇小游戏
guai_guai_guai
javascript 前端 开发语言
js已经学了大部分了,现在就利用我所学的js知识试试做贪吃蛇小游戏吧以下部分相关图片以及思路笔记均出自渡一陈老师的视频首先制作简单的静态页面,添加贪吃蛇移动的背景和相关图片,比如开始游戏等等将各个功能均封装在函数中,利用主函数调用分函数会使结构更清晰初始化游戏初始化地图地图坐标//1.初始化地图for(leti=0;i=td||newHead.y=tr){collideCheckInfo.isCo
DXF文件解析:详细的提取图形坐标数据说明
MotionHao
DXF文件解析 几何学 数据结构 自动化
目录DXF文件组成解析实体数据的思路POINTLINEARCCIRCLEPOLYLINELWPOLYLINEELLIPSE(椭圆)工业自动化领域通常需要导入CAD图形来加工,所以需要提取CAD文件的图行数据。本文介绍如何提取DXF文件中常用的图形的坐标数据,包括:POINT(点)、LINE(直线段)、ARC(圆弧)、CIRCLE(圆)、POLYLINE(多段线)、LWPOLYLINE(轻量多段线)
006-Docker 镜像加速
小宝哥Code
Docker docker 容器 运维
在中国,由于网络限制,DockerHub的镜像拉取速度可能会非常慢。为了解决这个问题,可以通过配置Docker使用国内镜像加速器来提高镜像下载速度。1.使用国内镜像加速器以下是一些常用的Docker镜像加速器,你可以根据自己的需求选择使用:阿里云镜像加速器:https://.mirror.aliyuncs.com网易云镜像加速器:https://hub-mirror.c.163.comDaoClo
企业文件安全:防范内部人员数据泄露风险
够快云库
企业数据安全 企业文件安全
在企业文件安全管理中,外部黑客攻击常常受到广泛关注,然而,内部人员造成的数据泄露风险同样不容忽视。内部人员可能因疏忽、不满或被利益诱惑等原因,导致企业敏感文件数据泄露,给企业带来巨大损失。一、内部人员数据泄露的现状与原因当前,企业内部人员数据泄露事件时有发生。一方面,部分员工安全意识淡薄,随意将文件存储在不安全的设备上,或通过不加密的渠道传输文件,增加了数据泄露的风险。另一方面,一些员工因对企业的
文件安全审计:追踪与监控数据访问行为的利器
够快云库
企业数据安全 企业文件安全
随着企业数据资产的不断增长,文件安全已成为企业面临的重大挑战之一。无论是外部威胁还是内部操作失误,都可能导致敏感数据的泄露、篡改甚至丢失。因此,企业不仅需要有效的安全防护措施,还应具备强大的追踪与监控能力,以确保任何对文件的访问和操作行为都在安全控制之下。在这种背景下,文件安全审计成为企业管理中至关重要的工具,它为企业提供了全面的文件操作记录,帮助及时发现并应对潜在的安全威胁。1.文件安全审计的核
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很好地解决了这个问题,算是框架的一大亮点。对于常见的场景,例如:批量插入/更新/删除,模糊查询,多条件查询,联表查询,