zoukankan      html  css  js  c++  java
  • 网上头条面筋总结

    get 和 post 的区别

    两者都是向服务器获取数据,并且都会从服务器获取数据。
    区别:

    1、传送方式:get通过地址栏传输,post通过报文传输。

    2、传送长度:get参数有长度限制(受限于url长度),而post无限制

    3、GET和POST还有一个重大区别,简单的说:

    GET产生一个TCP数据包;POST产生两个TCP数据包

    长的说:

    对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据);

    而对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)

    http://www.w3school.com.cn/tags/html_ref_httpmethods.asp

    对称加密和非对称加密

    对称加密:加密和解密用的是同样的秘钥
    非对称加密:一对密钥,公钥和私钥,私钥只能由安全一方保管,而公钥可以发给任何人。用公钥对消息进行加密,而只有私钥才能对该消息解密。

    ping 的过程使用到哪些协议
    ICMP、DNS和ARP

    什么是长连接、短连接?

    短连接:客户端和服务器每进行一次HTTP操作,就建立一次连接,任务结束就中断连接。
    长连接:客户和服务器每进行一次HTTP操作,建立的连接不会关闭,客户端再访问这个服务器时,会继续使用这一条已经建立的连接。其中有个保持时间。
    HTTP协议的长连接和短连接,实质上是TCP协议的长连接和短连接

    非递归后序遍历

    https://www.cnblogs.com/moxiangfeng/p/10738591.html

    Reactor和Proactor的区别

    https://www.cnblogs.com/me115/p/4452801.html(看不懂)

    阻塞IO和非阻塞IO的区别、同步IO和异步IO的区别

    阻塞IO:资源不可用时,IO请求一直阻塞,直到反馈结果
    非阻塞IO:资源不可用时,IO请求离开返回,返回数据标识资源不可用
    同步IO:应用程序阻塞在发送或接受数据的状态,直到数据成功传输或返回失败
    异步IO:应用程序发送或加收数据后立刻返回,数据写入OS缓存,由OS完成数据发送或接受,并返回成功或失败的信息给应用。

    gcc和g++的区别

    gcc是GCC中的GUN C Compiler,g++是GCC中的GUN C++ Compiler
    主要区别:

    1. 对于*.c和*.cpp文件,gcc分别当做c和cpp文件编译,而g++则统一当做cpp文件编译
    2. g++会自动链接标准库STL,而gcc不会
    3. gcc在编译C文件时,可使用的预定义宏是比较少的

    虚函数的底层实现原理

    编译器为每个类对象都添加一个隐藏成员,隐藏成员中保存了一个指向函数地址数组的指针,称为虚表指针,这种数组称为虚函数表,即,每个类使用一个虚函数表,每个类对象用一份虚表指针。
    虚函数的构造过程:

    虚函数的调用过程:


    红黑树

    https://blog.csdn.net/q3244676719/article/details/81540830

    STL的内存分配器

    默认用alloctator实现。allocator是一个由两级分配器构成的内存管理器,当申请的内存大小大于128byte时,就启动第一级分配器通过malloc直接向系统的堆空间分配,如果申请的内存大小小于128byte时,就启动第二级分配器,从一个预先分配好的内存池中取一块内存交付给用户,这个内存池由16个不同大小(8的倍数,8~128byte)的空闲列表组成,allocator会根据申请内存的大小(将这个大小round up成8的倍数)从对应的空闲块列表取表头块给用户。 
    优点:
      (1)小对象可以快速分配。小对象的内存池是系统调用一次malloc分配一块足够大的区域给程序备用,当内存池耗尽时再向系统申请一块新的区域。
      (2)避免了内存碎片的生成。

    type_traits

    C++中的的一个头文件,定义了一系列的类去获得编译时的类型信息

    http协议怎么知道已完成数据传送

    http的传输层使用的是TCP协议,所以http协议是根据TCP判断已完成数据传送的方式来判断的。即根据TCP报文段的FIN来判断,当FIN=1时,则表明是最后一个报文段,传送结束。

    找一个无序数组的中位数

    先来一个快排,再找中位数,如果是偶数个,则取中间的两个结果的平均值。

    快排的时间复杂度,最坏情况呢,最好情况呢,堆排序的时间复杂度呢,建堆的复杂度是多少

    快排:最好nlogn,最坏n2 ,平均nlogn;堆排:建堆和排序都是nlog2。

    Linux的磁盘管理

    http://www.runoob.com/linux/linux-filesystem.html

    Linux有哪些进程通信方式、共享内存如何实现、共享内存实现的具体步骤

    进程通信方式:管道通信、消息队列、信号量、共享存储、FIFO
    1、管道。半双工、只能用于亲缘关系。
    2、消息队列。即消息的链接表,存放在内核中。一个消息队列由一个标识符来标识。
    3、信号量。一个计数器、用于实现进程间的互斥和同步,不是用于存储进程间的通信数据。
    4、共享内存。指两个或多个进程共享一个给定的存储区。特点:最快、需要同步、通常和信号量结合在一起使用。
    5、FIFO。一种文件类型,在无关的进程之间交换数据。

    创建共享内存的步骤:
    1、定义共享内存的结构体
    2、利用CreateFileMapping函数创建共享内存
    3、定义指向共享内存结构体的指针pShareMem,利用MapViewOfFile函数将刚刚创建的内存映射到定义指针pShareMem

    读写共享内存的步骤:
    1、定义共享内存的结构体
    2、用OpenFileMapping函数打开上面创建的共享内存区,该函数返回共享内存的地址
    3、将共享内存映射为文件指针
    4、定义指向共享内存结构体的指针,将共享内存的内容拷贝到结构体指针里
    参考来源:https://blog.csdn.net/long12310225/article/details/77503676

    Docker

    一个开源的应用容器引擎。Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后就可以发布到任何流行的Linux机器上,也可实现虚拟化。

    Linux下如何实现cgroup

    cgroup即用来限制某些进程的分配资源。
    实现步骤:
    1、首先挂载一个子系统。比如我想限制某些进程的资源,那么,我会先挂载memory子系统。
    2、在memory子系统中创建一个cgroup节点,在这个节点中,将需要控制的进程id写入,并且将控制的属性写入。
    参考来源:https://blog.csdn.net/gaojy19881225/article/details/80019874

    MySQL的事务隔离级别

    读已提交 解决 脏读问题。
    可重复读 解决 不可重复度问题。
    串行化  解决  幻读问题。
    参考来源:https://www.cnblogs.com/huanongying/p/7021555.html

    一个有向图用邻接矩阵,并且是有权图,怎么判断图中是否有环

    使用拓扑排序、递归

    找到二叉树中最长的一条路径

    1、递归找出所有路径  https://www.cnblogs.com/moxiangfeng/p/10667350.html
    2、找出最长者输出

    孤儿进程和僵尸进程,如何避免僵尸进程,父进程怎么知道子进程结束了

    孤儿进程:一个父进程退出,而它的一个或多个子进程还在运行,那么那些子进程将成为孤儿进程。孤儿进程将被init进程(进程号为1)所收养,并由init进程对它们完成状态收集工作。

    僵尸进程:一个进程使用fork创建子进程,如果子进程退出,而父进程并没有调用wait或waitpid获取子进程的状态信息,那么子进程的进程描述符仍然保存在系统中。这种进程称之为僵死进程。

    避免产生僵尸进程:使用wait()或者waitpid()等待子进程退出
    如何处理大量僵尸进程:将产生大量僵尸进程的那个父进程使用KILL发送SIGTERM信号。
    参考来源:https://www.cnblogs.com/Anker/p/3271773.html

    为什么迅雷下载是基于UDP的

    迅雷下载是P2P的

    操作系统的死锁必要条件,如何避免死锁

    互斥条件、请求和保持条件、不可抢占条件、循环等待条件。
    避免死锁:确保系统始终处于安全状态。可利用银行家算法来避免死锁

    LRU(最近使用)算法的实现,要求使用链表和哈希

    https://blog.csdn.net/z702143700/article/details/48374201

    输出二叉树的左视图(即从左边看过去能看到的节点)

    思路:从右到左层次遍历,用一个last来记录每一层的最后一个节点。
    代码:

     1 /**
     2 
     3 输出二叉树的左视图
     4 
     5 **/
     6 
     7 vector<int> rightSideView(TreeNode* root) {
     8         vector<int> ans;
     9         if(root == NULL)
    10             return ans;
    11         int front=-1,rear=-1;
    12         int last=0,lever=0;
    13         
    14         TreeNode* Q[1000];
    15         Q[++rear] = root;
    16         TreeNode *p = root;
    17         while(front < rear){
    18             p = Q[++front];
    19             if(p->right)
    20                 Q[++rear] = p->right;
    21             if(p->left != NULL)
    22                 Q[++rear] = p->left;
    23             
    24             if(last == front){
    25                 ans.push_back(Q[front]->val);
    26                 last=rear;
    27                 lever++;
    28             }
    29         }
    30         return ans;
    31     }

          

  • 相关阅读:
    《基于B_S模式的教务管理系统设计与实现》论文笔记(三)
    《重修补考报名考务管理信息系统中的网络技术》论文笔记(二)
    《基于WEB的独立学院补考重修管理系统研究》论文笔记(一)
    重修安排管理系统的设计与实现 文献收集
    重修安排管理系统的设计与实现 文献收集
    《暗时间》读书笔记
    R、Python、Scala 和 Java,到底该使用哪一种大数据编程语言?
    编程和音乐真的很像吗?
    关于虚拟现实叙事方式的终极入门指南
    如何避免脆弱的代码
  • 原文地址:https://www.cnblogs.com/moxiangfeng/p/10660447.html
Copyright © 2011-2022 走看看