202007第二周记录

HTML

声明为html5文档

HTML基础

HTML标题

一共有6个标题,分别用h1-h6来表示

HTML段落

<p></p>

浏览器会自动地在段落的前后添加空行

HTML拆行

如果希望在不产生一个新段落的情况下进行换行,可以使用<br>标签

<p>这个<br>段落<br>演示了分行的效果</p>

文本格式化

<b>加粗文本</b>
<i>斜体文本</i>
<sub>下标</sub>
<sup>上标</sup>
<big>放大</big>
<small>缩小</small>

<code>计算机输出</code>
<kbd>键盘输入</kbd>
<tt>打字机文本</tt>
<samp>计算机代码样本</samp>
<var>计算机变量</var>
<address>地址</address>
<q>块引用</q>
  • 预格式文本
  • 跳出框架
    是不局限于浏览器页面吗

HTML链接

<a href="https://www.baidu.com"></a>
<a href="mailto:someone@example.com?Subject=Hello%20again" target="_top">
<a href="mailto:someone@example.com?cc=someoneelse@example.com&bcc=andsomeoneelse@example.com&subject=Summer%20Party&body=You%20are%20invited%20to%20a%20big%20summer%20party!" target="_top">发送邮件!</a>
发送邮件</a>

单词之间空格使用%20代替,确保浏览器可以正常显示文本。

HTML图像

<img src="/images/logo.png" width="258" height="39" />

HTML水平线

<hr>

HTML注释

<!-- 这是一个注释 -->

XML学习

XML被设计用来传输和存储数据
HTML被设计用来显示数据

网络编程

nc 测试吞吐量

带宽
吞吐量
延迟
使用率
额外开销

策略中心主机部署

?什么是PL_BolPublic.ini
?dcc_sy.xml,dict_sy.xml和pl_dictionary.xml分别是什么

信控业务场景说明

流程图:
?预处理
PLCA信控测试流程(121421)绑定手机上网功能
预处理任务:
绑定手机上网阈值提醒事件,按合并组循环
?预处理规则
事件类型(EVENT_TYPE_ID)
循环模式(LOOP_TYPE)
?基础数据获取
用户资料,余额信息,历史欠费明细,总账明细,累积量量本
?策略匹配
?获取合并规则
?策略计算
每个合并的累积量实例都触发一次策略计算
?策略生成

?合并实例存在
?策略工单生成

各业务的流程图基本一样

阈值提醒

手机上网时长阈值提醒
手机上网流量阈值提醒
4G定向/闲时流量包等阈值提醒
人工触发
一般触发
大账户触发
其他阈值触发
语音短信wlan等阈值提醒

流量卡不足提醒

达量提醒及制定流量提醒

余额提醒

国际数据漫游-首次上网

策略中心新模型

策略工单

STOP_OPEN 停复机
ITF
REMD 实时
REMD_TIME 定时
ACCU 累积
OWE 余额
EXP 到期
ROAM 漫游
NEVERSTOP
LIFECYCLE
UNIFY 集团
REMIND 提醒
INTF
OTHER 其他
TRIGGER 触发
VIP 大账户
ORD
GEN 一般
MAN 人工

PLCA信控

用户个性化定制提醒

余额不足提醒

流量阈值提醒

WIFI上网时长提醒

短信阈值提醒

语音阈值提醒

套餐消费定期提醒

详单查询提醒

redis的操作
json数据格式
线程操作
ctg-mq消息
EOP

常用能力列表
其中有各种各样的函数

通讯录

业务逻辑
接口层:add del search travel
支持层:read write

链表操作:
链表而言:1.Insert 2.Remove
问题:
业务操作和数据结构没有分离,如何实现业务分离
如何解决scanf数组溢出的问题

#include <stdio>
#include <string.h>
#include <
#define NAME_LENGTH  16
#define PHONE_LENGTH 32

// 上线时可以把INFO定义为空,则不会进行打印输出
#define INFO printf

#define LIST_INSERT(item, list) do {	\
	item->prev = null;					\
	item->next = list;					\
	list = item;						\
} while(0)								

#define LIST_DELETE(item, list) do {	\
	if(item->prev != NULL)				\
	{									\
		item->prev->next = item->next;	\
	}									\
	if(item->next != NULL)				\
	{									\
		item->next->prev = item->prev;	\
	}									\
	item->prev = item->next = NULL		\
} while(0);

struct person {
	char name[NAME_LENGTH];
	char phone[PHONE_LENGTH];
	
	struct person *next;
	struct person *prev;
};

struct contacts {
	struct person *people;
	int count;
};

enum {
	OPER_INSERT = 1,
	OPER_PRINT,
	OPER_DELETE,
	OPER_SEARCH,
	OPER_SAVE,
	OPER_LOAD
}

