Log Parser 2.2 如何运作
发布日期: 2005 年04 月27 日
作者: Gabriele Giuseppini (Microsoft Corporation 的软件开发测试工程师)
审稿人 Jeffrey A. Johnson (Microsoft Corporation 的软件开发测试工程师)
本页内容
简介
Log Parser 如何运作?
搜索数据
将日志导出到 SQL 数据库
创建报表
总结
更多信息
简介
近几年,我有许多次被问到“Log Parser 有何用处?” 这一问题。每次,我都感到很难找到适当的语言来描述这个工具。每当我找到了一句话来进行描述的时侯,随后都会发现这句话遗漏了一些重要的内容,无法真正表达出该工具的灵活性。当然,这可能是由于开发人员的偏执造成的,不过我对自己的回答,从来没有感到满意过。
我不会告诉您,Log Parser“ 能做” 什么。您 能用它来做什么,才是关键。我有很多次都对 Log Parser 的一些特殊应用感到很吃惊,我原以为它们是不可能实现的。我将告诉您它是 如何 运作的,希望这能让您懂得能用它来做什么,而且我会向您介绍该工具的三种最常见的应用方案。我敢肯定,您也会对 Log Parser 的新用途感到吃惊的。
历史点滴
在我们介绍 Log Parser 的内部原理之前,您可能想了解一下该工具的历史背景。2.0 版是 Microsoft 对外发布的第一个版本。Log Parser 1.0 是 Microsoft 的内部测试工具,几年前由本人开发而成,用于实现 IIS 日志记录功能的自动化测试。由于这个工具吸引了许多内部用户,因此本人于 2001 年 11 月推出了 2.0 版,并在 Internet 上提供了免费下载。
不久后,2.1 版随 IIS 6.0 资源工具包一同发布。该工具包包含有对 SQL 引擎功能的重要更新。
最后, 2.2 版 (目前的版本)于 2005 年 1 月推出。该版本包含了大量输入和输出格式,以及针对 SQL 引擎核心的其它一些重要更新。
返回页首
Log Parser 如何运作?
Log Parser 使用户可以根据需要混合和匹配 输入格式 和 输出格式 ,来创建数据处理管道。该工具使用以一种 SQL 语言编写的查询,在上述两个组件间创建管道。
输入格式
输入格式组件能够从各种源,读取并返回信息。输入格式提供的信息类似于数据库表,其中的记录由许多字段组成,而每个字段带有的值属于下列五种可能的数据类型之一:INTEGER 、STRING 、TIMESTAMP 、REAL 和 NULL 。
Log Parser 2.2 提供的输入格式包括:
•
分析 IIS 生成的日志文件并返回日志中的条目的输入格式
•
分析通用文本日志文件(按 CSV 、TSV 、NCSA 、W3C 和 XML 标准进行格式化)并返回日志所含字段的输入格式
•
一个返回来自 Windows 事件日志的事件的输入格式
•
返回 Active Directory 对象、文件和目录以及注册表项上的信息的输入格式
•
一个分析 NetMon 捕获文件并返回 TCP/IP 数据包和连接上的信息的输入格式
假如没有一个可用的输入格式满足我们的需求,Log Parser 2.2 还允许您编写自定义的 输入格式插件 。这些都是简单的 COM 对象,可以用任何编程语言(包括 C# 和脚本语言)来编写。您所要做的就是确定要让插件返回何种信息,只要实现了该插件,就可以像“ 标准” 输入格式那样使用。
输出格式
输出格式的作用与输入格式正好相反:使用 记录,并用记录中的字段执行一些有用的功能。Log Parser 2.2 提供的输出格式能够:
•
将记录保存到文本文件(按 CSV 、TSV 、W3C 和 XML 标准格式化)
•
将记录保存到文本文件(根据特定于用户的通用模板格式化)
•
将记录显示到控制台或 GUI 窗口中
•
将记录上载到 SQL 数据库的表中
•
按 Syslog 标准格式化记录,并将记录分配给 Syslog 服务器、文本文件或用户
•
创建 Excel 样式的图表,以图形格式呈现记录的数值数据
同样,如果没有一个可用的输出格式满足您的需求,您还可以通过编程方式,利用 Log Parser COM 对象,来使用记录。
核心 SQL 引擎
在输入和输出格式间有一个数据处理引擎,能够通过一种 SQL 语言执行查询。Log Parser 查询实际上是一种用于粘连输入格式和输出格式的一种“ 胶水” ,指定如何在输入格式提供的数据到达输出格式之前,对其进行转换。
这种“ 胶水” 最简单的实例就是“SELECT *” 查询。该查询用于指示应该将来自输入格式的记录,按原样传输给输出格式。通常,在 转换 文件格式时,使用这个简单的查询:比如,选择一个能够分析源文件中的数据的输入格式和一个按目标格式将记录写入文件的输出格式,并使用“SELECT *” 传输未经处理的记录。
不过,SQL 语言设计用于执行较简单的“SELECT *” 更重大的任务。您可以使用 Log Parser ,对来自输入格式的数据进行筛选、排序和聚合,将您的计算结果发送到可显示和/ 或存储您所提取的信息的输出格式。
命令行与可编脚本的 COM 对象
您可以通过两种不同的方法使用 Log Parser :从命令行使用“LogParser.exe” 可执行文件;从应用程序使用“LogParser.dll” 库导出的 Log Parser COM 对象。具体要选择何种方法,取决于您要通过 Log Parser 来执行的任务。
在下面所介绍的几种应用方案中,我将使用命令行可执行程序,但是请记住,也可以使用 Log Parser COM 对象,通过脚本来实现这些方案。很灵活,不是吗?
返回页首
搜索数据
Log Parser 最常见的应用之一是:在一组特定的数据中,搜索特定的信息。想象一下您正在管理一个 IIS 网站,并且被告知,有些用户发现一些未指定的页需要很长的执行时间。
您可能想查明的第一件事就是:究竟是哪些页需要如此长的执行时间。需要通过记事本打开 IIS 日志文件,查看数百万行日志条目吗?我可不这么认为。 假如您将 IIS 日志存储在 SQL 数据库中,您可能想运行一个查询,来找出运行时间超过 10 秒钟的页—— 如果您真的这么做了,那么可能就不需要 Log Parser—— 至少对于这个问题是这样。要是您没有把日志保存在 SQL 数据库中,又该怎么办呢?在这种情况下,您可以使用 Log Parser 分析 IIS 日志文件,查明哪些页所需的执行时间超过了 10 秒钟,并将结果显示在控制台窗口中。
具体方法如下。假定 IIS Web 服务器以 W3C 扩展的日志格式记录日志,而您使用 IISW3C 输入格式,分析 IIS 日志文件。
在运行任何查询之前,您需要这个输入格式导出了哪些字段。若要确定这一点,请转到命令行,确认 LogParser.exe 在路径中,并执行该命令:
C:/>logparser –h –i:IISW3C
这个命令提供了有关 IISW3C 输入格式的简明的帮助,其中包含一个列有 IISW3C 输入格式导出的所有字段的列表:
LogFilename (S) LogRow (I) date (T) time (T) c-ip (S) cs-username (S) s-sitename (S) s-computername (S) s-ip (S) s-port (I) cs-method (S) cs-uri-stem (S) cs-uri-query (S) sc-status (I) sc-substatus (I) sc-win32-status (I) sc-bytes (I) cs-bytes (I) time-taken (I) cs-version (S) cs-host (S) cs(User-Agent) (S) cs(Cookie) (S) cs(Referer) (S) s-event (S) s-process-type (S) s-user-time (R) s-kernel-time (R) s-page-faults (I) s-total-procs (I) s-active-procs (I) s-stopped-procs (I)
根据上述输出,并借助 IIS 日志记录文档 ,您就可以知道所要的是所有“time-taken” 字段大于 10,000 (“time-taken” 字段用于测量执行页所需的 毫秒 数)的日志条目的“cs-uri-stem” 字段。 that the page takes to execute). 圆括号中的字母代表字段的 类型 。“cs-uri-stem” 字段属于 STRING 类型,而“time-taken” 字段则属于 INTEGER 类型。
然后,定位到保存 IIS 日志文件的文件夹,并执行此命令:
C:/Logs>logparser "SELECT cs-uri-stem FROM ex*.log WHERE time-taken > 10000" –i:IISW3C
根据日志文件的大小,您可能需要等待几秒钟的时间,该命令才会开始输出结果。输出示例如下:
cs-uri-stem ------------------- /home/login.asp /home/login.asp /home/login.asp /home/login.asp /images/button.gif /home/login.asp /home/login.asp /home/login.asp /home/login.asp /home/login.asp Press a key...
首先,请注意,我们使用了“-i:IISW3C” 来指定输入格式。这个参数告诉 Log Parser ,我们要让 IISW3C 输入格式,为我们生成数据。
其次,请注意,我们并未指定任何输出格式;在这种情况下,Log Parser 会自动选择“NAT” 输出格式,后者将在控制台窗口中,显示查询记录。实际上,这个输出格式在显示完十个记录后,就会暂停。它在等您按一下键盘上的任意键,随后将再次显示十个记录。
最后,请注意,我们的 SQL 查询的 FROM 子句指定了我们要让输入格式分析的数据的实际的 源 。对于 IISW3C 输入格式,我们可以指定任意数量的本地或远程文件(甚至包含通配符)。您可以在 FROM 子句中,指定更多的参数,但我不会在这里谈论这些选项—— 您可以在 Log Parser 说明文档的“ 输入格式” 下,找到这些参数。
现在,回到我们所给的例子上,您可以从结果中看到,多数情况下,“login.asp” 页的执行时间较长。不过,您也可能看到,其它一些页的加载时间,有时也会超过十秒钟,所以您还可能想找出每个不同的页出现过多少次执行时间超过十秒钟的情况。在输出中,出现次数较少的页,可能只是日志中的假“ 噪声” 。
那么,继续运行以下命令:
C:/Logs>logparser "SELECT TOP 10 cs-uri-stem, COUNT(*) FROM ex*.log WHERE time-taken > 10000 GROUP BY cs-uri-stem ORDER BY COUNT(*) DESC" –i:IISW3C
具体输出可能如下所示:
cs-uri-stem COUNT(ALL *) ------------------------ ------------ /home/login.asp 371 /images/lglogo.gif 2 /images/button.gif 1 /news/today.htm 1
这将命令 Log Parser 执行以下操作:
1.
查找所有页执行时间超过十秒钟的日志条目
2.
对于结果中每个不同的 页 URL ,计算页 URL 在结果中出现的次数—— 换句话说,某个页出现过多少次执行时间超过十秒钟的情况
3.
按照从大到小的顺序,对所算出的出现次数的结果进行排序,并且仅显示前十个结果
根据上方的输出,您可以做出这样的结论:“login.asp” 页频繁出现执行时间超过十秒钟的情况;结果中的其它页只是一些假条目,不能表明存在任何具体的问题。
返回页首
将日志导出到 SQL 数据库
对于许多用户,Log Parser 所实现的查询功能并不能满足他们的需求。譬如,管理流量繁重的网站的公司通常需要将网站日志保存在中央数据库中,从而可以在其中运行任意数量的查询,并在多台 Web 服务器间关联数据。Windows 事件日志及其它日志文件也可能存在这样的情况。
Log Parser 也可通过提供一个可用于将查询结果上载到数据库表的“SQL” 输出格式,来应对上述情况。
一般而言,从日志文件到 SQL 表的简单“SELECT *” 查询就可能解决问题,但是大多数时候,日志包含的一些条目,并不值得永久保存在数据包中。譬如,您可能想排除对图像文件的请求;也可能存在对不存在的页的请求。
以下命令可以做到这一点:
C:/Logs>logparser "SELECT * INTO LogsTable FROM ex*.log WHERE TO_LOWERCASE (EXTRACT_EXTENSION(cs-uri-stem)) NOT IN ('gif';'jpg';'png') AND sc-status <> 404" –i:IISW3C –o:SQL –database:LogsDatabase
这个命令要求 Log Parser 筛选出以“.gif” 、“.jpg” 和“.png” 结尾的页的条目(URL 不分大小写)。该命令还将排除 HTTP 错误代码“404” (即“page not found” )产生的请求。
所有其它请求都将传递给 SQL 输出格式,后者将把记录保存到 INTO 子句所指定的表中。另外,这个输出格式还接受“database” 参数(可用于指定目标数据库的名称)以及其它许多参数(可用于指定到 SQL 数据库连接的其它属性)。
若要实现上述操作,您可以将上面的命令放在一个批处理文件中,并使用 SCHTASKS.EXE 工具,设定该批处理文件每小时运行一次—— 好了!—— 您就得到了一个自动的机制,可定期将日志文件中的条目,上载到 SQL 数据库。
请注意,每次执行上述命令时,Log Parser 都会反复检查 所有 日志条目,并将所有这些条目多次上载到数据库。我们真正需要的是一个“ 仅分析尚未分析过的日志条目” 的机制。
Log Parser 2.2 的一个新功能正好可以满足这一要求:“ 增量分析” 功能,也称为“ 检查点 (checkpointing)” 。
大多数 Log Parser 输入格式支持一个名为“iCheckpoint” 的参数。该参数可告诉输入格式将所分析的所有文件的当前状态,都保存在一个专门的数据文件(“ 检查点 (checkpoint)” 文件)中。当您使用上一次分析期间生成的检查点文件执行查询时,输入格式将只分析输入文件中那些尚未分析过的部分—— 即 新的 条目。
所以,只需指定通过“iCheckpoint” 参数,指定一个检查点文件的名称,具体如下:
C:/Logs>logparser "SELECT * INTO LogsTable FROM ex*.log WHERE TO_LOWERCASE (EXTRACT_EXTENSION(cs-uri-stem)) NOT IN ('gif';'jpg';'png') AND sc-status <> 404" –i:IISW3C –o:SQL –database:LogsDatabase –iCheckpoint:MyCheckpoint.lpc
在您第一次执行该命令时,并不存在“MyCheckpoint.lpc” 文件,而且 IISW3C 输入格式分析了所有日志文件中的所有条目,并对结果数据进行筛选,最后再上载到数据库。在分析了所有日志后,IISW3C 输入格式会将每个日志文件的当前大小保存到“MyCheckpoint.lpc” 文件。
当您稍后运行相同的命令时,IISW3C 输入格式将从上次分析结束的地方,开始加载检查点文件,并分析日志,从而仅处理、筛选和上载新的日志条目。完成后,将针对日志文件的新大小更新检查点文件,随后这个过程将再次循环。
假如认真理解了本文开头处的设计说明,那么您可能已经知道:只需更改输入格式,您就重复使用该命令,将 Log Parser 输入格式支持的 任何 日志上载到数据库。想要上载事件日志条目吗?只需使用 EVT 输入格式,具体如下:
C:/Logs>logparser "SELECT * INTO EventLogsTable FROM System" –i:EVT –o:SQL – database:LogsDatabase –iCheckpoint:MyCheckpoint.lpc
返回页首
创建报表
至此,您应该已经知道:通过选择正确的输入格式并编写正确的查询,就可以从日志文件、系统或 Log Parser 支持的任何对象,获得所需的任何信息。
不过,我们只看到有关命令将信息返回到控制台窗口,或者将记录上载到 SQL 数据库。假如您正在使用 Log Parser ,为您的管理团队生成报表,那么您可能需要某种比 SQL 表更人性化的东西,不是吗?
生成 HTML 页
在这个例子中,假设我们要生成一个报表,使之包含一台特定的远程计算机(将在该计算机的安全事件日志中检索)上的所有登录信息:
C:/>logparser "SELECT ComputerName, TimeGenerated AS LogonTime, STRCAT(STRCAT(EXTRACT_TOKEN (Strings, 1, '|'), '//'), EXTRACT_TOKEN(Strings, 0, '|')) AS Username FROM //SERVER01 /Security WHERE EventID IN (552; 528) AND EventCategoryName = 'Logon/Logoff'" -i:EVT
不要被该查询吓倒—— 其表面上的复杂性大多是因为我们为了从事件数据中提取完整的 / 字符串,而执行的一些字符串操作造成的。
若使用 NAT 输出格式,具体的输出结果如下所示:
ComputerName LogonTime Username ------------ ------------------- ---------------------------- SERVER01 2004-06-24 09:47:12 NT AUTHORITY/NETWORK SERVICE SERVER01 2004-06-24 09:48:05 SERVERDC/Administrator SERVER01 2004-06-24 09:48:05 NT AUTHORITY/NETWORK SERVICE SERVER01 2004-06-24 10:00:59 NT AUTHORITY/NETWORK SERVICE SERVER01 2004-06-24 10:01:00 NT AUTHORITY/LOCAL SERVICE SERVER01 2004-06-24 10:01:06 SERVER01/Gabriele SERVER01 2004-06-24 10:01:15 NT AUTHORITY/LOCAL SERVICE SERVER01 2004-06-24 10:01:18 SERVERDC/Monica SERVER01 2004-06-24 10:01:18 NT AUTHORITY/LOCAL SERVICE SERVER01 2004-06-24 10:01:24 NT AUTHORITY/LOCAL SERVICE
为了将该输出格式化为 HTML 格式,我们将使用 TPL 输出格式。该输出格式把一个参数作为说明如何格式化输出的文本文件(“ 模板” 文件)。这里,我们将编写该模板文件,将输出转化为 HTML 表,具体如下:
Logon/Logoff Report Logon/Logoff Report %FIELDNAME_1% %FIELDNAME_2% %FIELDNAME_3%
%FIELD_1% %FIELD_2% %FIELD_3%
我不在这里深入探讨该模板文件的细节—— 其格式在 Log Parser 的联机文档中有非常详细的说明。请注意,这个模板文件分为三节(标题、正文和页脚),每一节都使用了特殊的“% 变量%” (在运行时,由来自查询结果的值进行替换)。
现在,我们就可以通过上述命令,使用 TPL 输出格式,生成报表了:
C:/>logparser "SELECT ComputerName, TimeGenerated AS LogonTime, STRCAT(STRCAT(EXTRACT_TOKEN (Strings, 1, '|'), '//'), EXTRACT_TOKEN(Strings, 0, '|')) AS Username INTO Report.html FROM //SERVER01/Security WHERE EventID IN (552; 528) AND EventCategoryName = 'Logon/Logoff'" - i:EVT –o:TPL –tpl:MyTemplate.txt
该命令将生成一个“Report.html” 文件,并在浏览器中打开,具体如“ 图 1” 所示。
图 1 :使用 TPL 输出格式生成的报表
生成图表
在最后一个例子中,我将向您展示如何在不使用 Excel 的情况下,直接从查询结果生成图表。
以下命令可计算出 IIS 日志文件每小时的命中总数,具体方法是:使用 CHART 输出格式,创建一个包含图表的 JPG 图像:
C:/>logparser "SELECT TO_STRING(time, 'HH') AS Hour, COUNT(*) AS Hits INTO MyChart.jpg FROM ex*.log GROUP BY Hour ORDER BY Hour ASC" -i:IISW3C -o:CHART -chartType:ColumnClustered - chartTitle:"Hourly Hits" -groupSize:420x280
具体输出如“ 图 2” 所示。
图 2 :显示每小时命中数的图表输出
返回页首
总结
我们已经看到 Log Parser 体系结构可实现大量应用方案,而这都是通过 Log Parser 灵活的“ 数据处理管道” 实现的。我向您介绍了可以使用 Log Parser 搜索数据,将日志上载到 SQL 数据库,并生成报表,而这只是该工具常规应用方案的三个例子。
我在前面说过,很难用一句话来概括 Log Parser 的用户,我可不是在骗你—— 不是吗?
返回页首
更多信息
请参考下列资源:
•
http://www.logparser.com : 该站点(由 Mike Gunderloy 所有并维护)称为“ 非官方的 Log Parser 支持站点” ,提供了一个公共论坛,供用户进行答疑,交流使用技巧,以及汇报问题。此站点还提供了一个知识库来解答一些常见问题,并列出了网上其他有关 Log Parser 的文章的大量链接。
•
《Microsoft Log Parser 工具包》 一书包含本人以及其它众多 Log Parser 用户所提供的信息和脚本。该书介绍了有关此工具的使用技巧和窍门,可帮助用户充分挖掘 Log Parser 的潜能。
•
脚本的故事 : 本文摘自 TechNet 的 脚本专家 专栏,介绍了如何通过编程方式使用 Log Parser 可编脚本的 COM 对象,如何在脚本中选择输入和输出格式,如何设置属性,以及如何使用 Log Parser 查询生成的记录。
有关所有“ 网络专家” 专栏文章的列表和其它信息,请 单击此处 。
你可能感兴趣的:(网路技术,microsoft,数据库,sql,iis,server,service)
仓库货物检测:基于YOLOv5的深度学习应用与UI界面开发
YOLO实战营
YOLO 深度学习 ui 目标跟踪 目标检测 人工智能
一、引言随着电商和物流行业的快速发展,仓库货物管理已经成为企业运营中至关重要的环节。为了提高仓库管理的效率和准确性,越来越多的企业开始应用自动化技术来完成货物的盘点、分类、分拣等任务。传统的货物管理方式通常依赖人工检查,不仅效率低下,而且容易出现误差。为了克服这些问题,利用计算机视觉和深度学习技术来实现仓库货物的自动化检测成为了一种有效的解决方案。本博客将介绍如何使用YOLOv5进行仓库货物检测,
极限挑战:用知识蒸馏压缩模型,实时推荐系统在50ms内完成推荐
极限挑战:用知识蒸馏压缩模型,实时推荐系统在50ms内完成推荐标题极限挑战:用知识蒸馏压缩模型,实时推荐系统在50ms内完成推荐TagAI,知识蒸馏,实时推荐,模型压缩,技术挑战,高性能描述面对实时推荐系统必须在50ms内完成推荐这一极限条件,AI研发工程师团队在数据量从GB级飙升至PB级的巨大冲击下,展现出极高的技术实力和创新能力。团队通过引入先进的模型压缩和优化技术,成功在性能和精度之间找到了
KL散度:信息差异的量化标尺 | 从概率分布对齐到模型优化的核心度量
不对称性、计算本质与机器学习的普适应用本文由「大千AI助手」原创发布,专注用真话讲AI,回归技术本质。拒绝神话或妖魔化。搜索「大千AI助手」关注我,一起撕掉过度包装,学习真实的AI技术!一、核心定义与数学本质KL散度(Kullback-LeiblerDivergence)用于衡量两个概率分布PPP和QQQ的差异程度,定义为:DKL(P∥Q)=∑x∈XP(x)logP(x)Q(x)(离散形式)D_
Transformer:自注意力驱动的神经网络革命引擎
大千AI助手
人工智能 Python # OTHER transformer 神经网络 深度学习 google 人工智能 机器学习 大模型
本文由「大千AI助手」原创发布,专注用真话讲AI,回归技术本质。拒绝神话或妖魔化。搜索「大千AI助手」关注我,一起撕掉过度包装,学习真实的AI技术!从语言理解到多模态智能的通用架构基石⚙️一、核心定义与历史意义Transformer是由Google团队在2017年论文《AttentionIsAllYouNeed》中提出的深度学习架构,其颠覆性创新在于:完全摒弃RNN/CNN:仅依赖自注意力机制(S
[特殊字符] LLM(大型语言模型):智能时代的语言引擎与通用推理基座
大千AI助手
人工智能 Python # OTHER 语言模型 人工智能 自然语言处理 LLM 大模型 Transformer
本文由「大千AI助手」原创发布,专注用真话讲AI,回归技术本质。拒绝神话或妖魔化。搜索「大千AI助手」关注我,一起撕掉过度包装,学习真实的AI技术!从千亿参数到人类认知的AI革命一、核心定义与核心特征LLM(LargeLanguageModel)是基于海量文本数据训练的深度学习模型,通过神经网络架构(尤其是Transformer)模拟人类语言的复杂规律,实现文本理解、生成与推理任务。其核心特征可概
MAP最大后验估计:贝叶斯决策的优化引擎
大千AI助手
人工智能 Python # OTHER python 人工智能 算法 贝叶斯 MAP 概率论 条件概率
融合先验知识与观测数据的概率推断方法本文由「大千AI助手」原创发布,专注用真话讲AI,回归技术本质。拒绝神话或妖魔化。搜索「大千AI助手」关注我,一起撕掉过度包装,学习真实的AI技术!一、核心概念与数学本质MAP(MaximumAPosteriori)估计是贝叶斯框架下的参数估计方法,其目标为:最大化后验概率(P(\theta\midX)),即:[\hat{\theta}{MAP}=\arg\ma
MLE最大似然估计:数据驱动的概率模型参数推断基石
大千AI助手
人工智能 Python # OTHER 数据挖掘 人工智能 机器学习 算法 MLE 参数估计 概率论
从样本中还原未知分布的本质规律本文由「大千AI助手」原创发布,专注用真话讲AI,回归技术本质。拒绝神话或妖魔化。搜索「大千AI助手」关注我,一起撕掉过度包装,学习真实的AI技术!一、核心思想与数学定义最大似然估计(MaximumLikelihoodEstimation,MLE)是频率学派的参数估计方法,其核心思想为:选择使观测数据出现概率最大的参数值。给定独立同分布样本X={x1,x2,…,xn}
Flink 流处理的核心基石【时间语义、水位线、状态、检查点、反压 】
csdn_tom_168
大数据 flink 核心 时间语义 水位线 状态 检查点 反压
Flink流处理的核心基石【时间语义、水位线、状态、检查点、反压】,这些概念相互协作,构建了Flink高吞吐、低延迟、高容错的实时计算能力。以下是这些核心技术的深度解析及其内在联系:一、五大基石的内在联系驱动触发计算持久化保护恢复时间语义水位线状态管理检查点反压二、核心组件深度解析1.时间语义(TimeSemantics)核心作用:定义事件的时间维度//设置事件时间语义(关键配置)env.setS
DDD核心知识解析
我是廖志伟
Java场景面试宝典 DDD Domain-Driven Design Software Architecture
我是廖志伟,一名Java开发工程师、《Java项目实战——深入理解大型互联网企业通用技术》(基础篇)、(进阶篇)、(架构篇)清华大学出版社签约作家、Java领域优质创作者、CSDN博客专家、阿里云专家博主、51CTO专家博主、产品软文专业写手、技术文章评审老师、技术类问卷调查设计师、幕后大佬社区创始人、开源项目贡献者。拥有多年一线研发和团队管理经验,研究过主流框架的底层源码(Spring、Spri
ShardingSphere详解
我是廖志伟
Java场景面试宝典 ShardingSphere Distributed Database Middleware
我是廖志伟,一名Java开发工程师、《Java项目实战——深入理解大型互联网企业通用技术》(基础篇)、(进阶篇)、(架构篇)清华大学出版社签约作家、Java领域优质创作者、CSDN博客专家、阿里云专家博主、51CTO专家博主、产品软文专业写手、技术文章评审老师、技术类问卷调查设计师、幕后大佬社区创始人、开源项目贡献者。拥有多年一线研发和团队管理经验,研究过主流框架的底层源码(Spring、Spri
《比昂全集》阅读笔记:漫长的周末 - 战争 4 中
若宁Rena
【战争】第4节。如果年轻时候遇到一些优秀的人,这些人可能成为年轻人的榜样。一个人可能希望自己未来成为自己欣赏的老师、教官、或者自己的父母那样的父母。Bion所在的营地很好,纪律严明。那些军官也是应该服从的人。尽管有的教官有有依据的缺点,但是那时候还是容易把对方放到权威的角色里。Bion的生活中,有着:“训练、技术课程、左轮手枪、机关枪、六磅步枪,还有强大的坦克本身……”“不坏的士兵……熄灯……夜晚
微服务架构核心技术
我是廖志伟
Java场景面试宝典 Service Governance Microservices Distributed Systems
我是廖志伟,一名Java开发工程师、《Java项目实战——深入理解大型互联网企业通用技术》(基础篇)、(进阶篇)、(架构篇)清华大学出版社签约作家、Java领域优质创作者、CSDN博客专家、阿里云专家博主、51CTO专家博主、产品软文专业写手、技术文章评审老师、技术类问卷调查设计师、幕后大佬社区创始人、开源项目贡献者。拥有多年一线研发和团队管理经验,研究过主流框架的底层源码(Spring、Spri
Spring MVC 技术解析
我是廖志伟
Java场景面试宝典 Spring MVC Java Web MVC Design Pattern
我是廖志伟,一名Java开发工程师、《Java项目实战——深入理解大型互联网企业通用技术》(基础篇)、(进阶篇)、(架构篇)清华大学出版社签约作家、Java领域优质创作者、CSDN博客专家、阿里云专家博主、51CTO专家博主、产品软文专业写手、技术文章评审老师、技术类问卷调查设计师、幕后大佬社区创始人、开源项目贡献者。拥有多年一线研发和团队管理经验,研究过主流框架的底层源码(Spring、Spri
领域驱动设计核心解析
我是廖志伟,一名Java开发工程师、《Java项目实战——深入理解大型互联网企业通用技术》(基础篇)、(进阶篇)、(架构篇)清华大学出版社签约作家、Java领域优质创作者、CSDN博客专家、阿里云专家博主、51CTO专家博主、产品软文专业写手、技术文章评审老师、技术类问卷调查设计师、幕后大佬社区创始人、开源项目贡献者。拥有多年一线研发和团队管理经验,研究过主流框架的底层源码(Spring、Spri
Spring技术全解析
我是廖志伟
Java场景面试宝典 Spring Framework IoC Container AOP
我是廖志伟,一名Java开发工程师、《Java项目实战——深入理解大型互联网企业通用技术》(基础篇)、(进阶篇)、(架构篇)清华大学出版社签约作家、Java领域优质创作者、CSDN博客专家、阿里云专家博主、51CTO专家博主、产品软文专业写手、技术文章评审老师、技术类问卷调查设计师、幕后大佬社区创始人、开源项目贡献者。拥有多年一线研发和团队管理经验,研究过主流框架的底层源码(Spring、Spri
并发编程核心技术
我是廖志伟
Java场景面试宝典 Concurrency Java Multithreading
我是廖志伟,一名Java开发工程师、《Java项目实战——深入理解大型互联网企业通用技术》(基础篇)、(进阶篇)、(架构篇)清华大学出版社签约作家、Java领域优质创作者、CSDN博客专家、阿里云专家博主、51CTO专家博主、产品软文专业写手、技术文章评审老师、技术类问卷调查设计师、幕后大佬社区创始人、开源项目贡献者。拥有多年一线研发和团队管理经验,研究过主流框架的底层源码(Spring、Spri
ShardingSphere技术解析
我是廖志伟,一名Java开发工程师、《Java项目实战——深入理解大型互联网企业通用技术》(基础篇)、(进阶篇)、(架构篇)清华大学出版社签约作家、Java领域优质创作者、CSDN博客专家、阿里云专家博主、51CTO专家博主、产品软文专业写手、技术文章评审老师、技术类问卷调查设计师、幕后大佬社区创始人、开源项目贡献者。拥有多年一线研发和团队管理经验,研究过主流框架的底层源码(Spring、Spri
并发编程与MyBatis核心解析
我是廖志伟
Java场景面试宝典 Concurrent Programming Java MyBatis
我是廖志伟,一名Java开发工程师、《Java项目实战——深入理解大型互联网企业通用技术》(基础篇)、(进阶篇)、(架构篇)清华大学出版社签约作家、Java领域优质创作者、CSDN博客专家、阿里云专家博主、51CTO专家博主、产品软文专业写手、技术文章评审老师、技术类问卷调查设计师、幕后大佬社区创始人、开源项目贡献者。拥有多年一线研发和团队管理经验,研究过主流框架的底层源码(Spring、Spri
互联网大厂java求职者面试
我是廖志伟
Java场景面试宝典 java 八股文 面试 求职 Java
我是廖志伟,一名Java开发工程师,清华大学出版社签约作家、Java领域优质创作者、CSDN博客专家、阿里云专家博主、51CTO专家博主、产品软文专业写手、技术文章评审老师、技术类问卷调查设计师、幕后大佬社区创始人、开源项目贡献者。拥有多年一线研发和团队管理经验,研究过主流框架的底层源码(Spring、SpringBoot、SpringMVC、SpringCloud、Mybatis、Dubbo、Z
思途html学习 0717
Asu5202
html 学习 前端
1.HTML基础概述HTML定义:超文本标记语言(HyperTextMarkupLanguage),用于创建网页结构。“超文本”指支持嵌入图像、音频、视频和脚本等非文本内容。编辑器推荐:VSCode、HBuilderX或IDEA都很实用。安装VSCode后,添加LiveServer插件(通过Extensions搜索安装),能实现实时预览网页(快捷键:Ctrl+S保存后自动刷新)。核心特性:空白处理
k8s学习 — (运维)第九章 Helm 包管理器
2401_83740189
2024年程序员学习 运维 linux 面试
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。需要这份系统化的资料的朋友,可以点击这里获取!一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!config包含了可以合并到打包的chart中的
知识蒸馏:模型压缩与知识迁移的核心引擎
大千AI助手
人工智能 Python # OTHER transformer 人工智能 神经网络 深度学习 知识蒸馏 KD 蒸馏
本文由「大千AI助手」原创发布,专注用真话讲AI,回归技术本质。拒绝神话或妖魔化。搜索「大千AI助手」关注我,一起撕掉过度包装,学习真实的AI技术!从软目标迁移到无数据合成的轻量化革命一、核心定义与技术价值知识蒸馏(KnowledgeDistillation,KD)是一种通过迁移大型教师模型(Teacher)的知识至小型学生模型(Student)的模型压缩技术。其核心思想是:学生模型不仅学习原始数
ShardingSphere 架构解析
我是廖志伟
Java场景面试宝典 Database Distributed Systems ShardingSphere
我是廖志伟,一名Java开发工程师、《Java项目实战——深入理解大型互联网企业通用技术》(基础篇)、(进阶篇)、(架构篇)清华大学出版社签约作家、Java领域优质创作者、CSDN博客专家、阿里云专家博主、51CTO专家博主、产品软文专业写手、技术文章评审老师、技术类问卷调查设计师、幕后大佬社区创始人、开源项目贡献者。拥有多年一线研发和团队管理经验,研究过主流框架的底层源码(Spring、Spri
某网安公司护网红队面试经验分享
掌控安全官号
面试 经验分享 职场和发展
所在城市:成都面试职位:2025年护网红队面试过程:线下1V2面试,大概40分钟吧。上次侥幸过了一面,这次记录下二面经过。技术问题问得都比较深入,要求对原理系统掌握,其次综合性要求也比一面要高不少,好几个问题我都被追问的没啥思路了,汗。当前环境下,网安圈也越来越卷,希望给最近找工作的小伙伴们提供参考,祝愿大家早日找到“薪”满意足的好工作。面试官的问题:问题1、如何绕过CDN获取目标网站真实IP?查
Java零基础 - 数组的定义和声明
喵手
零基础学Java java 开发语言
哈喽,各位小伙伴们,你们好呀,我是喵手。 今天我要给大家分享一些自己日常学习到的一些知识点,并以文字的形式跟大家一起交流,互相学习,一个人虽可以走的更快,但一群人可以走的更远。 我是一名后端开发爱好者,工作日常接触到最多的就是Java语言啦,所以我都尽量抽业余时间把自己所学到所会的,通过文章的形式进行输出,希望以这种方式帮助到更多的初学者或者想入门的小伙伴们,同时也能对自己的技术进行沉淀,加以
〖Python 数据库开发实战 - Redis篇②〗- Linux系统下安装 Redis 数据库
哈哥撩编程
# ⑤ - 数据库开发实战篇 Python全栈白宝书 python 数据库 数据库开发实战 linux安装redis
订阅Python全栈白宝书-零基础入门篇可报销!白嫖入口-请点击我。推荐他人订阅,可获取扣除平台费用后的35%收益,文末名片加V!说明:该文属于Python全栈白宝书专栏,免费阶段订阅数量4300+,购买任意白宝书体系化专栏可加入TFS-CLUB私域社区。福利:加入社区的小伙伴们,除了可以获取博主所有付费专栏的阅读权限之外,还有机会加入星荐官共赢计划,详情请戳我。作者:不渴望力量的哈士奇(哈哥),
html js 查询数据库,如何使用javascript查询数据库?
小编典典Javascript本身不能用于处理数据库。这是使用php(或您选择的服务器端语言)完成的。Ajax用于使用javascript向您的php脚本发送请求,而javascript则会与数据库进行通信。而且不需要页面刷新。因此,您尝试使用ajax可以轻松实现。既然您提到了jquery,就可以在jquery中签出$.ajax或$.post方法,这使过程更加简单。您需要使用ajax处理表单。Aja
html sql连接mysql数据库_HTML连接sql数据库
旋风1968
html sql连接mysql数据库
怎样从HTML网页中获取SQL数据库里的数据我现在是一名学生,第一学期快结束了,老师要CSS布局HTML小编今天和大家分享我们每个学习小组用C#做HTML是无法读取数据库的,HTML是页面前端脚本语言,要想从HTML网页中获取SQL数据库里的数据,需要借助JSP或ASP或PHP或RUBY等语言来实现。简单的关系可以这样理解:数据库JSP或ASP或PHP或RUBY等语言HTML如:在JSP页面中显示
html 显示 数据库图片.js,html实时显示数据 怎么让数据库的数据在html显示出来
UnstructuredIO
html 显示 数据库图片.js
用JS实时调用数据显示在HTML页面上不要站在现在的高度,去判定未来的事情,因为未来的你是会成长的,会有新的选择和判断。html页面上怎么显示动态数据通过AJAX实现,在html页面用ajax请分享后台获取动态数据。获取range的值就行了,然后将其显示出来,你实时改变range的值,显示的就会实时改变0functionchange(){varvalue=document.getElementBy
python分布式爬虫打造搜索引擎--------scrapy实现
weixin_30515513
爬虫 python 开发工具
http://www.cnblogs.com/jinxiao-pu/p/6706319.html最近在网上学习一门关于scrapy爬虫的课程,觉得还不错,以下是目录还在更新中,我觉得有必要好好的做下笔记,研究研究。第1章课程介绍1-1python分布式爬虫打造搜索引擎简介07:23第2章windows下搭建开发环境2-1pycharm的安装和简单使用10:272-2mysql和navicat的安装
面向对象面向过程
3213213333332132
java
面向对象:把要完成的一件事,通过对象间的协作实现。
面向过程:把要完成的一件事,通过循序依次调用各个模块实现。
我把大象装进冰箱这件事为例,用面向对象和面向过程实现,都是用java代码完成。
1、面向对象
package bigDemo.ObjectOriented;
/**
* 大象类
*
* @Description
* @author FuJian
Java Hotspot: Remove the Permanent Generation
bookjovi
HotSpot
openjdk上关于hotspot将移除永久带的描述非常详细,http://openjdk.java.net/jeps/122
JEP 122: Remove the Permanent Generation
Author Jon Masamitsu
Organization Oracle
Created 2010/8/15
Updated 2011/
正则表达式向前查找向后查找,环绕或零宽断言
dcj3sjt126com
正则表达式
向前查找和向后查找
1. 向前查找:根据要匹配的字符序列后面存在一个特定的字符序列(肯定式向前查找)或不存在一个特定的序列(否定式向前查找)来决定是否匹配。.NET将向前查找称之为零宽度向前查找断言。
对于向前查找,出现在指定项之后的字符序列不会被正则表达式引擎返回。
2. 向后查找:一个要匹配的字符序列前面有或者没有指定的
BaseDao
171815164
seda
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
public class BaseDao {
public Conn
Ant标签详解--Java命令
g21121
Java命令
这一篇主要介绍与java相关标签的使用 终于开始重头戏了,Java部分是我们关注的重点也是项目中用处最多的部分。
1
[简单]代码片段_电梯数字排列
53873039oycg
代码
今天看电梯数字排列是9 18 26这样呈倒N排列的,写了个类似的打印例子,如下:
import java.util.Arrays;
public class 电梯数字排列_S3_Test {
public static void main(S
Hessian原理
云端月影
hessian原理
Hessian 原理分析
一. 远程通讯协议的基本原理
网络通信需要做的就是将流从一台计算机传输到另外一台计算机,基于传输协议和网络 IO 来实现,其中传输协议比较出名的有 http 、 tcp 、 udp 等等, http 、 tcp 、 udp 都是在基于 Socket 概念上为某类应用场景而扩展出的传输协
区分Activity的四种加载模式----以及Intent的setFlags
aijuans
android
在多Activity开发中,有可能是自己应用之间的Activity跳转,或者夹带其他应用的可复用Activity。可能会希望跳转到原来某个Activity实例,而不是产生大量重复的Activity。
这需要为Activity配置特定的加载模式,而不是使用默认的加载模式。 加载模式分类及在哪里配置
Activity有四种加载模式:
standard
singleTop
hibernate几个核心API及其查询分析
antonyup_2006
html .net Hibernate xml 配置管理
(一) org.hibernate.cfg.Configuration类
读取配置文件并创建唯一的SessionFactory对象.(一般,程序初始化hibernate时创建.)
Configuration co
PL/SQL的流程控制
百合不是茶
oracle PL/SQL编程 循环控制
PL/SQL也是一门高级语言,所以流程控制是必须要有的,oracle数据库的pl/sql比sqlserver数据库要难,很多pl/sql中有的sqlserver里面没有
流程控制;
分支语句 if 条件 then 结果 else 结果 end if ;
条件语句 case when 条件 then 结果;
循环语句 loop
强大的Mockito测试框架
bijian1013
mockito 单元测试
一.自动生成Mock类 在需要Mock的属性上标记@Mock注解,然后@RunWith中配置Mockito的TestRunner或者在setUp()方法中显示调用MockitoAnnotations.initMocks(this);生成Mock类即可。二.自动注入Mock类到被测试类 &nbs
精通Oracle10编程SQL(11)开发子程序
bijian1013
oracle 数据库 plsql
/*
*开发子程序
*/
--子程序目是指被命名的PL/SQL块,这种块可以带有参数,可以在不同应用程序中多次调用
--PL/SQL有两种类型的子程序:过程和函数
--开发过程
--建立过程:不带任何参数
CREATE OR REPLACE PROCEDURE out_time
IS
BEGIN
DBMS_OUTPUT.put_line(systimestamp);
E
【EhCache一】EhCache版Hello World
bit1129
Hello world
本篇是EhCache系列的第一篇,总体介绍使用EhCache缓存进行CRUD的API的基本使用,更细节的内容包括EhCache源代码和设计、实现原理在接下来的文章中进行介绍
环境准备
1.新建Maven项目
2.添加EhCache的Maven依赖
<dependency>
<groupId>ne
学习EJB3基础知识笔记
白糖_
bean Hibernate jboss webservice ejb
最近项目进入系统测试阶段,全赖袁大虾领导有力,保持一周零bug记录,这也让自己腾出不少时间补充知识。花了两天时间把“传智播客EJB3.0”看完了,EJB基本的知识也有些了解,在这记录下EJB的部分知识,以供自己以后复习使用。
EJB是sun的服务器端组件模型,最大的用处是部署分布式应用程序。EJB (Enterprise JavaBean)是J2EE的一部分,定义了一个用于开发基
angular.bootstrap
boyitech
AngularJS AngularJS API angular中文api
angular.bootstrap
描述:
手动初始化angular。
这个函数会自动检测创建的module有没有被加载多次,如果有则会在浏览器的控制台打出警告日志,并且不会再次加载。这样可以避免在程序运行过程中许多奇怪的问题发生。
使用方法: angular .
java-谷歌面试题-给定一个固定长度的数组,将递增整数序列写入这个数组。当写到数组尾部时,返回数组开始重新写,并覆盖先前写过的数
bylijinnan
java
public class SearchInShiftedArray {
/**
* 题目:给定一个固定长度的数组,将递增整数序列写入这个数组。当写到数组尾部时,返回数组开始重新写,并覆盖先前写过的数。
* 请在这个特殊数组中找出给定的整数。
* 解答:
* 其实就是“旋转数组”。旋转数组的最小元素见http://bylijinnan.iteye.com/bl
天使还是魔鬼?都是我们制造
ducklsl
生活 教育 情感
----------------------------剧透请原谅,有兴趣的朋友可以自己看看电影,互相讨论哦!!!
从厦门回来的动车上,无意中瞟到了书中推荐的几部关于儿童的电影。当然,这几部电影可能会另大家失望,并不是类似小鬼当家的电影,而是关于“坏小孩”的电影!
自己挑了两部先看了看,但是发现看完之后,心里久久不能平
[机器智能与生物]研究生物智能的问题
comsci
生物
我想,人的神经网络和苍蝇的神经网络,并没有本质的区别...就是大规模拓扑系统和中小规模拓扑分析的区别....
但是,如果去研究活体人类的神经网络和脑系统,可能会受到一些法律和道德方面的限制,而且研究结果也不一定可靠,那么希望从事生物神经网络研究的朋友,不如把
获取Android Device的信息
dai_lm
android
String phoneInfo = "PRODUCT: " + android.os.Build.PRODUCT;
phoneInfo += ", CPU_ABI: " + android.os.Build.CPU_ABI;
phoneInfo += ", TAGS: " + android.os.Build.TAGS;
ph
最佳字符串匹配算法(Damerau-Levenshtein距离算法)的Java实现
datamachine
java 算法 字符串匹配
原文:http://www.javacodegeeks.com/2013/11/java-implementation-of-optimal-string-alignment.html------------------------------------------------------------------------------------------------------------
小学5年级英语单词背诵第一课
dcj3sjt126com
english word
long 长的
show 给...看,出示
mouth 口,嘴
write 写
use 用,使用
take 拿,带来
hand 手
clever 聪明的
often 经常
wash 洗
slow 慢的
house 房子
water 水
clean 清洁的
supper 晚餐
out 在外
face 脸,
macvim的使用实战
dcj3sjt126com
mac vim
macvim用的是mac里面的vim, 只不过是一个GUI的APP, 相当于一个壳
1. 下载macvim
https://code.google.com/p/macvim/
2. 了解macvim
:h vim的使用帮助信息
:h macvim
java二分法查找
蕃薯耀
java二分法查找 二分法 java二分法
java二分法查找
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
蕃薯耀 2015年6月23日 11:40:03 星期二
http:/
Spring Cache注解+Memcached
hanqunfeng
spring memcached
Spring3.1 Cache注解
依赖jar包:
<!-- simple-spring-memcached -->
<dependency>
<groupId>com.google.code.simple-spring-memcached</groupId>
<artifactId>simple-s
apache commons io包快速入门
jackyrong
apache commons
原文参考
http://www.javacodegeeks.com/2014/10/apache-commons-io-tutorial.html
Apache Commons IO 包绝对是好东西,地址在http://commons.apache.org/proper/commons-io/,下面用例子分别介绍:
1) 工具类
2
如何学习编程
lampcy
java 编程 C++ c
首先,我想说一下学习思想.学编程其实跟网络游戏有着类似的效果.开始的时候,你会对那些代码,函数等产生很大的兴趣,尤其是刚接触编程的人,刚学习第一种语言的人.可是,当你一步步深入的时候,你会发现你没有了以前那种斗志.就好象你在玩韩国泡菜网游似的,玩到一定程度,每天就是练级练级,完全是一个想冲到高级别的意志力在支持着你.而学编程就更难了,学了两个月后,总是觉得你好象全都学会了,却又什么都做不了,又没有
架构师之spring-----spring3.0新特性的bean加载控制@DependsOn和@Lazy
nannan408
Spring3
1.前言。
如题。
2.描述。
@DependsOn用于强制初始化其他Bean。可以修饰Bean类或方法,使用该Annotation时可以指定一个字符串数组作为参数,每个数组元素对应于一个强制初始化的Bean。
@DependsOn({"steelAxe","abc"})
@Comp
Spring4+quartz2的配置和代码方式调度
Everyday都不同
代码 配置 spring4 quartz2.x 定时任务
前言:这些天简直被quartz虐哭。。因为quartz 2.x版本相比quartz1.x版本的API改动太多,所以,只好自己去查阅底层API……
quartz定时任务必须搞清楚几个概念:
JobDetail——处理类
Trigger——触发器,指定触发时间,必须要有JobDetail属性,即触发对象
Scheduler——调度器,组织处理类和触发器,配置方式一般只需指定触发
Hibernate入门
tntxia
Hibernate
前言
使用面向对象的语言和关系型的数据库,开发起来很繁琐,费时。由于现在流行的数据库都不面向对象。Hibernate 是一个Java的ORM(Object/Relational Mapping)解决方案。
Hibernte不仅关心把Java对象对应到数据库的表中,而且提供了请求和检索的方法。简化了手工进行JDBC操作的流程。
如
Math类
xiaoxing598
Math
一、Java中的数字(Math)类是final类,不可继承。
1、常数 PI:double圆周率 E:double自然对数
2、截取(注意方法的返回类型) double ceil(double d) 返回不小于d的最小整数 double floor(double d) 返回不大于d的整最大数 int round(float f) 返回四舍五入后的整数 long round