开发岗笔试基础题总结

const和指针

const int * a // a是一个指针,指向一个const int类型的内存, a本身可以修改指向别的变量,但是a所指向的内存中的数据不能修改。
int const * a // 和第一种相同
int * const a // const修饰的是a, a是一个int *型的变量。也就是说a本身不能修改,即指向确定的内存,但所指向的内存中的数据可以修改。
const int * const a // a以及a所指向的内存中的值都不能被修改。

主要看const后边修饰的是什么,

  • 第一种const修饰的是int * a, 那就是*a不能被改变, 而a可以改变。
  • 第二种const修饰的是* a, 同样*a不能改变,即指向的内存中的值不能改变。
  • 第三种const修饰的是a,即a本身不能被修改,也就是说指向确定的内存空间,而*a内存中的值可以被改变。

结构体的内存对齐

#include <iostream>
#include <cstddef>

using namespace std;

struct a{
        char a;
        int b;
        short c;
        double d;
};

struct b{
        char a;
        short b;
        int c;
        float d;
};

int main()
{
        cout<<"sizeof(struct a) : "<<sizeof(struct a)<<" sizeof(struct b) : "<<sizeof(struct b)<<endl;
        cout<<"sizeof(short) : "<<sizeof(short)<<endl;
        cout<<"sizeof(int) : "<<sizeof(int)<<endl;
        cout<<"sizeof(long int) : "<<sizeof(long int)<<endl;
        cout<<"sizeof(long long int) : "<<sizeof(long long int)<<endl;
        cout<<"sizeof(flaot) : "<<sizeof(float)<<endl;
        cout<<"sizeof(double) : "<<sizeof(double)<<endl;

        printf("offset of b in struct a : %lun", offsetof(struct a, b));
        printf("offset of d in struct a : %lun", offsetof(struct a, d));
        printf("offset of b in struct b : %lun", offsetof(struct b, b));

        return 0;
}
程序在64位机器上的输出结果为
sizeof(struct a) : 24 sizeof(struct b) : 12
sizeof(short) : 2
sizeof(int) : 4
sizeof(long int) : 8
sizeof(long long int) : 8
sizeof(flaot) : 4
sizeof(double) : 8
offset of b in struct a : 4
offset of d in struct a : 16
offset of b in struct b : 2

结构体的内存对齐有以下

  1. 结构体变量的起始地址能够被其最宽的成员大小整除
  2. 结构体每个成员相对于起始地址的偏移能够被其自身大小整除,如果不能则在前一个成员后面补充字节
  3. 结构体总体大小能够被最宽的成员的大小整除,如不能则在后面补充字节

struct a 来说,

  • 第一个成员是char类型的,占用一个字节,偏移地址为0。
  • 第二个成员是int类型,本身占用4个字节,原本偏移为1,但是1不能被4整除,因此在a后边需要补充3个字节,这样b的起始地址偏移就变成了4,能够被自身大小整除,因此b的起始地址偏移为4。
  • 第三个成员是short类型,本身占用2个字节,偏移为8,能够被本身大小整除。
  • 第四个成员是double类型,本身占用8个字节,偏移为10,不能被本身大小整除,前一个c后边需要补充6个字节,也就是说double d的起始地址偏移为16。
  • 最后,整个结构体占用24个字节,最宽的成员 大专栏  开发岗笔试基础题总结double d占8个字节,24能被8整除,所以sizeof (struct a) = 24

使用定义在 stddef.h 的宏offsetof(type, member) ,可以查看成员相对与结构体类型的偏移值

一道关于内存计算的题

#include <iostream>
#include <cstdio>

using namespace std;

int main()
{
	int array[2019]={0};
	array[19] = 2019;

	int offset = (unsigned long)((short *)array+2019) - (unsigned long)array + *(unsigned char *)(array+19);

	cout<<offset<<endl;

	printf("%pn",  2019);

	printf("%pn", array);
	cout<<(unsigned long)(array)<<endl;
	cout<<(unsigned long)((short *)array+2019)<<endl;
	cout<<(unsigned long)array+*(unsigned char *)(array+19)<<endl;
	cout<<(int)*(unsigned char *)(array+19)<<endl;

    return 0;
}
输出结果如下
4265
0x7e3						// 2019的十六进制,小端存储模式,所以在内存中应为 e3 07, 故*(unsigned char *)(array+19) = 0xe3 = 227
0x7ffeec55a800  // 64位机器输出的地址是64位的
140732863457280 // array的起始地址
140732863461318 // short占用两个字节 (unsigned long)((short *)array+2019)相当于array向后偏移了2*2019=4038个字节,因此地址值为array+4038
140732863457507 //
227

