博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
程序员笔试面试常见题总结,更新ing
阅读量:4138 次
发布时间:2019-05-25

本文共 3045 字,大约阅读时间需要 10 分钟。

1.谈谈你对面向对象的认识

面向对象编程的基本特征封装、继承、多态。

·封装就是将对象的信息保护起来,不让外部轻易知道他的内部实现,而且不同对象得到的信息也不同,增强模块的独  立性,实现方式是访问方式和继承方式的不同,如公有访问、私有访问、保护访问,还有友源的声明等。

·继承 就是子类自动共享父类之间数据和方法的机制

·多态就是同一消息为不同的对象接受时可产生完全不同的行动,用虚函数实现,将子类的地址赋给基类的指针。

2.进程和线程的区别和联系

定义:
·进程是一个应用程序的一次运行活动,是进行资源分配和调度的独立单位
·线程是CPU调度和分派的基本单位,是比进程更小的能独立运行的基本单位,只拥有能运行的必不可少的基本资源,如程序计数器等,与同属一个进程的其他线程共享全部资源,实现了并行开发
关系:
·一个线程可以撤销和建立另一个线程,一个进程可以用多个线程并行执行
区别:
·操作系统资源管理方式不同,进程有独立的地址空间,一个进程挂掉,保护模式下不会影响其他进程,一个线程只是进程的不同执行路径,一个线程挂掉等于整个进程死掉,所以多进程比多线程健壮,但更消耗资源,在需要并行执行的情况下,用多线程
什么是线程安全?
·线程安全就是多线程访问同一代码,不会产生不确定的结果。依靠的是线程同步。多线程环境中,各线程不共享数据或者对数据只有读操作没有写操作,则一定是线程安全的。线程安全是由全局变量和静态变量引起的。

3.复杂度

对于T(n) = a*T(n/b)+c*n^k;T(1) = c 这样的递归关系,有这样的结论主定理(master theorem)

if (a > b^k)   T(n) = O(n^(logb(a)));logb(a)b为底a的对数
if (a = b^k)   T(n) = O(n^k*logn);
if (a < b^k)   T(n) = O(n^k);

T(N) = N + T(N/2)+T(2N), 问T(N)的时间复杂度是多少? 

4.static 

C:①静态全局变量,特点: 在全局数据区分配内存;未经初始化的会自动初始化为0;在声明他的整个文件是可见的,对其他文件是不可见的
②静态局部变量,特点:在全局数据区分配内存;未经初始化的会自动初始化为0;作用域是局部作用域,当定义他的函数块或语句块结束时,他的定义域也随之结束
③静态函数,特点:只能在声明他的文件中可见,不能被其他文件使用
C++:①静态数据成员,特点:只有一份拷贝,该类的所有对象共同使用;分配在全局数据区,需要在定义时分配内存,所以不能在类声明中定义;一样遵循 public、protected、private访问规则
②静态成员函数

5.const

作用:
①声明 常量②能够进行编译器类型检查③可以方便进行变量值的更改④为函数重载提供一个参考⑤节省内存空间⑥提高效率,编译器通常不为普通const常量分配存储空间,而是将它们保存在符号表中,这使得它成为一个编译期间的常量,没有了存储与读内存的操作,使得它的效率也很高⑦保护被修饰的变量,增强程序健壮性
使用:
·如果const位于*的左侧,则const就是用来修饰指针所指向的变量,即指针指向为常量;
·如果const位于*的右侧,const就是修饰指针本身,即指针本身是常量。
·修饰成员数据的话,该数据不能被修改,并且只能在初始化列表中初始化
·修饰成员函数的话,一般为 void func() const{},不能修改类中非const修改的成员函数,并且不能修改成员数据
·const修饰的类的对象,表示该对象是常量对象,其中任何变量都不能被修改;不能调用const修饰的对象中的非const修饰的成员函数
const类型转化为非const类型:
const_cast <type_id>  (expression)

6.func(i++,++i);

函数调用的时候,先执行表达式的运算,运算顺序是从右到左,实参入栈顺序也是从右到左,对于++i进行计算,然后传ptr[i],对于i++,先将pt=ptr[i],i=i+1,然后传pt。
几个常见的:i=0,(每一行i=0)
printf("%d %d",i++,++i); 1,2
printf("%d %d",++i,i++); 2,0
printf("%d %d",i++,i);   0,1
printf("%d %d",i,i++);   1,0

