Java、C++面试必知:核心概念与问题解析

需积分: 10 8 下载量 67 浏览量 更新于2024-08-02 1 收藏 348KB DOC 举报
"这篇资源是关于计算机类面试的常见问题合集,涵盖了Java、C++以及C语言的主要考点。" 1、Java相关知识点: - `transient` 和 `volatile` 是Java的关键字,分别用于标记变量不参与序列化和确保多线程环境中的可见性。 - 抽象类和接口都是用来实现多态,但抽象类可以包含方法实现,而接口只能定义方法签名。一个类可以实现多个接口,但只能继承一个抽象类。 - Java的反射机制允许在运行时动态获取类的信息并操作对象,如创建对象、调用方法和访问字段。 - 实现多线程的方式有两种:继承Thread类和实现Runnable接口。 - 设计模式如工厂模式、单例模式、观察者模式等在实际开发中广泛应用,能够提高代码的可读性和可维护性。 - MVC(Model-View-Controller)架构是一种软件设计模式,常用于web应用,分离业务逻辑、数据模型和用户界面。 - 类A继承B并实现接口C,同名变量问题可能导致混淆,需要明确区分是类B还是接口C的变量。 - 内部类可以提供封装和复用,匿名内部类常用于快速实现简单的接口或类。 - `final` 修饰变量表示不可变,修饰方法表示不能被重写,`finally` 用于异常处理保证代码执行,`finalize` 是对象被垃圾收集前调用的方法。 - HTTP请求的基本过程包括:建立TCP连接、发送请求、服务器响应、关闭连接。 - Java有内存泄漏问题,例如不再使用的对象引用未置为null,阻止垃圾收集。 - 内存回收主要使用可达性分析算法,垃圾收集器如CMS、G1、ZGC等。 - `System.gc()` 强制触发垃圾回收,但通常不推荐使用,因为可能影响性能。 - 安全认证机制如SSL/TLS、OAuth、JWT等用于确保网络通信的安全。 2、C语言知识点: - `extern C` 用于C++中包含C语言的头文件,解决C++的名称修饰问题。 - `#ifdef` 是预处理器指令,用于条件编译,检查宏定义是否存在。 - C语言中,栈上通常存储局部变量,堆上存储通过`malloc`等动态分配的内存。 - `static` 关键字可以用于局部变量(使变量只初始化一次,持续到程序结束),也可以用于全局变量(限制其作用域为当前文件)。 - 进程和线程是操作系统资源管理的基本单位,进程是独立的资源分配单元,线程是调度和执行的基本单位。 3、C++相关知识点: - 拷贝构造函数用于创建一个对象的副本,对于含有动态分配资源的对象尤其重要。 - 析构函数默认不是虚函数,但在基类中声明为虚可以确保在派生类链中正确销毁对象。 - 钻石问题是在多继承中,基类通过两个不同的子类被两次继承,导致二义性。C++的虚继承可以解决这个问题。 - 深拷贝和浅拷贝关乎对象复制的内存管理。深拷贝会完全复制对象的所有数据,而浅拷贝只复制引用,可能导致共享资源的意外修改。 - 虚函数允许动态绑定,实现多态;纯虚函数是接口的标志,定义抽象类,要求派生类必须实现。 这些面试问题涵盖了编程语言的核心概念,体现了面试官对候选人技术掌握深度和广度的考察。熟悉这些知识点对于准备计算机类面试至关重要。