知识点整理-2

85 阅读2分钟

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是当前允许的最大元素数。