• 笔试面试相关记录(4)


    (1)实现防火墙的主流技术有哪些?

    实施防火墙主要采用哪些技术 - 服务器 - 亿速云 (yisu.com)

    (2)

    1. char arr[][2] = {'a', 'b', 'c', 'd'};
    2. printf("%d", *(arr+1));
    3. 输出的是谁的地址?字符c
    4. 测试代码如下
    5. char arr[][2] = {'a', 'b', 'c', 'd'};
    6. printf("%d\n", *(arr+1));
    7. printf("%x\n", *(arr+1));
    8. printf("%d %c", &arr[1][0], arr[1][0]);
    9. 输出结果如下:
    10. -1454471282
    11. a94e878e
    12. -1454471282 c

    (3)

    1. int main()
    2. {
    3. printf("%p", main);
    4. return(0);
    5. }
    6. 上述代码会死循环吗?不会

    (4)

    1. int main()
    2. {
    3. int a = 4;
    4. a += a*a<<1+2;
    5. printf("%d", a);
    6. return(0);
    7. }
    8. 输出132,a = 4 + (4*4)<<(1+2) = 132
    9. 算数运算优先级大于移位运算符>赋值运算符

    (5)如果两个动态库包含一个同名的全局函数,则他们不能同时链接?

    C 多个动态库存在同名函数问题处理方法:-fvisibility=hidden_c语言库函数重名_万能菜道人的博客-CSDN博客 C/C++多个链接库含有同名函数,编译会报错吗_c 语言连接两个静态库方法一样没有报错_杰特JET的博客-CSDN博客

    (6)

    1. int main()
    2. {
    3. int ii = 0;
    4. printf("%d,%d,%d", ++ii, ++ii, ++ii);
    5. return(0);
    6. }
    7. 输出3,3,3

    (7)

    1. void fun(char a[100]) {
    2. char b[100];
    3. printf("%d, %d", sizeof(a), sizeof(b));
    4. }
    5. int main()
    6. {
    7. char a[100];
    8. fun(a);
    9. return(0);
    10. }
    11. 64位系统中输出8,100

    (8)内核空间和用户空间都属于虚拟内存空间吗?内核为系统所有进程共享吗?

    虚拟内存、内核空间和用户空间_optics_ts的博客-CSDN博客 

    linux虚拟内存与物理内存,内核态与用户态_物理内存被分为内核和用户?_selfsongs的博客-CSDN博客

    (9)

    1. union x{
    2. int a;
    3. char b[2];
    4. }t;
    5. int main()
    6. {
    7. t.b[0] = 10;
    8. t.b[1] = 1;
    9. printf("%d", t.a);
    10. return(0);
    11. }
    12. 输出266

    (10)

    1. #include
    2. using namespace std;
    3. class Base {
    4. virtual void method() {cout << "from Base" << endl;}
    5. public:
    6. virtual ~Base() {method();}
    7. void baseMethod() {method();}
    8. };
    9. class A : public Base {
    10. void method() { cout << "from A" << endl;}
    11. public:
    12. ~A() { method();}
    13. };
    14. int main()
    15. {
    16. Base* base = new A;
    17. // 基类指针调用非虚方法,则这里调用的是父类的baseMethod()方法
    18. // 父类方法中又调用了method(),而这个方法是虚方法,相当于指向子类的基类指针调用
    19. // method,发生多态,先调用子类的method方法,输出from A
    20. base->baseMethod();
    21. // delete base,由于析构函数虚函数,所以会调用子类的析构函数输出from A
    22. // 然后调用父类的析构函数输出from Base
    23. delete base;
    24. return 0;
    25. }
    26. 测试输出:(以上是个人理解,不对之处,请指出)
    27. from A
    28. from A
    29. from Base

    (11)

    1. int main()
    2. {
    3. // 然后调用父类的析构函数输出from Base
    4. char* str = "hello, world";
    5. str[1] = 'a';
    6. printf("%s", str);
    7. return 0;
    8. }
    9. 段错误,通过char* str = 字符串这种方式定义的,字符串在常量区,不能原地修改。

    C语言:字符串内容的修改_c语言修改字符串_不吃饭就会放大招的博客-CSDN博客

     (12)对文件的操作模式中,a和a+、w和w+、r和r+有什么区别

     r只读模式,文件必须存在;
    r+读写模式,文件必须存在;
    a追加模式,文件存在则追加,文件不存在则创建;
    w写模式,文件存在则覆盖,文件不存在则创建;
    w+读写模式,文件存在则覆盖,文件不存在则创建;
    a+读写模式,和a一样;
    如果以二进制模式,则rb+,或者r+b,

    (13)

    1. int main()
    2. {
    3. char* p_string = "0123456789";
    4. printf("sizeof(p_string):%d\n", sizeof(p_string));
    5. printf("sizeof(*p_string):%d\n", sizeof(*p_string));
    6. printf("char:%c\n", *p_string);
    7. printf("p_string=%s\n", p_string);
    8. printf("strlen(p_string):%d\n", strlen(p_string));
    9. return 0;
    10. }
    11. 输出:
    12. sizeof(p_string):8
    13. sizeof(*p_string):1
    14. char:0
    15. p_string=0123456789
    16. strlen(p_string):10

     (14)

    1. int g_inta;
    2. static int g_intb;
    3. void fun() {
    4. static int intc;
    5. int intd;
    6. printf("%d,%d,%d,%d", g_inta, g_intb, intc, intd);
    7. }
    8. int main()
    9. {
    10. fun();
    11. return 0;
    12. }
    13. 输出0,0,0,0

    (15)

    1. int main()
    2. {
    3. char str[] = {'1', 49};
    4. printf("%d,%d,%c,%c", str[0], str[1], str[0], str[1]);
    5. return 0;
    6. }
    7. 输出49,49,1,1

    (16)

    1. class A {
    2. public:
    3. A() {cout << "A()" << endl;};
    4. A(int val) {cout << "A(int val)" << endl;}
    5. };
    6. int main()
    7. {
    8. A a, b(3), *p;
    9. return 0;
    10. }
    11. 输出
    12. A()
    13. A(int val)
    14. 调用两次构造函数

    (17)

    1. void fun(char* str) {
    2. str = (char*)malloc(10*sizeof(char));
    3. strcpy(str, "hello");
    4. }
    5. int main()
    6. {
    7. char* str = "world";
    8. fun(str);
    9. printf("%s\n", str);
    10. return 0;
    11. }
    12. 输出world

    (18)

    1. int main()
    2. {
    3. int val=100, *p=&val;
    4. printf("%d", *p);
    5. return 0;
    6. }
    7. 输出100

    (19)double(*(*(*fp)(int))[5])(char)  中定义的fp是什么类型?

    以下来自chatgpt回答:

    表达式 `double(*(*(*fp)(int))[5])(char)` 定义了一个名为 `fp` 的函数指针,该函数指针指向一个函数,该函数具有以下特征:

    1. 接受一个 `int` 类型的参数。
    2. 返回一个指向数组的指针,该数组包含5个元素。
    3. 每个数组元素都是一个指向函数的指针,这些函数接受一个 `char` 参数并返回 `double`。

    总的来说,`fp` 是一个指向复杂函数签名的函数指针类型。这种类型的声明可能在某些高级的应用中使用,但通常很难理解和维护,因为它包含了多层指针和函数指针的组合。

     

     单循环比赛生成网站:赢生科技 - 在线单循环赛编排 (16win.cn)

     单循环比赛的编排方法 - 知乎 (zhihu.com)

     

  • 相关阅读:
    JVM相关
    【计算机毕业设计】基于JAVA的在线租房网站系统源码
    对象存储Minio-测试
    【每天学习一点新知识】XSS如何绕过HttpOnly获取Cookie以及XSS与CORS漏洞利用
    截胡高通,三星Exynos 2400率先登场:旗舰芯片定位。
    分布式搜索引擎03
    网络服务ftp实验
    git merge 和 git rebese的区别
    函数 RFC 函数 BAPI
    Standardized QCI characteristics
  • 原文地址:https://blog.csdn.net/wj617906617/article/details/132909758