2017/7/14秋招OPPO提前批一面前快速复习

面向对象三大特性

  1. 封装
    将对象信息状态通过访问权限修饰符隐藏在对象内部,不允许外部程序直接访问对象内部信息。
  2. 继承
    子类自动继承其父级类中的属性和方法,并可以添加新的属性和方法或者对部分属性和方法进行重写。继承增加了代码的可重用性。
  3. 多态分为编译时多态和运行时多态
  • 编译时多态:在编译阶段确定函数的调用类型(函数重载,模板类)
  • 运行时多态:在运行阶段才确定的调用的方法,基类指向派生类对象,调用派生类的函数。

虚函数和多态

构造函数不能是虚函数,因为构造的时候,对象还是一片位定型的空间,只有构造完成后,对象才是具体类的实例。
内联(inline)函数不能是虚函数,因为内联函数不能在运行中动态确定位置。即使虚函数在类的内部定义定义,但是在编译的时候系统仍然将它看做是非内联的。
只有类的成员函数才能声明为虚函数,因为虚函数仅适合用于有继承关系的类对象,所以普通函数不能声明为虚函数。

  1. 虚函数表的在程序内存布局中的存放
    在这里插入图片描述

引用和指针的区别

  • 引用是别名,指针是地址
  • 指针可以在运行时改变它指向的值,引用一旦初始化跟某个对象绑定后就不在改变
  • 程序为指针变量分配内存区域,而不为引用分配内存区域,具体和编译器也有关
  • 程序在编译时分别将指针和引用添加到符号表上,指针变量在符号表上对应的地址值为指针变量的地址值,而引用在符号表上对应的地址值为引用对象的地址值。 这是使用指针不安全而使用引用安全的主要原因。从某种意义上来说引用可以被认为是不能改变的指针
  • 不存在指向空值的引用这个事实,指针则应该总是被测试,防止其为空
  • 指针的级数没有限制,但是引用只能是一级,没有指向引用的引用
  • sizeof得到的返回不一样
  • 引用是类型安全的,指针则不是(引用比指针多了类型检查)

另:
常量指针:const int* ptr ;表示指针变量为常量,不能将ptr作为左值进行操作(被赋值),且定义常量指针必须初始化
常量引用:const int & ref;表示引用对象为常量。

C++的类型安全

  • 用new申请内存,对象类型严格匹配,而malloc返回类型是void*
  • 函数参数类型为void*的可以写成模板
  • const代替define定义常量i
  • nline代替define定义函数提供
  • dynamic_cast使得转换更加安全

七层网络模型

  • 应用层:应用层决定了向用户提供服务时通信的活动。
    • HTTP,HTTPS,FTP,POP3、SMTP、DNS域名系统
  • 表示层:提供各种用于应用层数据的编码和转换功能,确保一个系统的应用层发送的数据能被另一个系统的应用层识别。
  • 会话层:负责建立、管理和终止表示层实体之间的通信会话。
    • TLS/SSL
  • 传输层:为上层协议提供端到端的可靠和透明的数据传输服务,包括处理差错控制和流量控制等问题。
    • TCP传输控制协议 / UDP用户数据报协议
  • 网络层:网络层用来处理在网络上流动的数据包。数据包是网络传输的最小数据单位。该层规定了通过怎样的路径(所谓的传输路线)到达对方计算机,并把数据包传送给对方。
    • IP,ICMP,ARP,RARP
  • 数据链路层:用来处理连接网络的硬件部分。包括控制操作系统、硬件的设备驱动,及光纤等物理可见部分.
    • ethnet ethnet2 820.3 ppp fr x.25 hdlc
  • 物理层

i++为什么不是原子操作

原子操作是不可分割的操作,在执行完毕之前不能被其他任何事务和事件中断。

  1. 在单线程中,能在单条指令完成的操作都叫原子操作。
  2. 在多线程中,不能被其他线程打断的操作叫原子操作。

i++分为三个阶段,从内存拷贝到寄存器,寄存器自增,从寄存器写回内存。三个阶段的中间都可以被中断分离。

构造哈希函数的方法

数字分析法:可以从关键字中选出分布较均匀的若干位,构成哈希地址。
除留余数法:假设哈希表长为m,p为小于等于m的最大素数,则哈希函数为h(k)=k % p
平方取中法:当无法确定关键字中哪几位分布较均匀时,可以先求出关键字的平方值,然后按需要取平方值的中间几位作为哈希地址。
分段叠加法:将关键字分成位数相等的几部分

