常问问题(1)
- C++与Java的区别
(1)c++是编译型语言,Java是解释型语言。
(2)c++速度更快,Java可以利用JVM跨平台
(3)Java没有指针,虽然底层也使用指针但不开放。
(4)Java是纯面向对象的语言,所有代码(包括函数、变量)都必须在类中定义。C++向前兼容C语言,保存部分面向过程的特性
(5)C++支持多继承,Java中类都是单继承的。但是继承都有传递性,同时Java中的接口是多继承,类对接口的实现也是多实现。
(6)C++中,开发需要自己去管理内存,但是Java中JVM有自己的GC机制,虽然有自己的GC机制,但是也会出现OOM和内存泄漏的问题。
(7)C++运算符可以重载,但是Java中不可以。
(8)C++中支持强制自动转型,Java中必须手动,会出现ClassCastException(类型不匹配)。
可以继续补充,越多越好
- 贝叶斯公式及理解
先验概率(prior probability)是指根据以往经验和分析得到的概率。
后验概率:事情已经发生,要求这件事情发生的原因是由某个因素引起的可能性的大小
贝叶斯为全概率公式+条件概率公式+乘法公式
先验信息+样本信息→后验信息
新样本X的信息起到了对先验信息的修正作用
新信息出现后的A概率= A概率x新信息带来的调整
贝叶斯(Bayes)公式是解决由观察到的现象(或是测量的数据)去推断现象(或是数据)后面的规律(或是假设)的发生的概率的问题。那么如果将上面公式中的A换成“规律”,B换成“现象”,这个公式就一目了然,能很容易理解和运用了。
全概率公式为由因索果,贝叶斯为由果索因
- 电脑从按下开机键的过程
-
按下电源开关,电源就开始向主板和其它设备供电;当芯片组检测到电源已经开始稳定供电了(当然从不稳定到稳定的过程只是一瞬间的事情),它便撤去RESET信号(如果是手工按下计算机面板上的Reset按钮来重启机器,那么松开该按钮时芯片组就会撤去RESET信号);CPU马上就从地址FFFF:0000H处开始执行指令,放在这里的只是一条跳转指令,跳到系统BIOS中真正的启动代码处。“基本输入输出”(Basic Input/Output System),简称为BIOS。
-
BIOS程序首先检查,计算机硬件能否满足运行的基本条件,这叫做"硬件自检"(Power-On Self-Test),缩写为POST。如果硬件出现问题,主板会发出不同含义的蜂鸣,启动中止。如果没有问题,屏幕就会显示出CPU、内存、硬盘等信息。
-
接下来系统BIOS将查找显卡的BIOS。系统BIOS在这个地方找到显卡BIOS之后就调用它的初始化代码,由显卡BIOS来初始化显卡。此时多数显卡都会在屏幕上显示出一些初始化信息,介绍生产厂商、图形芯片类型等内容,不过这个画面几乎是一闪而过。系统BIOS接着会查找其它设备的BIOS程序,找到之后同样要调用这些BIOS内部的初始化代码来初始化相关的设备。
-
查找完所有其它设备的BIOS之后,系统BIOS将显示出它自己的启动画面,其中包括有系统BIOS的类型、序列号和版本号等内容。
-
接着系统BIOS将检测和显示CPU的类型和工作频率,测试所有的RAM,并同时在屏幕上显示内存测试的进度。
-
内存测试通过之后,系统BIOS将开始检测系统中安装的一些标准硬件设备,包括硬盘、CD-ROM、串口、并口和软驱等设备,另外绝大多数较新版本的系统BIOS在这一过程中还要自动检测和设置内存的定时参数、硬盘参数和访问模式等。
-
标准设备检测完毕后,系统BIOS内部支持即插即用的代码将开始检测和配置系统中安装的即插即用设备。每找到一个设备之后,系统BIOS都会在屏幕上显示出设备的名称和型号等信息,同时为该设备分配中断、DMA通道和I/O端口等资源。
-
到这一步为止,所有硬件都已经检测配置完毕了,多数系统BIOS会重新清屏并在屏幕上方显示出一个表格,其中概略地列出了系统中安装的各种标准硬件设备,以及它们使用的资源和一些相关工作参数。
-
接下来系统BIOS将更新ESCD(Extended System Configuration Data,扩展系统配置数据)。ESCD是系统BIOS用来与操作系统交换硬件配置信息的一种手段,这些数据被存放在CMOS(一小块特殊的RAM,由主板上的电池来供电)之中。有些机器每次启动机器时,系统BIOS都要更新一遍ESCD,显示出相关信息的原因。
-
即根据用户指定的启动顺序从软盘、硬盘或光驱启动MBR。(主引导记录)
-
控制权转交给操作系统后,操作系统的内核首先被载入内存。
- 微信发送聊天消息所经历的过程
1)在应用层生成数据”你好(对方IP)“,然后数据传入表示层节点-表示层,
2)在表示层将数据进行转换(针对计算机系统编码如IBM主机使用EBCDIC编码,而大部分PC机使用的是ASCII码等等的不同)加密,压缩-会话层
3)在会话层将这个qq消息的会话区分出来,然后将会话内容以及相关信息传到下一层
4)在传输层将会话内容和相关信息(对方IP)封入数据包
5)在网络层需要在数据包中插入写信人IP,
6)在数据链路层(对应网卡和相应驱动程序)将对方IP对应到他的硬件地址(MAC地址网络适配器唯一标识)-物理层
7)在物理层将数据包由帧转换为电信号/光信号,然后通过光纤传输,不断的转发到达目的地,这个节点加入了校验值,万一目的地校验后出现了丢失那么重新发送一次,-光纤。
8)剩余的就是和上述相反的过程,由PC-B接收,然后小黑回复(我没喝水)。
我觉得这个应该是C/S架构的,中间应该有服务器;
其次是会涉及NAT地址的转换;
会话层?
传输层和网络层的叙述不清楚;应该是tcp;
逆过程解包叙述清楚
- 登录网页的过程
1 用户输入URL网址或者ip地址
2 浏览器向DNS请求解析URL地址
3 域名系统DNS解析出服务器的IP地址
4 浏览器与服务器建立TCP连接
5 浏览器发出取文件命令:GET/index.html
6 服务器给出响应,把文件index.html发给浏览器
7 TCP连接释放
8 浏览器显示文件
登录
客户端请求后台登录接口。
后台验证通过后,将用户的登录状态保存至 cookie 并写入客户端。
客户端再次登录网站,请求 login 接口时,后台直接从客户端获取到该用户写入 cookie 的登录状态。
通过对该状态的验证,确认用户是否需要再次登录。
如 cookie 过期,则跳转至登录页;如未过期,则直接显示为已登录状态。