01-八股面经(持续更新中

Java基础


Java优势

  • 平台无关性:一次编写,到处运行;得益于JVM(Java虚拟机),使得Java应用可以在任何操作系统上运行,无需修改代码。
  • 面向对象:Java语言是面向对象的,支持封装、继承、多态。
  • 自动内存管理:Java通过垃圾回收机制自动管理内存,减少了内存泄露、内存管理错误。
  • 丰富的API和强大的社区支持:Java提供了庞大的标准库和第三方库,同时拥有活跃的开发者社区。

反射

原理

  • 反射-一种机制,允许运行时动态获取类的信息(类名、方法、字段),并调用其方法或修改其字段,无需提前知道类的结构。
  • 通过Class对象获取类的元数据,常用方法包括getDeclaredMethods( )、getDeclaredFileds()、newInstance()等。

应用场景

  • 框架实现:Spring通过反射实现依赖注入、动态代理等。
  • 接口自动化框架:注解驱动,底层也是通过反射获取注解信息,作为自动化用例参数准备。

内部类

构造器

  构造器用于初始化对象、与类同名、没有返回值、构造器可以有参数用于传递初始化数据。

  如果类中不显示定义构造器,编译器会自动生成一个无参的默认构造器。一旦定义了有参构造器,默认构造器不再自动生成。

泛型和作用

  Java泛型允许类、接口和方法可以操作任何类型的数据,而不用指定具体的数据类型,比如ArrayList可以存储任何类型的对象。

包装类

Java的包装类用于将基本数据类型(如int、char等)转化为对象类型。常见的包装类包括Integer、Character、Double等。包装类的主要作用有两个:
  1. 自动装箱/拆箱:Java会自动将基本类型转换为包装类对象(装箱)和将包装类对象转换回基本类型(拆箱)。
  2. 集合支持:集合类如List、Map只能存储对象,包装类使得基本类型也能被存入集合中。
此外,包装类是不可变的,一旦创建,不能修改它的值。

Integer和int


区别


1. 类型:

  int是基本数据类型,存储的是数值本身。

 Integer是包装类,int的对象化类型,可以为null。

2. 内存:
   int存储在栈内存中,效率高。
   Integer是对象,存储在堆内存中,消耗更多的内存。
3. 默认值:
  int的默认值为0。
  Integer的默认值为null。
4. 功能:
   Integer提供了很多方法,如parseInt()、toString()等,int没有这些功能。
5. 自动装箱与拆箱:
  Java支持自动将int转换为Integer(装箱),或将Integer转换为int(拆箱)。

通配符

枚举类

装箱与拆箱

数据类型方式转换

lambda表达式

static修饰

静态初始化顺序

final、static和static final

用final修饰的类可以被继承吗【string不可继承】

不可变类

局部变量

面向对象和面向过程

面向对象三大特征

继承与实现接口的区别

抽象类和接口的区别

重载与重写的区别

==、equals和compareTo

八大基本数据类型

Java异常体系

Exception和Error

值传递和引用传递

深拷贝和浅拷贝

String、StringBuffer、StringBuilder的区别

### Python 试常见问题汇总 #### 基础概念 Python 是一种高级编程语言,具有简洁易读的特点。以下是常见的基础试问题: 1. **解释器的作用是什么?** 解释器负责将源代码逐行翻译成机器码并执行[^1]。 2. **什么是标识符?** 标识符是一个名字,用于命名变量、函数、类等对象[^2]。 3. **Python 中的关键字有哪些?** 关键字是被赋予特殊含义的标识符,例如 `if`、`else`、`for` 和 `while` 等。 4. **如何定义一个函数?** 使用 `def` 关键字可以定义一个函数。例如: ```python def greet(name): print(f"Hello, {name}") ``` 5. **列表和元组的区别是什么?** 列表是可变的数据结构,而元组是不可变的数据结构。列表使用方括号 `[ ]` 表示,元组使用圆括号 `( )` 表示。 --- #### 数据类型与操作 数据类型的掌握对于解决实际问题是至关重要的。 1. **字符串的操作方法有哪些?** 字符串支持切片、拼接以及常用的方法如 `.split()`、`.join()` 和 `.replace()` 等。 2. **集合和字典的主要区别是什么?** 集合是一种无序且不重复的数据结构;字典则是键值对形式存储数据的一种方式。 3. **如何实现深拷贝和浅拷贝?** 浅拷贝只复制顶层容器的内容,而深拷贝会递归地复制嵌套的对象。可以通过模块 `copy` 实现: ```python import copy list1 = [[1, 2], [3, 4]] shallow_copy = copy.copy(list1) # 浅拷贝 deep_copy = copy.deepcopy(list1) # 深拷贝 ``` --- #### 进阶知识点 以下是一些更深入的技术细节,通常会在中高级职位的试中涉及。 1. **GIL 的作用是什么?** GIL(Global Interpreter Lock)全局解释锁是为了保护线程安全设计的一个机制,在多核 CPU 上可能会限制性能。 2. **装饰器的工作原理是什么?** 装饰器本质上是一个接受函数作为参数并返回新函数的高阶函数。例如: ```python def my_decorator(func): def wrapper(): print("Before function call") func() print("After function call") return wrapper @my_decorator def say_hello(): print("Hello!") say_hello() # 输出 Before function call -> Hello! -> After function call ``` 3. **上下文管理器是如何工作的?** 上下文管理器通过 `with` 语句简化资源管理流程,自动处理打开和关闭文件或其他资源的过程。它依赖于两个魔法方法:`__enter__` 和 `__exit__`。 --- #### Web 开发相关内容 Web 开发也是许多公司招聘的重点方向之一。 1. **Flask 和 Django 的主要区别是什么?** Flask 是轻量级框架,适合小型项目;Django 提供了更多内置功能,适用于大型复杂应用。 2. **HTTPS 握手协议的具体过程是什么?** HTTPS 手握过程中包括以下几个阶段:客户端发送请求信息(协议版本和支持算法),服务器响应选定算法及其证书,双方交换随机数并通过加密生成共享密钥完成通信准备[^3]。 --- #### 性能优化技巧 在大规模系统中,性能调优至关重要。 1. **如何提高程序运行速度?** 可以采用多种手段来提升效率,比如减少不必要的计算、利用缓存技术或者选择更快的数据结构替代方案。 2. **内存泄漏的原因可能有哪些?** 循环引用未释放可能导致垃圾回收失败从而引发内存泄露现象。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值