散列表解决冲突的方法

  1. 开放定址法
    • 线性探测再散列:冲突发生时,顺序查看表中下一单元,直到找出一个空单元或查遍全表。
    • 二次探测再散列:冲突发生时,在表的左右进行跳跃式探测,比较灵活。
    • 伪随机数探测再散列:应建立一个伪随机数发生器,并给定一个随机数做起点。
    • 再哈希法:同时构造多个不同的哈希函数,当哈希地址Hi=RH1(key)发生冲突时,再计算Hi=RH2(key)……,直到冲突不再产生。
  2. 链地址法
    将所有哈希地址为i的元素构成一个称为同义词链的单链表,并将单链表的头指针存在哈希表的第i个单元中

TCP和UDP的区别

  1. tcp有连接,UDP无连接
  2. TCP可靠,有拥塞控制机制,无差错,不丢失,不重复,按序到达;UDP不可靠,没有拥塞控制,网络拥塞不会使主机发送速率降低
  3. TCP面向字节流,UDP面向报文
  4. TCP是点到点的通信,UDP支持一对一,一对多,多对一,多对多。
  5. TCP首部开销20字节,UDP只有8个

TCP使用场景:HTTP,HTTPS,FTP等传输文件的协议,邮件传输的协议,SSH,qq文件传输
UDP使用场景:语音,视频

HTTP状态返回码

1xx 接受的请求正在处理
2xx 请求正常处理完毕

  • 200 OK从客户端发来的请求在服务器端被正常处理了
  • 204 请求已经成功处理,但是返回的报文不包含主体部分
  • 206 客户端进行了范围请求,而服务器成功执行了请求

3xx 重定向状态码,需要附加的操作以完成请求

  • 301 请求的资源已经被分配了新的URI
  • 302 请求的资源已经被分配了新的URI,希望本次使用新的URI访问
  • 303 请求的资源存在着另一个URI,应用GET方法定向获取请求的资源
  • 304 服务端资源无变化,可使用缓存资源
  • 307 同302,但是会遵照标准,不会从POST变成GET

4xx 服务器无法处理请求

  • 400 请求参数不合法
  • 401 未认证
  • 403 服务端禁止访问该资源
  • 404 服务端未找到该资源

5xx 服务器处理请求出错

  • 500 服务端异常
  • 503 服务器处在超负载或者停机维护

GET和POST的区别

  1. GET请求的参数是放在URL里的,POST请求参数是放在请求body里的
  2. GET请求的URL传参有长度限制,而POST请求没有长度限制
  3. GET请求的参数只能是ASCII码,所以中文需要URL编码,而POST请求传参没有这个限制
  4. GET比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息
  5. GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留

进程的状态

三态模型:运行态,就绪态,阻塞态
五态模型:新建态,终止态,运行态,就绪态,阻塞态

HTTPS和HTTP的区别主要如下

1、https协议需要到ca申请证书,一般免费证书较少,因而需要一定费用。
2、http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。
3、http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
4、http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。

HTTPS工作流程

第一步:客户使用https的URL访问Web服务器,要求与Web服务器建立SSL连接。
第二步:Web服务器收到客户端请求后,会将网站的证书信息(证书中包含公钥)传送一份给客户端。
第三步:客户端的浏览器与Web服务器开始协商SSL连接的安全等级,也就是信息加密的等级。
第四步:客户端的浏览器根据双方同意的安全等级,建立会话密钥,然后利用网站的公钥将会话密钥加密,并传送给网站。
第五步:Web服务器利用自己的私钥解密出会话密钥。
第六步:Web服务器利用会话密钥加密与客户端之间的通信。

进程和线程

什么是进程:具有独立功能的程序关于某个数据集合的一次运行活动。
什么是线程:线程是程序执行流的最小单元,是被系统独立调度和分派的基本单位。

线程的特点

线程是操作系统调度的基本单位;
线程的状态切换比进程更迅速且开销更小;
线程不拥有资源,只是任务的一种抽象,同一进程内的线程共享该进程的资源;
对单核CPU而言,同一时刻只能运行一个线程;
一个进程至少有一个线程,且是它的主线程。

