今日头条三面

2019.9.6:今天看了下,挂了三面。
不过我觉得自己这么菜,已经走的很远了,觉得也不是很遗憾,哈哈~

1.介绍自己2min
2.介绍项目10min

面试官说,突出自己的亮点的时候需要多加强,然后需要加强码力,orz 跪
还有要突出答题重点(我感觉答不到重点很大程度上是不理解他的问题orz,阅读理解down)
3.提问环节:
1.tcp和ip的层次结构:

物理层,数据链路层,网络层,传输层,会话层,表示层,应用层
然后ip在网络层,tcp在传输层,http在应用层。

2.为什么要分层处理,一层不好吗:

总的来说就是为了方便,分层思想其实就是模块化设计,七层就是七个模块,其中一个模块的更换不会影响到其他模块(例如IPv4向IPv6迁移)

3.https的加密原理:

https://blog.csdn.net/xincai/article/details/51954468

4.java的多态:,举出多态的例子

允许不同的软件元素对同一消息做出响应,把不同的子类对象都当作父类来看,
可以屏蔽不同子类对象之间的差异,写出通用的代码。

5.进程间通信,这个要讲出详细的实现,(一脸懵)

推荐网址:https://www.cnblogs.com/zgq0/p/8780893.html
管道:
借助了文件系统的文件结构和VFS的索引节点inode,使得两个文件结构指向同一个临时的VFS(虚拟文件系统)的索引节点,而这个索引节点又指向另一个物理页面。
信号量
消息队列
信号

6.虚拟内存的作用,有虚拟内存,软件会变得怎么样?

https://www.jianshu.com/p/baf3a13c47db
在系统中所有的进程之间是共享CPU和主存这些内存资源的。当进程数量变多时,所需要的内存资源就会相应的增加。可能会导致部分程序没有主存空间可用。此外,由于资源是共享的,那么就有可能导致某个进程不小心写了另一个进程所使用的内存,进而导致程序运行不符合正常逻辑。
为了更加有效的管理内存并少出错,现代系统提供了一种对主存的抽象的概念,叫做虚拟内存(VM)。
虚拟内存是硬件异常、硬件地址翻译、主存、磁盘文件和内核软件间的完美交互,他为每个进程提供了一个大的、一致的和私有的地址空间。
虚拟内存提供了三个重要的能力: 缓存,内存管理,内存保护
将主存视为一个存储在磁盘上的地址空间的高速缓存,在主存中只保存活动区域,并根据需要在磁盘和主存之间来回传送数据
为每个进程提供了一致的地址空间,简化内存管理
保护了每个进程的地址空间不被其他进程破坏

7.需要内存的意义,如果内存和硬盘一样快,那还需要内存吗?

内存:RAM-随机存储器。
程序的运行是需要有一个场所的,因为对于CPU来说,甭管i7或者i8就那么几个寄存器,这一点特别能被忽略,对的,再高级的CPU确实只有那么几个寄存器,CPU的所有动作都是直接对寄存器操作的,都是要一个一个来的,就相当于总理,总理日理万机,即便要干n多事情,还是在他那个有限的大脑里一件一件的去做,所以为了运行大的和多的程序必然要有个临时的场地,而且还要保证跟CPU能够进行最快的通信,这里的内存就相当于总理的秘书处,存放将要运行的和正在运行的程序变量和各种参数,因为是总理的秘书处,所以跟总理的沟通也是最快的。
内存和硬盘不同,硬盘是用来存储数据的,不是为了运行程序的。程序运行时,是“秘书处”先把程序代码从硬盘中转移到内存中,然后等到总理(CPU)腾出手来,就从秘书处(内存)进行运行数据,当然了,总理(CPU)的思考过程是要在总理的大脑中(CPU内的计算单元和少量的寄存器)。
总结,内存就是一个临时存储器,运行程序时,有一个机构会先将程序代码和参数变量存放到内存中,然后CPU来读,接着执行,当然了,当关机后,里面的数据也就没有了。
————————————————
原文链接:https://blog.csdn.net/u012351051/article/details/80821128

8.面向对象和面向过程的编程的特点和区别

过程:性能更高,没有对象易于维护,复用,拓展。
对象:易于维护,易于复用,易于拓展,由于面些对象有继承,封装,多态性的特性,可以设计出低耦合的系统,使得系统更加灵活,易于维护,缺点是性能低。

9.多线程之间的同步:

其实就是读写分开和加锁即可。

10.你平时用多线程吗?

线程池用的比较多,比如爬虫爬取数据的时候。

4.算法题*1

//连续子数组的最大和。比如:[ -2, 1, 2, 3, -5] -> 6
//[ -2, 1, 2, -10,  4, -5] -> 4

这个就要求说出算法,然后求解即可。
我就贴一下当时写的吧。。
思路:
分别以1,2,3,4,5,6……到数组大小为窗口,
对数组进行遍历,得到此窗口下整体最大的那个值,
然后对每个窗口下的最大值进行比较,得到最大值。

#include <stdio.h>
#include <stdlib.h>
//连续子数组的最大和。比如:[ -2, 1, 2, 3, -5] -> 6
//[ -2, 1, 2, -10,  4, -5] -> 4

//size:窗口
int maxArray(int size,int length,int* a)
{
    int i=0;
    int j=0;
    int sum=0;
    int max=-10000000;
    for(i=0; i<=length-size; i++)
    {
        sum=0;
        j=i;
        while(j<size+i)
        {
            sum+=a[j];
            j++;
        }
        if(sum>max)
        {
            max=sum;
        }

    }
    return max;

}

int main()
{
    int a[8]= {-2,1,6,-1,4,-5,6};
    int size=8;
    int i=0;
    int max=-1000000;
    for(i=1; i<=size; i++)
    {
        int tmp=maxArray(i,size,a);
        printf("%d\n",tmp);
        if(max<tmp)
        {
            max=tmp;
        }

    }
    printf("%d",max);

}

发布了140 篇原创文章 · 获赞 114 · 访问量 18万+

猜你喜欢

转载自blog.csdn.net/qinglingLS/article/details/100283666