每周完成一个ARTS:
Algorithm:每周至少做一个 leetcode 的算法题
Review:阅读并点评至少一篇英文技术文章
Tip:学习至少一个技术技巧
Share :分享一篇有观点和思考的技术文章;
将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
示例:
输入:1->2->4, 1->3->4
输出:1->1->2->3->4->4
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* mergeTwoLists(struct ListNode* l1, struct ListNode* l2) {
struct ListNode* newt = NULL;
struct ListNode* newl = NULL;
struct ListNode* newz = NULL;
if(l1 == NULL && l2 == NULL){
return NULL;
}
while(1){
/* get node zone */
if(newt == NULL){
newl = (struct ListNode* )malloc(sizeof(struct ListNode));
memset(newl, 0 ,sizeof(struct ListNode));
newt = newl; /*save head*/
}else{
newl->next = (struct ListNode* )malloc(sizeof(struct ListNode));
memset(newl->next, 0 ,sizeof(struct ListNode));
newl = newl->next;
}
if( l2 != NULL && l1 == NULL){
newl->val = l2->val;
l2 = l2->next;
}else if(l2 == NULL && l1 != NULL){
newl->val = l1->val;
l1 = l1->next;
}
if(l2 == NULL && l1 == NULL){
break;
}else if(l2 == NULL || l1 == NULL){
continue;
}
if(l1->val <= l2->val){
newl->val = l1->val;
l1 = l1->next;
}else if(l1->val > l2->val){
newl->val = l2->val;
l2 = l2->next;
}
}
return newt;
}
Review:
ps命令可以按照列输出,在特殊监控条件下可以通过ps的特定输出减少过滤难度;
一般为ps -aux |grep "programname"|awk ''{print $1}'的模式,当然可以串接更多;
但是如果在ps阶段就把数据源按照自己想要的做好,那么awk的难度就会减小;而且有些特殊列,默认情况下是不显示的,此时也可设定自己关心而ps默认不展示的列;
ps -eo %cpu,%mem,command
Tip:
性能调试:
CPU 利用率已经开始成为一个容易误导的指标:它包含访存导致的等待周期,这样会影响一些新应用。也许 “%CPU” 应该重命名为 “%CYC”(cycles的缩写)。要清楚知道 “%CPU” 的含义,需要使用其他指标进行辅助,其中就包括每周期指令数(IPC)。IPC < 1.0 多半意味着访存密集型,IPC > 1.0 多半意味着计算密集型。作者之前的文章中涵盖有 IPC 说明,以及用于测量 IPC 的 Performance Monitoring Counters(PMCs)的介绍。
所有的性能监控产品如果展示 “%CPU”,都应该同时展示 PMC 指标用于解释其真实意义,不要误导用户。比如,可以把 “%CPU” 和 “IPC” 一起放,或者说指令执行消耗周期和 stalled 周期。有这些指标之后,开发者和操作者就能够知道该如何更好地对应用和系统进行调优。
https://juejin.im/entry/5c12f9f66fb9a049c84f557a?utm_source=gold_browser_extension
Share:
加密分为信源加密,信道加密;
信源即数据,最近工作中需要对信源加密,故搜索了一下加密算法。因资源限制,暂定选用DES,非对称加密涉及秘钥不适用我们的场景;
https://zh.wikipedia.org/wiki/%E8%B3%87%E6%96%99%E5%8A%A0%E5%AF%86%E6%A8%99%E6%BA%96
https://cryptobook.nakov.com/
DES是一种典型的块密码—一种将固定长度的明文通过一系列复杂的操作变成同样长度的密文的算法。对DES而言,块长度为64位。同时,DES使用密钥来自定义变换过程,因此算法认为只有持有加密所用的密钥的用户才能解密密文。密钥表面上是64位的,然而只有其中的56位被实际用于算法,其余8位可以被用于奇偶校验,并在算法中被丢弃。因此,DES的有效密钥长度仅为56位。
与其它块密码相似,DES自身并不是加密的实用手段,而必须以某种工作模式进行实际操作。FIPS-81确定了DES使用的几种模式[32]。FIPS-74包括了更多关于DES使用的讨论[33]。