进程和线程的区别

进程之间相互独立(资源的独立),而某一进程的各线程间共享资源(如果不能共享,岂不就与进程没多大区别了);
由于进程的独立性,当进程间要相互通信时,系统只能提供各种外部方法,比较繁琐,而线程间的通信可以通过共享数据来实现;
线程的状态切换比进程更快捷且开销更小;
在多线程系统中,线程才是可执行对象,因为线程是进程中的并发任务的一种抽象。原先,进程是运行任务的主体,有了线程之后,运行任务的重担就落到了线程身上。

线程的优点

充分利用CPU资源(如下的超线程技术会提到这点);
实现了进程内并发,使用任务的粒度分得更细,有利于开发人员对任务的分解、抽象(分解与抽象原则);
实现了进程内异步事件的处理,尤其是GUI事件、服务端应用等;
提高了程序的运行效率。

同步和异步

同步,就是调用一个过程时,如过程还在执行状态,没有返回结果,那么在该过程返回之前,就不能继续做下一件事情。概括同步的特点就是:顺序性、确定性、简易性。
异步是相对于同步而言的,意思与同步相反。即调用一个过程时,就接着做下面的事情,不立即获得该过程的返回值。

并发和并行

当有多个进程在运行时,如果系统是单核的CPU,那它根本不可能真正地同时运行一个以上的进程。系统只能把CPU运行时间划分成若干个时间段(在每个时刻段的起始时刻使用调度算法分配任务),再将每个时间段分配给每个进程执行。在一个时间段内,某进程在运行时,其它进程处于挂起状态(就绪状态)。这种方式我们称之为并发
当系统有一个以上CPU(即多核)时,则线程的操作有可能不是并发的。当一个CPU执行一个线程时,另一个CPU可以执行另一个线程,两个线程互不抢占CPU资源,可以同时进行,这种方式我们称之为并行

弗林斯

弗林斯小姐姐是个可爱的人。——2017/7/14日记

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
基于微信小程序的家政服务预约系统采用PHP语言和微信小程序技术,数据库采用Mysql,运行软件为微信开发者工具。本系统实现了管理员和客户、员工三个角色的功能。管理员的功能为客户管理、员工管理、家政服务管理、服务预约管理、员工风采管理、客户需求管理、接单管理等。客户的功能为查看家政服务进行预约和发布自己的需求以及管理预约信息和接单信息等。员工可以查看预约信息和进行接单。本系统实现了网上预约家政服务的流程化管理,可以帮助工作人员的管理工作和帮助客户查询家政服务的相关信息,改变了客户找家政服务的方式,提高了预约家政服务的效率。 本系统是针对网上预约家政服务开发的工作管理系统,包括到所有的工作内容。可以使网上预约家政服务的工作合理化和流程化。本系统包括手机端设计和电脑端设计,有界面和数据库。本系统的使用角色分为管理员和客户、员工三个身份。管理员可以管理系统里的所有信息。员工可以发布服务信息和查询客户的需求进行接单。客户可以发布需求和预约家政服务以及管理预约信息、接单信息。 本功能可以实现家政服务信息的查询和删除,管理员添加家政服务信息功能填写正确的信息就可以实现家政服务信息的添加,点击家政服务信息管理功能可以看到基于微信小程序的家政服务预约系统里所有家政服务的信息,在添加家政服务信息的界面里需要填写标题信息,当信息填写不正确就会造成家政服务信息添加失败。员工风采信息可以使客户更好的了解员工。员工风采信息管理的流程为,管理员点击员工风采信息管理功能,查看员工风采信息,点击员工风采信息添加功能,输入员工风采信息然后点击提交按钮就可以完成员工风采信息的添加。客户需求信息关系着客户的家政服务预约,管理员可以查询和修改客户需求信息,还可以查看客户需求的添加时间。接单信息属于本系统里的核心数据,管理员可以对接单的信息进行查询。本功能设计的目的可以使家政服务进行及时的安排。管理员可以查询员工信息,可以进行修改删除。 客户可以查看自己的预约和修改自己的资料并发布需求以及管理接单信息等。 在首页里可以看到管理员添加和管理的信息,客户可以在首页里进行家政服务的预约和公司介绍信息的了解。 员工可以查询客户需求进行接单以及管理家政服务信息和留言信息、收藏信息等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值