程序员面试常见问题总结【1】

原创 2018年04月16日 17:48:54

1、C++里的class和struct有什么区别?

        在c++中可以用 struct 和 class 来定义类型,本质的一个区别就是默认的访问控制,体现在两个方面,两者的区别如下:

(1)关于默认访问类型

       如果没有标明成员函数或者成员变量的访问权限级别,那么 struct 中默认的是 public,而在 class 中默认的是 private

例如:

          struct A
         {
            char a;
         };
         struct B : A
        {
           char b;
        };
       这个时候B是public继承A的。如果都将上面的struct改成class,那么B是private继承A的。这就是默认的继承访问权限。所以我们在平时写类继承的时候,通常会这样写:
        struct B : public A
就是为了指明是public继承,而不是用默认的private继承。当然,到底默认是public继承还是private继承,取决于子类而不是基类。struct可以继承class,同样class也可以继承struct,那么默认的继承访问权限是看子类到底是用的struct还是class。
如下:
          struct A{};
          class B : A{};      //private继承
          struct C : B{}; //public继承

注意:而在C#中如果没有标明成员函数或者成员变量的访问权限级别,则在 struct 和 class 中都是 private 的。struct 和 class 的区别是 struct 定义的是值类型,值类型的实例在上分配内存;而 class 定义的是引用类型,引用类型的实例在上分配内存。

(2)struct作为数据结构的实现体,它默认的数据访问控制是public的,而class作为对象的实现体,它默认的成员变量访问控制是private的。

       注意我上面的用词,我依旧强调struct是一种数据结构的实现体,虽然它是可以像 class 一样的用。我依旧将 struct 里的变量叫数据,class内的变量叫成员,虽然它们并无区别。其实,到底是用struct还是class,完全看个人的喜好,你可以将你程序里所有的class全部替换成struct,它依旧可以很正常的运行。但我给出的最好建议还是:当你觉得你要做的更像是一种数据结构的话,那么用struct,如果你要做的更像是一种对象的话,那么用class。
       当然,我在这里还要强调一点的就是,对于访问控制,应该在程序里明确的指出,而不是依靠默认,这是一个良好的习惯,也让你的代码更具可读性。

2. 全局变量和局部变量有什么区别?是怎么实现的?

(1)全局变量和局部变量的区别是作用域的不同。

全局变量为外部变量,起作用域是从定义位置开始到程序结束;而局部变量就表示局限于某个作用域的变量,它可以在函数内以函数作为作用域,或者for/while/if 语句中,以语句块作为作用域,还可以在namespace中,以命名空间作为作用域。

(2) 在操作系统中 全局变量 存储在内存的【静态存储区域】,而局部变量存放在【内存的栈区】,生命周期到,自动释放内存。

       操作系统和编译器根据内存分配的位置来知道全局变量分配在全局数据段,并且在程序运行时就被加载。

       编译器通过语句的分析,判断出是全局变量还是局部变量。

  • 若是全局变量,编译器将源代码翻译成二进制代码时就会为全局变量分配一个虚拟地址(Windows:0X00400000以上的地址,即所说的全局区(静态区)),所以程序在对全局变量进行操作是对一个硬编码的地址进行操作。
  • 若是局部变量,编译时不分配空间,而是以相对偏移地址来表示局部变量的地址,所以局部变量只有在局部变量位置被调用时才会被真正的分配内存。【函数执行时,局部变量在栈中分配,函数调用完毕释放局部变量对应的内存】

C++内存分配方式详解,请参考c++内存分配方式

     操作系统通过变量的分配地址就可以判断出是局部变量还是全局比变量。

3. 线程&进程的基本概念,两者之间的关系

(1)进程 & 线程 概念

进程(process)是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位

