面试问题知识
文章目录
- 1. Linux 和 CentOS
- 基础指令:
- VMware 和 CentOS:
- 扩充问题:
- 2. 前端开发(JS、CSS)
- JavaScript:
- CSS:
- 扩充问题:
- 3. 数据库(MySQL)
- 基础语法:
- 事务和锁:
- 扩充问题:
- 4. 算法与数据结构
- 排序算法:
- 数据结构:
- 扩充问题:
- 5. Java 和面向对象编程
- Java 基础:
- 面向对象:
- 扩充问题:
- 6. 设计模式和设计原则
- 设计模式:
- 设计原则:
- 扩充问题:
- 7. Maven 和 Git
- Maven:
- Git:
- 扩充问题:
- 8. 微信小程序和云开发
- 小程序开发:
- 云开发:
- 扩充问题:
- 总结
以下是针对上述问题的详细解答,并扩充了一些相关的面试问题,帮助你更全面地准备面试。
面试自用 日期:2025-2-1
1. Linux 和 CentOS
基础指令:
- 查看当前目录下的所有文件(包括隐藏文件):
ls -a
- 查找一个文件并删除它:
find /path/to/dir -name "filename" -exec rm {} \;
- 查看系统的 CPU 和内存使用情况:
top
- 修改文件的权限:
chmod 755 filename
755
表示:所有者有读、写、执行权限(7),组用户和其他用户有读和执行权限(5)。
VMware 和 CentOS:
- 安装 CentOS 的步骤:
- 在 VMware 中创建一个新的虚拟机。
- 选择 CentOS 的 ISO 文件作为安装介质。
- 配置虚拟机的硬件(内存、硬盘等)。
- 启动虚拟机并按照安装向导完成 CentOS 的安装。
- 配置 CentOS 的网络连接:
- 编辑网络配置文件:
vi /etc/sysconfig/network-scripts/ifcfg-eth0
- 设置
ONBOOT=yes
和BOOTPROTO=dhcp
,然后重启网络服务:systemctl restart network
- 编辑网络配置文件:
- 安装软件包:
yum install package_name
扩充问题:
- 如何查看 Linux 系统的版本?
cat /etc/redhat-release
- 如何查看当前系统的进程?
ps aux
2. 前端开发(JS、CSS)
JavaScript:
- 闭包:
- 闭包是指函数可以访问其词法作用域中的变量,即使函数在其词法作用域之外执行。
- 示例:
function outer() { let x = 10; return function inner() { console.log(x); }; } const closure = outer(); closure(); // 输出 10
- AJAX 请求:
const xhr = new XMLHttpRequest(); xhr.open("GET", "https://api.example.com/data", true); xhr.onload = function() { if (xhr.status === 200) { console.log(xhr.responseText); } }; xhr.send();
- 事件冒泡和事件捕获:
- 事件冒泡:事件从目标元素向上传播到根元素。
- 事件捕获:事件从根元素向下传播到目标元素。
- Promise:
const promise = new Promise((resolve, reject) => { setTimeout(() => resolve("成功"), 1000); }); promise.then(result => console.log(result));
CSS:
- 垂直居中:
.container { display: flex; justify-content: center; align-items: center; }
- Flexbox 和 Grid:
- Flexbox 适用于一维布局(行或列)。
- Grid 适用于二维布局(行和列)。
- 响应式设计:
@media (max-width: 768px) { .container { flex-direction: column; } }
扩充问题:
- 如何实现一个模态框(Modal)?
- 如何优化 CSS 性能?
- 减少嵌套层级,避免使用通配符选择器,使用
transform
和opacity
进行动画优化。
- 减少嵌套层级,避免使用通配符选择器,使用
3. 数据库(MySQL)
基础语法:
- 创建带外键的表:
CREATE TABLE orders ( order_id INT PRIMARY KEY, user_id INT, FOREIGN KEY (user_id) REFERENCES users(user_id) );
- 内连接查询:
SELECT * FROM users INNER JOIN orders ON users.user_id = orders.user_id;
- 优化慢查询:
- 使用索引,避免全表扫描。
- 优化 SQL 语句,减少子查询。
事务和锁:
- ACID 特性:
- 原子性(Atomicity):事务要么全部完成,要么全部不完成。
- 一致性(Consistency):事务前后数据库的状态保持一致。
- 隔离性(Isolation):事务之间相互隔离。
- 持久性(Durability):事务完成后,数据永久保存。
- 隔离级别:
- MySQL 默认隔离级别是 可重复读(Repeatable Read)。
- 死锁:
- 死锁是指两个或多个事务相互等待对方释放资源。
- 避免方法:合理设计事务顺序,设置超时机制。
扩充问题:
- 如何查看 MySQL 的执行计划?
EXPLAIN SELECT * FROM users;
- 什么是覆盖索引?它有什么优点?
- 覆盖索引是指查询的所有字段都在索引中,无需回表查询。
4. 算法与数据结构
排序算法:
- 快速排序:
- 时间复杂度:平均 O(n log n),最坏 O(n²)。
- 实现原理:选择一个基准元素,将数组分为两部分,递归排序。
- 二分查找:
- 前提条件:数组必须有序。
- 时间复杂度:O(log n)。
数据结构:
- 数组和链表:
- 数组:内存连续,支持随机访问,插入删除效率低。
- 链表:内存不连续,插入删除效率高,访问效率低。
- 栈和队列:
- 栈:后进先出(LIFO)。
- 队列:先进先出(FIFO)。
扩充问题:
- 如何判断一个链表是否有环?
- 使用快慢指针(Floyd 判圈算法)。
- 如何实现一个 LRU 缓存?
- 使用哈希表 + 双向链表。
5. Java 和面向对象编程
Java 基础:
final
关键字:- 修饰类:类不能被继承。
- 修饰方法:方法不能被重写。
- 修饰变量:变量不能被重新赋值。
- 垃圾回收机制:
- Java 通过垃圾回收器自动回收不再使用的对象。
String
、StringBuilder
、StringBuffer
:String
是不可变的,StringBuilder
和StringBuffer
是可变的。StringBuffer
是线程安全的,StringBuilder
不是。
面向对象:
- 多态:
- 通过继承和接口实现,同一个方法在不同类中有不同的实现。
- 抽象类和接口:
- 抽象类可以有方法实现,接口只能有方法声明。
- 单例模式:
public class Singleton { private static Singleton instance; private Singleton() {} public static Singleton getInstance() { if (instance == null) { instance = new Singleton(); } return instance; } }
扩充问题:
- 什么是反射?如何使用反射?
- 什么是泛型?它的作用是什么?
6. 设计模式和设计原则
设计模式:
- 工厂模式:
- 定义一个创建对象的接口,由子类决定实例化哪个类。
- 策略模式:
- 定义一系列算法,并将它们封装起来,使它们可以互换。
设计原则:
- 单一职责原则:
- 一个类应该只有一个引起它变化的原因。
- 开闭原则:
- 软件实体应该对扩展开放,对修改关闭。
扩充问题:
- 什么是观察者模式?它的应用场景是什么?
- 什么是依赖注入?它如何提高代码的可测试性?
7. Maven 和 Git
Maven:
- 生命周期:
- 清理(clean)、编译(compile)、测试(test)、打包(package)、安装(install)、部署(deploy)。
- 依赖冲突:
- 使用
mvn dependency:tree
查看依赖树,排除冲突的依赖。
- 使用
Git:
- 创建分支并推送:
git checkout -b new_branch git push origin new_branch
- 解决合并冲突:
- 手动编辑冲突文件,然后
git add
和git commit
。
- 手动编辑冲突文件,然后
扩充问题:
- 什么是 Git 的 rebase 和 merge?它们的区别是什么?
- 如何撤销上一次的提交?
git reset --soft HEAD~1
8. 微信小程序和云开发
小程序开发:
- 页面生命周期:
onLoad
、onShow
、onReady
、onHide
、onUnload
。
- 页面跳转:
wx.navigateTo({ url: '/pages/targetPage' });
云开发:
- 云函数:
- 云函数是在云端运行的代码,可以通过 API 调用。
- 云数据库:
- 使用
wx.cloud.database()
访问云数据库。
- 使用
扩充问题:
- 如何实现小程序的用户登录?
- 云开发和传统服务器开发的区别是什么?
总结
通过这些问题和答案,你可以更全面地准备面试。建议你结合实际项目经验,深入理解每个问题的背景和应用场景,并在面试中展示你的技术能力和解决问题的能力。祝你面试顺利!