秋招复习-C++(二)
1.Segmentation Fault是什么?什么情况下会导致它的出现?怎么解决?
Segmentation Fault中文是段错误,在Linux系统中,段错误一般是是由用户程序非法访问内存引起的(访问指读、写或者执行),即程序访问的内存超出了系统所分配的内存空间,就会出现以上错误。段错误就是访问了不可访问的内存,这个内存区要么是不存在的,要么是受到系统保护的(SIGSEGV)。
引起段错误的原因可能有多种,总结如下:1.程序中企图用指针修改常量字段的值(常量字段是存放在只读存储区,受操作系统保护,只能读,不能写);2.访问了不属于进程地址空间的内存(程序中直接访问某个地址对应的内存,没有考虑是否在进程的地址空间);3.访问不存在的内存,最常见的就是对空指针进行解引用(Null);4.内存访问越界,最常见的就是数组访问越界(ps:指针越界一般来说不会出现SIGSEGV,但是如果对越界的指针进行解引用就会出现SIGCSEGV);5.栈溢出(俗称栈爆了)也会引起段错误,最常见的就是程序中递归次数太多而导致栈溢出,从而引起SIGSEGV; 6.printf,sprintf函数将非字符串的数据以字符串形式打印(可以看一下printf的源码就知道原因)。
解决方法:段错误是平时我们调试过程中碰到过的最常见的错误之一,但往往这些问题不容易被发现(从上面的原因分析来看大多是小问题),需要利用一些小技巧来帮助我们更高效地定位问题所在并改正。一般来说,我们可以利用以下两种方式来找出问题所在:
(1)在程序关键部分加入printf语句,打印调试信息,以跟踪段错误在代码中可能的位置为了方便使用这种调试方法,可以用条件编译指令#ifdef DEBUG和#endif把printf函数给包含起来,编译的时候加上-DDEBUG参数就可以查看调试信息。反之,不加上该参数进行调试就可以(调试小型程序可以使用)。
(2)在LInux平台可以利用GNU提供的gdb工具来实现对程序的调试,使用也非常方便,只需要在使用gcc/g++编译的时候加上-g参数选项即可,然后就可以利用gdb的加断点、单步运行、打印变量值等操作进行程序的调试和问题的定位了,比较适合大型程序的调试(c/c++调试神器),效率也还不错,建议抽空学一下怎么使用。
具体分析可以参考这篇博客:https://blog.csdn.net/u010150046/article/details/77775114
2.fork函数的机制和vfork函数的机制
在Linux系统中,fork函数用于创建新的子进程,该函数没有参数,返回值有三种情况,对于父进程,fork函数返回子进程的进程ID(由内核分配),对于子进程会返回0,如果出错则返回-1,因此我们在程序中可以根据fork的返回值来编写相应进程的程序。fork创建的子进程复制了父进程的地址空间,一般来说如果没有执行exec系统调用,那么子进程复制了父进程的数据段和堆栈段,共享父进程的代码段,注意这里并没有复制父进程的代码段。当子进程中执行exec系统调用之后,内核就会为子进程分配代码段的地址空间,这样,在创建一个子进程后,子进程的地址空间完全和父进程分开,父子进程是两个独立的进程。
Linux提供一个功能类似于fork函数的函数vfork,其作用是创建一个完全共享父进程地址空间的子进程,包括代码段+数据段+堆栈段。子进程对共享资源进行的修改,也会影响到父进程。vfork函数产生的子进程一定比父进程先运行。即父进程调用了vfork函数后会等待子进程运行后再运行。
3.Effective C++总结
可以参考这篇博客:https://blog.csdn.net/cz28274815/article/details/38553755(精简版)
4.数据库部分
(1)视图:提供数据库的安全性保证,即通过视图可以限制数据库被访问的范围,有利于保护机密数据。
(2)BMS提供DML实现对数据的操作。嵌入高级语言中使用的 DML称为宿主型
(3)E-R图中的属性可以表示为关系模式的属性(数据库逻辑设计)
5.C++中引用和指针的相互转换怎么实现?
引用是一种机制,不是数据类型,因此没有引用的引用和引用的指针的概念,对引用取地址其实是取引用所指向的对象的地址,而指针是一个变量,其值可以改变,指针指向一个具体的变量 ,对指针取引用于普通引用没有区别。举一个例子,一个函数的形式参数是Int& a,而我们需要将一个int* p(已经初始化)作为实际参数传进去,我们可以考虑对p进行解引用然后再传给形参,即将*p传给该函数。
6.exec函数族调用
可以参考这篇博客:http://blog.sina.com.cn/s/blog_62ef2f1401011wmo.html
7.Linux内存管理机制
Linux内存管理主要分为内核空间和用户空间管理,内存管理的目的是为了提高内存分配的效率,减少内存碎片的产生从而提高内存的使用效率。具体可以参考这篇博客:
https://blog.csdn.net/u012398362/article/details/53366186
Linux的内存管理非常重要,在面试中也会经常问到,建议多花时间去了解。
-------------------------------------------------------------------------------------------------------------------
以上是我自己根据网络上的资料整理出来的,目的是方便自己查看复习,参考了一些大神的博客,原文里放上了链接,感谢大神们的分享。如有错误,望批评指出。
秋招复习-C++(二)的更多相关文章
- 秋招复习-C++( 一)
Linux/Unix编程部分 1.进程间通信方式:信号,信号量,消息队列,共享内存,套接字Socket 2.ipcs: Linux/Unix下的命令,可以用来查看当前系统中所使用的进程间通信方式的各种 ...
- 秋招复习-C++(三)
• 数据库 1.数据库的索引有哪些? (1)B树索引:利用B树作为底层数据结构的索引,在B树索引中保存索引列的值和数据表的对应行的ID,每一个叶子结点都存放着一个索引列的值和数据表对应行的ID,通过这 ...
- Java Collection秋招复习
抽象类和接口的区别 我们先来看一下抽象类 * @auther draymonder */ public abstract class AbstractClassTest { private int T ...
- 9.秋招复习简单整理之Spring面试AOP和IOC的理解
1.Spring的AOP理解: OOP面向对象,允许开发者定义纵向的关系,但不适用于定义横向的关系,导致了大量代码的重复,而不利于各个模块的重用. AOP,一般称为面向切面,作为面向对象的一种补充,用 ...
- 8.秋招复习简单整理之Spring面试一般问题
1.不同版本的Spring Framework有哪些主要功能? 2.什么是Spring Framework? Spring是一个轻量级的IOC和AOP容器框架,是为Java应用程序提供基础性服务的一套 ...
- 7.秋招复习简单整理之请你讲讲 Statement 和 PreparedStatement 的区别?哪个性能更好?
Statement和PreparedStatement都是数据库用于执行SQL语句的句柄,但是PreparedStatement代表一个预编译的SQL. 以下是PreparedStatement和St ...
- 6.秋招复习简单整理之请你谈谈JDBC的反射,以及它的作用?
通过反射com.mysql.jdbc.Driver类,实例化该类时会调用该类的静态代码块,该代码块会去java的DriverManager类中注册自己,DriverManager管理所有已注册的驱动类 ...
- 5.秋招复习简单整理之请介绍一下List和ArrayList的区别,arrayList和HashSet区别?
第一问:List是接口,ArrayList是List的实现类. 第二问:ArrayList是List的实现类,HashSet是Set的实现类,List和Set都实现了Collection接口. Arr ...
- 4.秋招复习简单整理之java支持多继承吗?
java仅支持单继承,但支持接口多实现.
随机推荐
- BestCoder Round #74 (div.1) 1002Shortest Path(hdoj5636)
哈哈哈哈,我就知道这道题目再扔给我,我还是不会,就是这么菜,哈哈哈 一开始官方题解就没搞懂-然后就看了一下别人的代码,水水过就算了.今天拿到-GG: 题意: 一开始,有一张原图,有一条长度为n的链. ...
- 9-26模拟赛 By cellur925
1.计数 (count.cpp/c/pas)时间限制:1s内存限制:256MB[问题描述]给出 m 个数 a[1],a[2],…,a[m]求 1~n 中有多少数不是 a[1],a[2],…,a[m]的 ...
- Luogu2261[CQOI2007]余数求和 【数论】By cellur925
题目传送门 省选题竟然送了这么多分,60分直接暴力算就行.(算了,07年的省选) 数学题嘛,通常我们需要把式子展开,然后寻找一些性质化简=w=. 展开式以及寻找规律的过程lyd老师讲的很清楚T_T,放 ...
- c++ 常用的几种重载操作符
运算符可以作为普通函数,朋友函数或成员函数来重载.下面的经验法则可以帮助您确定哪种形式最适合于给定的情况: 如果你重载了赋值(=),下标([]),函数调用(())或成员选择( - >),那么它就 ...
- 洛谷 P2714 四元组统计
错误记录:42行N写成n:事实上除了读入以外,此题的小n没有任何用途 #include<cstdio> #include<algorithm> #include<cstr ...
- Travelling HDU - 3001
Travelling HDU - 3001 方法:3进制状态压缩dp(更好的方法是预处理出每个状态数字对应的y数组,然后用刷表,时间复杂度可以少一个n) #include<cstdio> ...
- P2629 好消息,坏消息
题目描述 uim在公司里面当秘书,现在有n条消息要告知老板.每条消息有一个好坏度,这会影响老板的心情.告知完一条消息后,老板的心情等于之前老板的心情加上这条消息的好坏度.最开始老板的心情是0,一旦老板 ...
- new操作符具体干了什么
function Func(){ }; var newFunc=new Func (); new共经过了4个阶段 1.创建一个空对象 var obj=new Object(); 2.设置原型链 把 o ...
- wkWebView 的一些问题
导语 WKWebView 是苹果在 WWDC 2014 上推出的新一代 webView 组件,用以替代 UIKit 中笨重难用.内存泄漏的 UIWebView.WKWebView 拥有60fps滚动刷 ...
- win10忘记wifi记录
1.点击桌面右下角无线图标 2.点击网络设置 3.点击管理WIFI设置 4.点击要管理的账户,忘记或者共享该wifi.