C++ 对象的存储方式

#include <iostream>
#include <string>

using namespace std;

class A{
public:
        A(){}
        ~A(){}

        void p(const string & s)
        {
                cout<<s<<endl;
        }
};

int main()
{
        A * p = NULL;
        p->p("hello worldn");
}

此程序能够正常编译运行输出hello world

c++类方法存储在代码段,因此同一个类的所有方法公用代码段,p->p(“hello worldn”);访问的是代码段,所以不会出现段错误或者core dump。

红黑树的性质

红黑树是每个节点都带有颜色属性的二叉查找树。在二叉查找树强制一般要求外,对于任何有效的红黑树增加额外的要求。

  • 节点是红色或者黑色;
  • 根是黑色的;
  • 所有叶子节点都是黑色的(叶子是NIL节点);
  • 每个红色节点必须有两个黑色的子节点(或:从每个叶子节点到根的所有路径上不能有两个连续的红色节点);
  • 从任一节点到其每个叶子节点的所有简单路径都包含相同数目的黑色节点。

这些约束确保了红黑树的关键特性:从根到叶子的最长可能路径不多于最短的可能路径的两倍长。保证红黑树大致是平衡的。保证红黑树在最坏的请胯下也是高效的。

二叉查找树,也叫二叉搜索树、有序二叉树或者排序二叉树,是一颗空树或者具有以下性质的二叉树:

  • 若任一节点的左子树不为空,则左子树上所有节点的值均小于它的根节点的值;
  • 若任一节点的右子树不为空,则右子树上所有节点的值均大于它的根节点的值;
  • 任意节点的左右子树也分别为二叉查找树;
  • 没有键值相等的节点。

TCP三次握手和四次挥手

死锁

死锁:多个进程由于互相等待对方持有的资源而造成的谁都无法执行的情况叫死锁。

死锁产生的四个必要条件

  • 互斥使用
  • 不可抢占
  • 请求和保持
  • 循环等待

死锁处理方法

  • 死锁预防:破坏死锁产生的条件;

    • 一次性申请所有资源,不会占有资源还去申请其他资源

      • 缺点1:需要预知未来,编程困难
      • 缺点2:许多资源分配后很长时间后才使用,资源利用率低
    • 对资源进行排序,资源申请必须按照顺序进行,不会出现环路等待
      • 缺点:仍然造成资源浪费
  • 死锁避免:检测每个资源请求,如果会造成死锁就拒绝分配相应资源;
    • 银行家算法

      • 请求出现时:首先假装分配,然后调用银行家算法,如果进程序列无法运行下去就拒绝。
      • 时间复杂度为, m为资源个数, n为进程的个数。
  • 死锁检测+恢复:检测到死锁出现时,让一些进程回滚从而让出资源;
    • 银行家算法每次申请都需要执行, 效率低:发现问题再处理

      • 定时检测或者发现资源利用率低时检测。
      • 选择哪些进程回滚?
      • 如何实现回滚?
  • 死锁忽略 (windows, linux采用的方式)
    • 代价最小
    • PC重启影响小
    • 死锁出现概率小

Linux I/O多路复用

聊聊IO多路复用之select、poll、epoll详解

epoll例程

原文地址:https://www.cnblogs.com/lijianming180/p/12230904.html

时间: 2024-10-18 21:09:47

开发岗笔试基础题总结的相关文章

滴滴出行2017春招运维岗笔试真题汇总

1.当前云计算技术发展迅速,主流云计算平台大多数都以Linux为基础.请问以下哪个技术是Linux内核提供的可以限制.记录.隔离进程组所使用的物理资源(如:cpu,memory,IO等等)的机制正确答案: B A KVMB cgroupC cgroupD namespace 2.某IP地址为160.55.115.24/20,它的子网划分出来的网络ID地址?正确答案: A A 160.55.112.0B 160.55.115.0C 160.55.112.24D 其他答案都不对 3.TCP协议在建立

2017年腾讯 秋招软件开发笔试编程题回忆版

2017年腾讯秋招软件开发笔试编程题回忆版 (所有题目大致描述如下,并非完整的题目回忆,但意思大致一样) 1.又一个魔法城市,城市里面有n个魔法城堡,序号为0,1,2...n-1:魔法城堡之间都有路径相连:魔法城堡两两之间的到达的距离不同,因此所需时间也可能不会相同.如魔法城堡0到魔法城堡2需要耗时4小时:现,小明想从魔法城堡0到魔法城堡1,他想知道需要花费多少时间:为了快速到达,有一魔法扫把,魔法扫把使用次数有限,使用一次,可以将某一段间的时间减半:求小明从魔法城堡0到魔法城堡1花费的最小时间

