zoukankan      html  css  js  c++  java
  • 面经整理02

    面经一(部分有答案)

    https://www.nowcoder.com/discuss/293663?type=all&order=time&pos=&page=1

    笔记:

    关于函数名字是存放在那里

    如果有个函数:void fun();要是输出函数名即printf("%d",fun);和输出printf("%d",&fun);分别是多少,为什么

    存放在符号表
    函数名本身只是用来在定义域中指称某个函数(若考虑到C++中的函数重载,可能不止一个),一般编译器会保存名称至符号表,并在目标文件中保留函数名称(重载函数可能会被重命名)以供链接器等其它编译程序使用。在运行期函数名称一般不会在内存中出现,操作系统或者程序本身根据函数代码的地址确定某个具体的函数。对于语言的使用者而言,除了用于声明、定义、调用等构成函数表达式外,函数名称和一般的标识符一样不是可以直接被利用的资源,无法作为字符串使用。
    对于非调用函数的场合,函数名可以隐式转换为对应的函数指针,且对于一元&作用的函数的结果也是对应的函数指针(C和C++的规定有所不同,但这里体现相同的结果)。因此printf("%d",fun);和printf("%d",&fun);的作用都是输出指向fun的指针的值,也就是fun的地址。(不过输出指针应使用%p,%d不是规范的用法。)
    1L错误,fun不带参数列表地引用函数名称不是函数调用;另外%d输出十进制,%x才是十六进制的(%p一般也是十六进制)。

    在c++中类的成员函数都是保存在静态存储区中的 ,那静态函数也是保存在静态存储区中的,他们都是在类中保存同一个惫份

    C++中成员函数、静态成员函数、虚函数都是怎么存储的?他们哪一个先被调用?

    https://blog.csdn.net/urecvbnkuhbh_54245df/article/details/6437106 (一般)

     1.非静态数据成员被放在每一个对象体内作为对象专有的数据成员。
     2.静态数据成员被提取出来放在程序的静态数据区内,为该类所有对象共享,因此只存在一份。
     3.静态和非静态成员函数最终都被提取出来放在程序的代码段中并为该类所有对象共享,因此每一个成员函数也只能存在一份代码实体。在c++中类的成员函数都是保存在静态存储区中的 ,那静态函数也是保存在静态存储区中的,他们都是在类中保存同一个惫份。
       因此,构成对象本身的只有数据,任何成员函数都不隶属于任何一个对象,非静态成员函数与对象的关系就是绑定,绑定的中介就是this指针

    C++对象的内存分布和虚函数表 http://blog.sina.com.cn/s/blog_60e96a410100lirk.html (详细看,对象的内存图画的很好)

    注意,多重继承与虚继承时,继承类新加的虚函数追加在第一个虚表指针的位置。

     C++程序的内存格局通常分为四个区:

    全局数据区(data area),代码区(code area),栈区(stack area),堆区(heap area)(即自由存储区)

    全局数据区存放全局变量,静态数据和常量;

    所有类成员函数和非成员函数代码存放在代码区;

    为运行函数而分配的局部变量、函数参数、返回数据、返回地址等存放在栈区;

    余下的空间都被称为堆区。

    https://blog.csdn.net/fuzhongmin05/article/details/59112081

    C/C++ 打印文件名、行号、函数名的方法

    https://blog.csdn.net/cabinriver/article/details/8960119

    使用宏

    1) __VA_ARGS__   是一个可变参数的宏,这个可宏是新的C99规范中新增的,目前似乎gcc和VC6.0之后的都支持(VC6.0的编译器不支持)。宏前面加上##的作用在于,当可变参数的个数为0时,这里的##起到把前面多余的","去掉的作用。
    2) __FILE__    宏在预编译时会替换成当前的源文件名
    3) __LINE__   宏在预编译时会替换成当前的行号
    4) __FUNCTION__   宏在预编译时会替换成当前的函数名称

    linux中查看死锁进程状态

    使用pstack 和 gdb 工具对死锁程序进行分析

    pstack 进程号 查看各个线程的堆栈信息

    当进程吊死的时候,多次使用,死锁的线程将一直处于等锁的状态,确定某些线程一直没有变化,一直处于等锁的状态。那么这些线程很可能是死锁了。如果怀疑哪些线程发生死锁了,可以采用gdb 进一步attach线程并进行分析。

    执行命令gdb attach 进程号,进入gdb调试终端

    运行:(gdb) info thread

    MySQL面试题之死锁

    什么是死锁?锁等待?如何优化这类问题?通过数据库哪些表可以监控?

    https://www.cnblogs.com/FengGeBlog/p/10284318.html

    死锁面试题(死锁,产生死锁的原因及必要条件,解决办法)

    https://blog.csdn.net/hd12370/article/details/82814348(详细看)

    八种排序算法

    时间复杂度(平均、最坏、最好)

    平稳性

    ref

    https://www.nowcoder.com/discuss/161635?type=post&order=time&pos=&page=1

  • 相关阅读:
    Appium Android Bootstrap源码分析之控件AndroidElement
    Appium Android Bootstrap源码分析之简介
    monkey源码分析之事件注入方法变化
    安卓Monkey源码分析之运行流程
    adb概览及协议参考
    MAC中在eclipse luna上搭建移动平台自动化测试框架(UIAutomator/Appium/Robotium/MonkeyRunner)关键点记录
    MonkeyImage API 实践全记录
    Structs 2 session 学习
    The First
    用例图
  • 原文地址:https://www.cnblogs.com/GuoXinxin/p/11699658.html
Copyright © 2011-2022 走看看