2018-11-10-LeonLiu's ARTS
2018.11.10 ARTS
Algorithm: “Leetcode Algorithm 204. Count Prime”
Review: “SOA Vs Miroservices”
Tips: “HTTP State Code”
Share: “Something about Log”
Algorithm
Leetcode Algorithm: 204. Count Primes
Description:
Count the number of prime numbers less than a non-negative number, n.
Example: Input: 10 Output: 4 Explanation: There are 4 prime numbers less than 10, they are 2, 3, 5, 7.
//Source Code:
class Solution {
public:
int countPrimes(int n) {
if (n < 3) return 0;
vector<bool>bf(n, true); //Bool Flag
bf[0] = bf[1] = false;
for (int i = 2; i <= sqrt(n); ++i)
{
if (!bf[i]) continue;
for(int j = i*i; j <n; j+=i)
{
bf[j] = false;
}
}
int res= 0;
for (bool b: bf)
{
res += (b) ? 1 : 0;
}
return res;
}
};
求给定正整数列(1~n)中素数个数:
概念1 Prime Number 素数:又称质数,指在一个大于1的自然数中,除了1和此整数自身外,不能被其他自然数整除的数。
概念2 和素数对应的是合数,如果一个数是合数,那么它的最小质因数肯定小于等于他的平方根。
算法核心:
1)0,1肯定是质数 ,遍历范围从2到n的平方根(用库函数“sqrt()” 求平方根 );因为sqrt(n)是n的最大因子,其后面的数对判断n是否为素数没有意义。
2)筛选法,建立bool型vector,初始值true;从2开始逐个遍历,每次遍历的对象i的倍数全部都不是素数,标记为false(例如 2,4,6,8…);最后vector中为true的数字即全部为素数。
引申:如果不是求1~n,而是任意2个整数段,算法逻辑需要变化。
据说目前最大的素数是:277232917-1。它也是人类发现的第50个梅森素数,大素数是RSA等密码算法的基础。
Review
学习了专栏“84 | 程序员练级攻略(2018):微服务”中 关于 dzone里面对比 SOA 与 Miroservices的一篇文章
https://dzone.com/articles/microservices-vs-soa-2
简单总结一下 SOA 与 Miroservices的差异:
1)services 间通信方式不同:SOA 靠统一的EBS(Enterprise Service Bus),同时带来的健壮性隐患;微服务靠独立附件间的API通信。
2)数据存储方式不同:SOA服务共享DB;微服务每个服务有独立DB。(这部分也是各有利弊,SOA服务间数据共享的效率更高)。
3)服务大小和规模不同:SOA既可以作为一个整体规模相对庞大的服务单独实现,也可由多个微服务组合实现;微服务架构实现的服务相对SOA而言更小巧独立。
Tip
分析IIS日志过程中需要了解的常见HTTP状态码含义如下:
2xx 成功
200 正常;请求已完成。
201 正常;紧接 POST 命令。
202 正常;已接受用于处理,但处理尚未完成。
203 正常;部分信息 — 返回的信息只是一部分。
204 正常;无响应 — 已接收请求,但不存在要回送的信息。
3xx 重定向
301 已移动 — 请求的数据具有新的位置且更改是永久的。
302 已找到 — 请求的数据临时具有不同 URI。
303 请参阅其它 — 可在另一 URI 下找到对请求的响应,且应使用 GET 方法检索此响应。
304 未修改 — 未按预期修改文档。
305 使用代理 — 必须通过位置字段中提供的代理来访问请求的资源。
306 未使用 — 不再使用;保留此代码以便将来使用。
4xx 客户机中出现的错误
400 错误请求 — 请求中有语法问题,或不能满足请求。
401 未授权 — 未授权客户机访问数据。
402 需要付款 — 表示计费系统已有效。
403 禁止 — 即使有授权也不需要访问。
404 找不到 — 服务器找不到给定的资源;文档不存在。
407 代理认证请求 — 客户机首先必须使用代理认证自身。
415 介质类型不受支持 — 服务器拒绝服务请求,因为不支持请求实体的格式。
5xx 服务器中出现的错误
500 内部错误 — 因为意外情况,服务器不能完成请求。
501 未执行 — 服务器不支持请求的工具。
502 错误网关 — 服务器接收到来自上游服务器的无效响应。
503 无法获得服务 — 由于临时过载或维护,服务器无法处理请求
Share
命题作文 《关于日志那些事儿》
Hao Chen [Nov 8th at 4:31 PM] 本周的“命题作文“——【关于日志的那些事儿】
提示一下,
- 日志有访问日志,行为日志……不同类型的日志有不同的格式,
- 另外,还有日志的滚动归档,还有像systemd/syslog等这样的系统日志系统……
目标是一篇“引经据典“的,“全面系统“的对日志的介绍!
日志的定义
在计算机领域,日志文件(logfile)是一个记录了发生在运行中的操作系统或其他软件中的事件的文件,或者记录了在网络聊天软件的用户之间发送的消息。日志记录(Logging)是指保存日志的行为。最简单的做法是将日志写入单个存放日志的文件。
许多操作系统、软件框架和程序都包含日志系统。广泛使用的一项日志标准是syslog,它在互联网工程任务组(IETF)的RFC 5424中定义。syslog标准使专门的标准化子系统得以生成、过滤、记录和分析日志消息。这可以减轻软件开发人员设计和编写自己的临时日志系统的难度。
日志的分类
.事件日志(Event logs)
记录了在系统运行期间发生的事件,以便于了解系统活动和诊断问题。它对于了解复杂系统的活动轨迹至关重要,尤其是只有很少用户交互的应用程序(例如服务器应用程序)。集成多个来源的日志文件条目也是有用的。这种方法通过集成的统计数据分析,可能揭示出不同服务器上看似不相关的事件的相关性。其他解决方案则采用网络范围的查询与报告机制。
.事务日志
大多数数据库系统都维护某种事务日志(transaction log),它们的作用并不是为了后续分析的审计活动,也不是为了便于人类阅读。这些日志记录了对存储数据的更改,以允许数据库在发生崩溃或其他数据错误后恢复并维护存储数据的一致状态。因此数据库系统通常具有常规事件日志与事务日志。
.消息日志
互联网中继聊天(IRC)、即时通信(IM)、有聊天功能的点对点网上文件共享客户端,以及多人电子游戏游戏(尤其是MMORPG)通常都有自动记录(保存)文本通信的功能,无论它是用户之间的公开还是私密通信。 [6]消息日志一般都是普通的纯文本文件,但即时通信和VoIP客户端(支持文字聊天,例如Skype)也可能使用HTML或某种自定义格式保存它们,以便于阅读或加密。
日志的用途 (引用 http://azrle.github.io)
.还原现场,追溯问题
在系统出现问题或是为了检查系统是否出问题时,我们常常会去查看日志,此种日志多是human-readable 的。可以是格式化的日志,也常见非格式化的日志。例如:Linux系统日志
.监视、统计、取证等的分析
用于这种用途的日志很多,例如访问日志、审计日志等。为了方便系统处理分析,多是格式化的数据。例如:服务器安全日志,IIS日志
.数据传递
日志也经常用作系统间的信息传递,一个系统的日志可以是另一个系统的输入。譬如,MySQL 的主从间的数据传递就是借助Binlog 的。由于多是系统间的内部信息传递,二进制格式(协议)比较多。btw,由于事务日志,很多数据库本身就是一个日志系统 (“THE LOG IS THE DATABASE”)。
.数据备份及恢复
日志也有用于数据的备份的。数据库系统就常有Write-ahead Logging 等事务日志(如Innodb Log)来恢复状态和数据。MySQL 也有做Binlog 备份及恢复的。
日志的管理(持续更新)
无论是提高性能、收集商业情报还是检测安全威胁,日志管理可以归结为三个步骤:收集日志、存储数据和分析数据来发现模式。
针对安全日志的分析,需要关注以下五点:
-
用户访问异常 Active Directory域控制器的Windows安全日志和记录是发现网络中可疑活动的第一个位置。权限更改、用户从远程未知地点访问,以及用户访问一个系统访问另一个系统,都可能是可疑活动。 尤其重要的是特权账户,即在网络中多个系统具有管理员权限的用户。由于这些账户在网络中拥有更多的权利,应该更密切地监控这些账户。
-
与威胁指标匹配的模式
日志中的数据与能够获得的威胁指标对比–无论是通过建立黑名单,还是更全面的威胁情报服务。 威胁指标可以帮助识别防火墙、DNS服务器或者web代理服务器日志中可疑的IP地址、主机名称、域名和恶意软件签名。(web代理服务器日志对网络流量有着强大的可视性,即你的端点系统是如何连接到网络的)
3.计划外的配置变更
获取对系统的访问的攻击者通常会尝试更改配置来进一步攻击,以及在网络中获得立足点。由于大多数企业限制配置更改到每周、每月或者每季度的有限时间内,这些配置更改(无论是打开系统还是关闭日志记录功能)都可能表明攻击正在进行中。 用于管理安全产品的规则通常非常复杂,我们很难通过简单的分析来检查这些规则是否是恶意。相反地,安全团队很容易标记出任何在特定维护期外的变更。
- 奇怪的数据库传输
因为数据库是企业基础设施的重要部分,应该监测数据库传输情况来发现可疑活动。例如,试图选择和复制大范围数据的请求应该得到密切关注。 此外,监控数据库通信是不够的。虽然记录数据传输情况可能会影响数据库性能,但在调查数据泄漏事故时,这些记录是非常有价值的。
5.新设备用户组合 在移动设备和携带自己设备到工作场所趋势出现之前,可以将任何连接到网络的新的设备视为可疑对象。但现在,这已经不再是一个威胁指示。 应该链接设备到其用户,并将变更视为可疑事件。