7.float的存储

float 是4字节,第31位是符号位,第30-23位是指数位(8位),后面23bit是尾数。
首先把 十进制数换算成二进制,如9.25(10)=1001.01(2)=1.00101*2^3,则float 存储为 
1 1000 0010(127+3) 00101 0...
double 类似,11位指数位
8.OJ常用输入输出:
 while(scanf(“%d%d”,&a,&b) != EOF) ... while(cin>>a>>b)//没有告诉你输入几组的
 while(scanf(“%d%d”,&a,&b), a!=0&&b!=0) ...  while(cin>>a>>b,a!=0&&b!=0)//以0 0结束
 while(gets(str)!= NULL) //输入多行字符串
printf()的返回值是打印的字符数,如果发生错误则返回一个负值.  scanf()的返回值是成功赋值的变量数量, 发生错误时返回.

操作系统:

1.页面置换算法:地址映射过程中,若在页面中发现所要访问的页面不再内存中,则产生缺页中断。当发生缺页中断时操作系统必须在内存选择一个页面将其移出内存,以便为即将调入的页面让出空间。而用来选择淘汰哪一页的规则叫做页面置换算法
最佳置换算法(OPT),是不可能实现的;
先进先出置换算法(FIFO),会产生Belady异常现象;
最近最久未使用(LRU)算法,经常采用效果较好,需要硬件支持。
2.PV 操作:用信号量及PV操作来实现进程的同步和互斥
P(S):①将信号量S的值减1,即S=S-1;
        ②如果S>=0,则该进程继续执行;否则该进程置为等待状态,排入等待队列。
V(S):①将信号量S的值加1,即S=S+1;
        ②如果S>0,则该进程继续执行;否则释放队列中第一个等待信号量的进程。
3.进程包括:程序、数据、PCB(进程管理块:记录了操作系统所需要的,描述进程情况和控制进程运行所需要的所有信息,包括:进程标识符信息、处理机状态、进程调度、进程控制信息)。
4.SPOOLING技术(Simultaneous Peripheral Operating On Line)
同时联机外围操作技术,它是关于慢速字符设备如何与计算机主机进行数据交换的一种技术,通常又称假脱机技术。
5.原语,是由若干条指令组成的,用于完成一定功能的一个过程。primitive or atomic action 是由若干个机器指令构成的完成某种特定功能的一段程序,具有不可分割性·即原语的执行必须是连续的,在执行过程中不允许被中断。
6.解决死锁的方法:死锁是指两个或多个进程因无休止地互相等待永远不会成立的条件而形成的一种永久阻塞状态。产生死锁的必要条件:1)互斥使用2)占用并等待3)非抢占资源4)部分的分配,方法:①死锁检测和恢复②死锁预防③死锁避免:银行家算法

转载地址:http://ehovi.baihongyu.com/

你可能感兴趣的文章
抓包工具
查看>>
海量数据相似度计算之simhash和海明距离
查看>>
DeepLearning tutorial(5)CNN卷积神经网络应用于人脸识别(详细流程+代码实现)
查看>>
DeepLearning tutorial(6)易用的深度学习框架Keras简介
查看>>
DeepLearning tutorial(7)深度学习框架Keras的使用-进阶
查看>>
流形学习-高维数据的降维与可视化
查看>>
Python-OpenCV人脸检测(代码)
查看>>
python+opencv之视频人脸识别
查看>>
人脸识别(OpenCV+Python)
查看>>
6个强大的AngularJS扩展应用
查看>>
网站用户登录系统设计——jsGen实现版
查看>>
第三方SDK:讯飞语音听写
查看>>
第三方SDK:JPush SDK Eclipse
查看>>
第三方开源库:imageLoader的使用
查看>>
自定义控件:飞入飞出的效果
查看>>
自定义控件:动态获取控件的高
查看>>
第三方开源库:nineoldandroid:ValueAnimator 动态设置textview的高
查看>>
第三方SDK:百度地图SDK的使用
查看>>
Android studio_迁移Eclipse项目到Android studio
查看>>
JavaScript setTimeout() clearTimeout() 方法
查看>>