关闭

测试开发面试题

第一次面试还是蛮激动的,就把自己在面试中的问题总结下吧,为后面做准备吧1:内存管理(常见的内存错误,野指针,栈溢出,以及如何解决吧)个人回答C语言中三个开辟内存的函数,malloc,calloc,realloc区别以及特点,然后说C++的内存管理是如何以及出现内存的错误如何处理,迁移到智能指针来管理,四种智能指针的简单介绍2:数据结构map和set的区别? 答:底层红黑树,前者是key-val操作...
阅读(71) 评论(0)

5种I/O模型

一:概念的理解: 首先在网络编程的时候,我们常常见到同步/异步,阻塞/非阻塞四中调用方式:1同步和异步主要针对C(client)端 同步: 所谓的同步,就是在c端发出一个功能调用时,在没有得到结果之前,该调用步返回,也就是说必须一件一件事做,等前一件事完了之后才做后一件事。 如:普通的B/S模式(同步):提交请求->等待服务器处理->处理完毕返回,这期间客户端浏览器不能干任何事异步: 与同...
阅读(83) 评论(0)

查找最小的K个数

输出最小的K个数 方案1:如果输入的数组可变,我们可以借助Partion部分排序的思想,随机选k值,经过排序后,k左边的数都比k小,k右边的数都比k大,这样经过排序后,在k左边的数字就是最小的K个数:int Partion(int*a, int n, int left, int right) { if (a == NULL || n <= 0) { return 0...
阅读(76) 评论(0)

查找数组中出现次数超过数组长度一半的数字

题目: 数组中一个数字出现的次数超过数组长度一半的次数,请找出这个数字,例如输入一个长度为9的数组{1,2,3,2,2,25,4,2},由于2出现的次数实际5次,超过数组的一半,因此输出的结果是2.思路:开始的时候想到用map,依次遍历这个数组,map会对这些数字排序,这种方法和Topk的问题很像,比较容易实现.但是时间复杂度是N(lgN),如果我们要求时间复杂度是O(N)呢?方案一:借助快排的部...
阅读(109) 评论(0)

TCP三次握手和四次挥手

一:TCP的特点: 1:面向连解的 2:面向字节流 3:保证可靠传输(丢包重发,超时重传) 4:支持全双工通信 5:支持端口到端口的连接,每一条TCP连接只能有两个端点 二:TCP协议可靠性的是是三个问题? 一:可靠传输a:确认和重传:接受方收到报文就会确认,发送方发送一段时间后没有收到确认就会重传 b:数据校验 c:数据合理分片和排序 UDP:IP数据报大于1500字节(MTU...
阅读(111) 评论(0)

HTTP协议--基础篇

一:基础知识: HTTP协议是应用层协议,在前面我们知道TCP/IP四层模型中,下三层主要负责数据的传输处理,但是没有涉及到解析,关于解析主要有应用层来处理,而HTTP协议就是一个属于应用层的面向对象的协议,由于其间接,快速的方式,适用于分布式超媒体信息系统. HTTP:协议的主要特点: 1:支持客户/服务器模式 2:简单快速:客户面向服务器请求服务时,只需传送请求方法和路径.请求方法常用的...
阅读(388) 评论(0)

Shell脚本语法篇

一:条件测试 1:条件测试:命令test或者是 [ 但是 [ 通常与 ] 一起是使用 我们再来看看结果: 要分析这种现象必须的明确几个概念,在Shell中,一切都是指令,而test和[是起到条件判断的作用,在C语言中我们会根据返回值来判断条件语句是否成立,在Shell中我们是根据退出来判断条件语句的成立与否,这点和进程和线程十分相像,通常我们规定正常退出退出码为0(条件为真),否则(条...
阅读(124) 评论(0)

Shell脚本符号篇

一:shell运行原理: 前面#! 表示shebang 第一种: shell脚本中#表示注释,这个和C语言的//类似,但是在#位于第一行开头,并且是个例外,它表示该脚本 使用后面指定是解释器/bin/bash解释执行 我们知道shell是命令行解释器,那么它又是如何运行程序的呢? shell会fork一个子进程并调用exec执行./1.sh这个程序,exec系统调用应该吧子进程的代码...
阅读(80) 评论(0)

设计模式--单例模式

一:概念: 设计模式就是一套被反复调用,经过分类,代码设计总结的经验: 单例模式: 也叫单间模式:Singletion是一种常用的设计模式,在大型的项目中都会使用,因为构建一个线程安全并且高效的单例模式很重要. 实现单例模式需要满足两个条件: 1:单例类保证全局只有唯一的实例对象 2:单例类提供获取这个唯一实例的接口 二:一个简单的单例 //实现一个简单的单例**class Sing...
阅读(363) 评论(0)

C语言如何模拟C++实现继承和多态

首先要明白c++的三大特性:封装,继承,多态 而这些C语言统统都没有,那么C语言如何实现继承和多态呢? C++的继承属性是通过访问限定符:public,protected,private来实现. 我们知道c++的多态必须满足两个条件:虚函数的重写已经父类的指着和引用指向子类的对象. 思路:我们知道在C语言中没有类的概念,但是却有结构体struct,默认C++中struct也是类,这样我们就可...
阅读(166) 评论(0)

求两个单链表的差集和并集

题目:- 已知集合A和B的元素分别用不含头结点的单链表存储,函数difference()用于求解集合A与B的差集,并将结果保存在集合A的单链表中。例如,若集合A={5,10,20,15,25,30},集合B={5,15,35,25},完成计算后A={10,20,30}。 思路:指针的指针pa遍历链表A,指针pb遍历链表B,当节点的值相等,删除,提前将删除位置的下一个节点保存,然后 继续遍历...
阅读(412) 评论(0)

判断一个栈的弹出序列是否为合法序列

题目: 输出两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序,假设压入栈的苏偶偶数字均不相等.例如序列1,2,3,4,5是某栈的压栈序列.序列4,5,3,2,1是该压栈序列的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列. 思路: 验证:#include #include #include...
阅读(174) 评论(0)

判断一颗树是不是完全二叉树

首先我们要明白完全二叉树的含义: 完全二叉树: 若设二叉树的深度为h,除第 h 层外,其它各层 (1~h-1) 的结点数都达到最大个数,第 h 层所有的结点都连续集中在最左 边,这就是完全二叉树 我们先来回顾下二叉树按层遍历,先将根节点进队列,然后判断每次这个队列是否为空,不为空,每次取队头的数据然后pop,最后再递归走其子问题,判断左子树是否为空,不为空直接入队,再判断右子树是否为空...
阅读(165) 评论(0)

刷题--二叉树的镜像

题目:请完成一个函数,输入一个二叉树,该函数输出它的镜像 那么什么是二叉树的镜像呢?我们其实可以从生活中得到启示,每个人早上起来都有找镜子的习惯,这样我们就会很容易想明白二叉树的镜像了, 如图两颗互为镜像的二叉树. 观察这颗二叉树我们会发现,这两颗二叉树的根节点相同,但是它们的左右两个子节点交换了位置. 步骤: 1:首先交换节点2和节点6 2:第二步:交换将节点1和节点3作为整体然后...
阅读(90) 评论(0)

socket--多进程,多线程服务器

一:概念: 我们知道IP地址是标志网络中不用主机的IP地址,而端口号就是同一台主机上标志不同进程的地址,IP地址和端口号标志网络中的唯一地址.(又称socket) 在TCP协议中,建⽴立连接的两个进程各⾃自有⼀一个socket来标识,那么这两个组成 的socket就唯⼀一标识⼀一个连接。socket本⾝身有“插座”的意思,因此⽤用来描述网络连接的一一 对应关系. 二:通信中的大端小端的问题如何...
阅读(626) 评论(2)

gdb调试多线程

一:调试 我们知道在Windows下我们常用 F5调到断点处 ,F9设置断点或者取消断点,F 10开始调试或单步执行 F11进入函数内部 F7编译 Ctrl+F10调到函数内部 当然有时我们也会使用调试窗口或者查看栈帧来进行调试. Linux下调试我们通常使用gdb(代码调试工具) 注意在写Makefile文件时,要加上-g 1:开始调试gdb filename 2:l 1其...
阅读(372) 评论(0)

统计第一个只出现两次的字符

方法一:在一个一维数组里面查询: 最直接的方法是从头到尾遍历这个字符数组的字符,当访问这个字符时,拿这个字符和后面的每个字符匹配,如果下次又找到一个字符再次出现,就表明是出现两次的字符,如果字符与n个字符,每个字符可能都会与后面的比较,这种思路的时间复杂度较高,O(N^2) 方法二:map加上排序; 思路是:将字符作为,键值,将出现的次数作为实值,那么如歌保证第一个出现的次数是两次我们需要加...
阅读(340) 评论(0)

一个fork的面试题

题目: 请问下面的程序一共输出多少个”-“#include #inlcude int main() { int i; for(i =0;i<2;i++) { fork(); printf("-"); } return 0; }可能开始的时候大家都以为会输出6个”-“,但是结果输出了8个”-“. 要弄明白这个题,还是先从fork()调用开始...
阅读(103) 评论(0)

判断链表是否带环?若带环求环的长度?求环的入口点?

一:判断链表是否带环 方法是快慢指针: 开始的时候,两个指针都指向开头,然后让快指针走两步,而慢指针每次走一步,当他们在某个点相遇则表明,这个链表带环,否则继续遍历这个链表bool IsCircle(ListNode*phead) { assert(phead); ListNode*fast =phead; ListNode*slow =phead; while(...
阅读(119) 评论(0)

再识智能指针

背景 为什么需要智能指针: 如果在程序中 这时我们希望有一个类来帮我们完成资源的管理,智能指针就出现了. 什么是智能指针? 分三步去理解 a:第一步:RTLL: 又称资源分配即初始化,定义一个类来封装资源的分配和释放,在构造函数完成资源的分配和初始化,在析构函数完成资源的清理,可以保证资源的正确初始化和释放. 简单点说就是在初始化时获取系统的资源,在析构时,释放资源.b:第二步:...
阅读(1594) 评论(7)
113条 共6页1 2 3 4 5 ... 下一页 尾页
    个人资料
    • 访问:33814次
    • 积分:1440
    • 等级:
    • 排名:千里之外
    • 原创:112篇
    • 转载:1篇
    • 译文:0篇
    • 评论:22条
    博客专栏
    c/c++

    文章:38篇

    阅读:12047
    友情链接
    http://write.blog.csdn.net/postlist
    友情链接
    http://write.blog.csdn.net/postedit
    最新评论