盛大-游戏开发岗位笔试题目心得

今天早上参加了盛大游戏的游戏开发岗位的笔试,在武汉大学进行的,跑到武汉去. 考的题目都非常基础,大概就C,C++,数据结构基础,多线程概念,软件测试和SQL基本查询.没有考任何和图形API或者游戏开发相关的基础知识.但是感觉题量略微有点大,一个半小时的时间还是很紧凑的. 最后两题论述题,其中一题是:现在多核CPU越来越成为主流,游戏开发中应如何体现? (我答的是用多线程写,多核处理器就是为多线程和异步准备的.) 最后一题是:玩家的PC上面变化多样,安装了各种各样的杀毒软体和各种各样的其他软体,应

《PHP程序员面试笔试真题解析》——新书上线

你好,是我--琉忆.很高兴可以跟你分享我的新书. 很高兴,在出版了PHP程序员面试笔试宝典后迎来了我的第二本书出版--<PHP程序员面试笔试真题解析>. 如果你是一个热爱PHP的程序员,刚踏入PHP职场,你值得拥有这本书来自学一番,再去尝试找PHP相关的工作,对你帮助绝对不是一般的大!! PS:宝典和真题解析其实是一套的~ 以下简单的对我的新书做个介绍~ 前言 本书的适用群体:刚接触PHP,自学一段时间PHP后打算去找PHP相关的PHP面试工作的群体.这部分群体可以尝试着去练习这部分企业中经常

《PHP面试笔试真题库》——PHP面试的好帮手

你好,是我琉忆. 一个文艺的PHP开发工程师. 很荣幸能够在这里带来我的第一本新书——<PHP程序员面试笔试真题库>. 一.创作过程 <PHP 程序员面试笔试真题库>是我的第三本书,继<PHP 程序员面试笔试宝典>和<PHP 程序员面试笔试真题解析>后的第三本.它的出现完全是为了弥补宝典和真题解析的欠缺.宝典重点讲的是PHP相关的知识点,而真题解析针对的重点则是面试题的讲解,而真题库的重点在于罗列往年的PHP套题,让应聘者自行去测试PHP真题,更好的应对PH

1、基础题

基础题: 1.表单中 get与post提交方法的区别? 答:get是发送请求HTTP协议通过url参数传递进行接收,而post是实体数据,可以通过表单提交大量信息. 2.session与cookie的区别? 答:session:储存用户访问的全局唯一变量,存储在服务器上的php指定的目录中的(session_dir)的位置进行的存放 cookie:用来存储连续訪問一个頁面时所使用,是存储在客户端,对于Cookie来说是存储在用户WIN的Temp目录中的. 两者都可通过时间来设置时间长短 3.数据

普天通信JavaEE开发岗面试题

1 EJB中有几种Bean,叙述有状态Bean和无状态Bean的差别. 答:EJB中有Session Bean,Entity Bean,以及 Message Driven Bean.这两种的 Session Bean都能够将系统逻辑放在 method之中运行,不同的是 Stateful Session Bean 能够记录呼叫者的状态,因此通常来说,一个使用者会有一个相相应的 Stateful Session Bean 的实体.Stateless Session Bean 尽管也是逻辑组件,可是他

笔试算法题(54):快速排序实现之三路划分, 三元中值法和插入排序处理小子文件

议题:快速排序算法实现之三(三路划分遍历,解决与划分元素相等元素的问题) 分析: 算法原理:使用三路划分策略对数组进行划分(也就是荷兰国旗问题,dutch national flag problem).这个实现是对实现二的改进,它添加处理等于划分元素的值的逻辑,将所有等于划分元素的值集中在一起,并且以后都不会再对他们进行划分. 本算法中使用四个标示值进行操作.使用left和right同时向中间遍历时,当left遇见等于划分元素时,就与iflag指向的值进行交换 (iflag指向的当前值到最左端表

Python基础课:一起学习python基础题

python最近老火了,万能开发语言,很多小伙伴们要么初学,要么从别的开发语言转过来的,如果你能把下面几道基础题不费劲的写出来,基础应该可以打80分,可以进行进阶的学习了,如果下面的题目如果做不出来,拜托不要耽误时间,赶快打好基础,勿在浮沙筑高台. 题目出给新鸟打基础的,实现答案的方法千千万,如果老鸟有更厉害的答案就不要喷了,先谢谢了. 还有新鸟先不要看答案,不要看答案,不要看答案,(重要的事情说三遍)自己先去解,用自己最简单的想法去实现,能用python自带的方法就不要自己造轮子. 好啦,开始