线程(thread是进程执行运算的最小单位,是进程中的一个实体,是被处理机(CPU)独立调度和分派的基本单位线程自己没有系统资源,只拥有一点在运行中必不可少的资源(如:程序计数器,一组寄存器和栈),但它可以与同属一个进程的其他线程共享进程所拥有的全部资源。

(2)进程 & 线程之间的关系

  • 一个线程可以创建和撤销另一个线程,同一个进程的多个线程之间可以并发执行
  • 一个线程只能属于一个进程,而一个进程可以有多个线程,但至少有一个线程。
  • 资源分配给进程,同一个进程的所有线程共享该进程的所有资源。
  • 处理机(CPU)分配给线程,及真正在处理机上运行的是线程。
  • 线程在执行过程中,需要协作同步。不同进程的线程间要利用消息通信的方法实现同步。

(3)进程 & 线程的区别

  • 调度:线程作为调度和分配的基本单位,进程作为拥有资源的基本单位。
  • 并发性:不仅进程之间可以并发执行,同一个进程的多个线程之间也可以并发执行。
  • 拥有资源:进程是拥有资源的一个独立单位,线程不用有系统资源,但可以访问其隶属于进程的全部资源。
  • 系统开销:在创建或者撤销进程时,由于系统都要为之分配和回收资源,导致系统的开销明显大于创建或者撤销线程时的开销。

(4)关于进程 & 线程一个实例

       打开QQ程序——相当于打开了一个进程。

       运行QQ过程中,弹出一个对话窗口,跟别人语音聊天、文字聊天——这分别对应了3个线程,这三个线程可以同时运行,说明:同一个进程中的多个线程之间可以并发执行。但你不能在没有打开QQ程序时进行这些操作,说明:线程不能独立进行,必须依存在应用程序中,由应用程序提供多个线程执行控制。

       而在运行QQ程序的同时,我们又可以同时打开QQ音乐,有道词典等其他应用程序(即,其他的进程),这表明:不同进程之间也可以并发执行。


程序员面试的几个常见的问题(1)

1.什么是面向对象?对于面向对象,它是java程序的一种编程思想。那么它有四种基本特征:抽象、封装、继承、多态抽象:抽象可以分为抽象类和抽象方法;抽象类①使用abstract关键字来定义抽象类②抽象类...
  • Maven_Chen
  • Maven_Chen
  • 2018-03-17 00:08:54
  • 103

程序员如何面对 HR 面试的 40 个问题!

推荐:成为架构师的十阶段学习资料 讲一个身边朋友亲身经历的故事吧。 一个技术非常牛的朋友去阿里面试,成功通过了几轮技术车轮战,最后躺在了 HR 面上。。。所以,尽管你技术再牛逼,你回答不好 H...
  • youanyyou
  • youanyyou
  • 2018-03-24 14:49:15
  • 203

程序员常见面试之 数据库 知识点小结(三)

前言根据自己的项目经验和阅读经验,整理了一些数据库常见面试知识点,喜欢能帮助到大家。本文地址 http://blog.csdn.net/never_cxb/article/details/504136...
  • never_cxb
  • never_cxb
  • 2015-12-27 19:26:23
  • 1655

《程序员面试宝典》基础知识点总结

笔者在2015年求职准备时,看《程序员面试宝典》一书,做的笔记。分享给大家,希望能有所帮助。 STL模板与容器 模板:类(及结构等各种数据类型和函数)的宏。有时叫做甜饼切割机,正规的名称应叫...
  • huxiaoyonglan1
  • huxiaoyonglan1
  • 2015-12-09 22:02:01
  • 1260

java软件工程师面试题 以及答案

  • 2017年12月28日 19:05
  • 102KB
  • 下载

精典版:JAVA程序员面试总结

第一阶段:三年我认为三年对于程序员来说是第一个门槛,这个阶段将会淘汰掉一批不适合写代码的人。这一阶段,我们走出校园,迈入社会,成为一名程序员,正式从书本 上的内容迈向真正的企业级开发。我们知道如何团队...
  • cuijie0197
  • cuijie0197
  • 2018-02-28 00:54:03
  • 109

Android程序员面试总结---Android基础篇

Android四大组件 Activity 一个activity就是一个窗口,他们之间用 Intent通信,每个activity都必须在清单文件中配置;     生命周期:onCreate()...
  • zyl95
  • zyl95
  • 2018-01-14 20:00:58
  • 67

游戏程序员面试总结---希望给有用的着的人一些帮助

以前是做D3D的。 大四培训了一年游戏开发。 毕业后去一家公司做动作rpg大型网游的shader渲染部分。 可惜做了3个月,公司把项目停了。 广州我再次来了,发现端游太难找工作了,只好转手游。找了将...
  • tgh527387906
  • tgh527387906
  • 2013-09-09 23:51:52
  • 1300

JAVA程序员面试总结,高手整理加强版

JAVA程序员面试总结,高手整理加强版
  • javaniuniu
  • javaniuniu
  • 2016-06-30 10:12:50
  • 7397

java程序员面试所被问到的问题?

1.J2EE是什么?   2.介绍Java中的Collection  FrameWork(包括如何写自己的数据结构)?  如Collection中遗留类(Hashtable、Vector)和现有类的区...
  • A1345103
  • A1345103
  • 2004-12-12 09:59:00
  • 3547
收藏助手
不良信息举报
您举报文章:程序员面试常见问题总结【1】
举报原因:
原因补充:

(最多只允许输入30个字)