// define interface
int person_insert(struct person **person, struct person *ps)
{
	if(ps == NULL)
		return -1;
	LIST_INSERT(ps, people);
}
int person_delete(struct person *people, struct person *ps)
{
	if(ps == NULL)
		return -1;
	LIST_REMOVE(ps, people);
	return 0;	
}
int person_search(struct person *person, char *name)
{
	struct person *item = NULL;
	for(item = people; item != NULL; item = item->next)
	{
		if(strcmp(name, item->name))
		{
			break;
		}
	}
	return item;
}
int person_traversal(struct person *person)
{
	struct person *item = NULL;
	for(item = people; item != NULL; item = item->next)
	{
		INFO("name:%s,phone:%s,\n",item->name, item->phone);
	}
}

int insert_entry(struct contacts *cts)
{
	if(cts == NULL)
		return -1;
	
	struct person *p = (struct person*)malloc(sizeof(struct person));
	if(p == NULL)
		return -2;
	// name
	INFO("Please Input Name:\n");
	scanf("%s", p->name);
	
	// phone
	INFO("Please Input Phone:\n");
	scanf("%s", p->phone);
	// add people
	if(0 != person_insert(cts->people, p))
	{
		free(p);
		return -3;
	}
	cts->count++;
	INFO("Insert Success\n"); 
	
	return 0;
}

intp print_entry(struct contacts *cts)
{
	// cts->people
	if(cts == NULL)
		return -1;
	person_traversal(cts->person);
}

int delete_entry(struct contacts *cts)
{
	// name
	if(cts == NULL)
		 return -1;
	INFO("Please Input Name:\n");
	char name[NAME_LENGTH] = {0};
	scanf("%s",name);

	// person
	struct person *ps = person_search(cts->people, name);
	if(ps == NULL)
	{
		INFO("Person don't exist\n");
		return -2
	}
	// delete
	person_delete(&cts->person, name);
}

int search_entry(struct *cts)
{
	if(cts == NULL)
		return -1;
	INFO("Please Input Name:\n");
	char name[NAME_LENGTH]={0};
	scanf("%s", name);
	
	if(ps == NULL)
	{
		INFO("Person don't exist\n");
		return -2
	}
	INFO("name:%s,phone:%s\n",cts->name, cts->phone);
}



int main() {
{
	while(1){
		int select = 0;
		scanf("%d",&select);
		switch(select)
		{
		case OPER_INSERT:
			break;
		case OPER_PRINT:
			break;
		case OPER_DELECT:
			break;
		case OPER_SEARCH:
			break;
		case OPER_TRAVER:
			break;
		}
	}
}

C学习

Bug分为:
编译时错误
运行时错误
逻辑错误和语义错误

  • gcc
    -Wall选项可以让gcc提示所有的警告信息
    -S 生成汇编文件
    -c 生成目标文件
    -o 生成可执行文件
    -masm=intel 生成Intel格式的汇编代码
  • objdump
    反汇编

做任何项目,任何产品都需要分层次,这样调试和修改都会十分方便

fopen:打开一个文件
fprintf:按照指定的格式写入文件
fflush:从内存中同步到磁盘中
fclose:关闭一个打开的文件
feof:是否已经读到了文件的结尾
fgets:读取一行

greater()从大到小排序
less()从小到大排序
multimap()是有序的键值对,默认的比较键的函数是less<K>()

协程

做什么?
与线程差不多,为什么需要协程?
服务器端:
协程更快?

服务器每增加1000个链接所用到的耗时为5000+ms。
服务器每增加1000个链接所用的耗时,900ms。

协程用在服务器上,用在客户端上

  1. 服务器定时检测io是否有数据, epoll/select
    epoll wait()
  2. 对io进行读写操作
    recv()/send()
    同时listen 100个端口

工程师只认可数据上面的对比

CMake语法

STREQUAL用于比较字符串,相同则返回true
MATCHES 如果给定的字符串或变量值或给定的正则表达式匹配的话,表达式返回真。

并发

自旋锁:spinlock
while(1)不断检测,锁的内容较少,等待时间的代价小于切换的代价

互斥锁:mutex
引起线程切换,锁的内容较多时,当被锁住时,该线程sleep
什么时候用自旋锁,什么时候用互斥锁

原子操作
单条cpu指令操作,多条指令变为一条指令

CAS -> Compare And Swap 对比交换

linux

本地到远程
scp -r ./LeetCode hua@192.168.79.130:/home/hua/Code/

linux网络库所在位置
在这里插入图片描述

  • du的代替:ncdu
    查看磁盘空间
  • top
    查看进程,资源占用
  • man
    命令文档
  • sed/grep
  • find

SLAM想法

ACNet: Attention Based Network to Exploit Complementary Features for RGBD Semantic Segmentation

sudo apt-get
#
Could not get lock /var/lib/dpkg/lock-frontend - open (11: Resource temporarily unavailable)

辅助

代码浏览:

  • 安装doxygen:sudo apt-get install doxygen doxygen-gui graphviz
  • 生成doxygen文档:doxygen open_vins/Doxyfile

LeetCode

174. 地下城游戏

题目

  1. 动态规划
    主要是要反着思考,动态规划可以用于二维数组的问题
  2. DFS
    直接用DFS速度较慢,利用空间来优化,还有需要做相应的剪枝,不然会超时

315. 计算右侧小于当前元素的个数

题目

  1. 离散化树状数组
  2. 归并排序
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值