1. 两个有序链表合并成一个(leetcode 21)
struct ListNode {
int val;
ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};
ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
if(l1 == NULL){
return l2;
}
if (l2 == NULL){
return l1;
}
if (l1->val < l2->val){
l1->next = mergeTwoLists(l1->next, l2);
return l1;
}
else {
l2->next = mergeTwoLists(l1, l2->next);
return l2;
}
}
2. GET和POST的区别
GET所发送的数据是URL的一部分,POST数据不会显示在URL中。
GET和POST方法没有本质区别,只是报文格式不同,两者都使用HTTP,都是不安全的,想要安全传输需要使用HTTPS。
3. HTTPS的实现原理
HTTPS原理:在传输层(TCP)和应用层(HTTP)之间加了一层SSL/TLS。
具体加密过程:1. 服务器端发送公钥证书;2. 客户端检验证书是否有效,是,则生成一个随机密钥,并用服务端的公钥进行加密后发送;3. 服务器端用自己私钥加密,取出客户端的随机密钥,将需要发送的内容用该密钥加密并发送。
4. Linux查看最近的日志用什么指令
tail:
tail -f test.log
head:
cat test.log | tail -n +3000 | head -n 1000
cat:
cat filename
tac:把cat的内容反写过来
tac filename
echo:
echo "the echo command test!"
5. hash冲突解决
开放地址法:再散列函数:
Hi = (H(key) + di) % m, i = 1, 2, ..., n
不同di值对应不同散列方法。
再哈希法:同时构造多个不同的哈希函数,某一个发生冲突时计算下一个,直到冲突不再产生。
链地址法:将所有哈希地址为i的元素构成一个单链表。
建立公共溢出区:将哈希表分为基本表和溢出表,和基本表发生冲突的元素填入溢出表。
6. 快排的时间复杂度和空间复杂度
平均情况下快速排序的时间复杂度是O(nlgn),最坏情况是n的平方,可通过随机算法避免最坏情况,或者可先求序列的中值,然后选取中值作为主元素。
由于递归调用,快排的空间复杂度是O(lgn)。
7. 堆排序的时间复杂度和空间复杂度
第一次建堆时间复杂度:O(n)。
更改元素时建堆时间复杂度:O(nlgn)。
堆排序平均时间复杂度:O(nlgn)。
空间复杂度:O(1)。
8. B树和B+树的定义
B树中每个节点的关键字都有data域。
B+树除了叶子节点,其他节点只有索引。
9. C++ vector里size和capacity的区别
size是当前vector容器的真实占用大小。
capacity是当前允许的最大元素数。