• 面试基础-语言基础篇




    1.指针和引用的区别

    他们都是地址的概念;
    指针指向一块内存,它的内容是所指内存的地址;引用是某块内存的别名;

    引用没有 const,指针有 const,const 的指针不可变;

    引用不能为空,指针可以为空;

    “sizeof 引用”得到的是所指向的变量(对象)的大小,而“sizeof 指针”得到的是指针本身(所指向的变量或对象的地址)的大小;



    2.堆和栈的区别

    • 1 申请方式

    栈: 由系统自动分配。 例如,声明在函数中一个局部变量 int b; 系统自动在栈中为b开辟空间;

    堆: 需要程序员自己申请,并指明大小,在c中malloc函数;

    • 2 申请大小的限制

    栈:是连续空间,window应该是2M,如果申请的空间超过栈的剩余空间时,将提示stack overflow。因此,能从栈获得的空间较小。

    堆:堆获得的空间比较灵活,不用是连续空间,也比较大。

    • 3 申请效率的比较:

    栈由系统自动分配,速度较快。但程序员是无法控制的。

    堆是由new分配的内存,一般速度比较慢,而且容易产生内存碎片,不过用起来最方便。



    3.python多线程和多进程的区别

    python中提供两个标准库thread和threading用于对线程的支持;

    相比较于threading模块用于创建python多线程,python提供multiprocessing用于创建多进程。

    对一个进程而言,不管有多少线程,任一时刻,只会有一个线程在执行。对于CPU密集型的线程,其效率不仅仅不高,反而有可能比较低。python多线程比较适用于IO密集型的程序。对于的确需要并行运行的程序,可以考虑多进程。

    一个程序的执行实例就是一个进程。线程是操作系统能够进行运算调度的最小单位。一个进程中可以并发多个线程,每条线程并行执行不同的任务。

    同一个进程中的线程共享同一内存空间,但是进程之间是独立的。

    同一个进程中的所有线程的数据是共享的(进程通讯),进程之间的数据是独立的。



    4.jdk和jre还有jvm的区别

    JDK:java development kit (java开发工具)

    JRE:java runtime environment (java运行时环境)

    JVM:虚拟机;

    Jvm < jre < jdk



    5.抽象类和接口的区别

    抽象类是对事物的抽象化,包括这个事物的面貌,行为等属性综合的抽象,抽象类为什么不能被实例化。接口是对这个事物行为的抽象化。

    报警器的例子,所有的报警器都要报警,但不是所有的都要开门关门。把alarm()独立在接口中.

    构造函数:抽象类可以有构造函数;接口不能有。

    main 方法:抽象类可以有 main 方法,并且我们能运行它;接口不能有 main 方法。

    实现数量:类可以实现很多个接口;但是只能继承一个抽象类。

    访问修饰符:接口中的方法默认使用 public 修饰;抽象类中的方法可以是任意访问修饰符。



    6.python中list set 的区别,底层实现

    列表:被实现为长度可变的数组;连续的存储空间,以偏移量计算取得元素,不必遍历所有元素;既要要求是连续存储,又可以存储不同类型的数据,那么其用的就是元素外置的方式,存储的只是地址的引用;

    字典:伪随机探测(pseudo-random probing)的散列表(hash table)作为字典的底层数据结构;

    set本质也是dict,只不过其键值都一样,如果索引相同,说明要么数据重复了,要么key发生了hash碰撞,这时候就去比较两个key对应的value是否相同,如果也相同,确认是数据重复。



    7.Python全局解释器

    每一个 Python 线程,在 CPython 解释器中执行时,都会先锁住自己的线程,阻止别的线程执行。
    当然,CPython 会做一些小把戏,轮流执行 Python 线程。这样一来,用户看到的就是“伪并行”——Python 线程在交错执行,来模拟真正并行的线程。



    8.Python装饰器

    实质: 是一个函数

    参数:是你要装饰的函数名(并非函数调用)

    装饰器最大的作用就是对于我们已经写好的程序,我们可以抽离出一些雷同的代码组建多个特定功能的装饰器,这样我们就可以针对不同的需求去使用特定的装饰器

    类比装饰器模式



    9.c语言的编译过程

    预处理器->编译器->汇编器->链接器



    10.Python 中的__new__和__init__的区别

    相同点:

    • 二者均是Python面向对象语言中的函数;

    不同点:

    • __new__是在实例创建之前被调用的,因为它的任务就是创建实例然后返回该实例对象,是个静态方法。

    • __init__是当实例对象创建完成后被调用的,然后设置对象属性的一些初始值,通常用在初始化一个类实例的时候。是一个实例方法。

    • 也就是: __new__先被调用,__init__后被调用,__new__的返回值(实例)将传递给__init__方法的第一个参数,然后__init__给这个实例设置一些参数。

  • 相关阅读:
    SQL Server 2012提供的OFFSET/FETCH NEXT与Row_Number()对比测试
    sql 知识点
    javascript基础拾遗——词法作用域
    Linux 软件包管理
    涉略spring
    WebReBuild年会流水记
    javascript面向对象学习笔记(一)——继承
    算法学习——动态规划策略入门
    编程之美读书笔记——2.3寻找水王
    Linux 引导流程解析
  • 原文地址:https://www.cnblogs.com/Superorange/p/14702190.html
Copyright © 2020-2023  润新知