1、java常用的异常处理机制?
Java常用的异常处理机制有以下几种:
1)try-catch-finally 语句:用于捕获和处理异常。将可能抛出异常的代码放在try块中,然后在catch块中处理异常。无论是否发生异常,finally块中的代码都会被执行。
try { // 可能抛出异常的代码 } catch (ExceptionType1 e) { // 处理ExceptionType1类型的异常 } catch (ExceptionType2 e) { // 处理ExceptionType2类型的异常 } finally { // 无论是否发生异常,都会执行的代码 }
2)throw 关键字:用于手动抛出异常。当程序遇到某种特定情况时,可以使用throw关键字抛出一个异常对象。
if (条件) { throw new Exception("异常信息"); }
3)throws关键字:用于声明方法可能抛出的异常类型。当一个方法可能抛出异常,但不处理该异常时,可以在方法签名后使用throws关键字声明异常类型,让调用者处理异常。
public void methodName() throws ExceptionType1, ExceptionType2 { // 可能抛出异常的代码 }
4)自定义异常类:可以创建一个继承自Exception或RuntimeException的自定义异常类,用于表示程序中特定的错误或异常情况。
class CustomException extends Exception { public CustomException(String message) { super(message); } }
2、异常的两个子类
Java的异常类都是java.lang.Throwable的子类。它派生了两个子类:Error(错误)和 Exception(违例) 。Error表示程序无法处理的异常,通常不应该抛出或捕获这类异常。Exception表示程序可能处理的异常,包括受检异常和非受检异常。受检异常是指编译器要求必须处理的异常,例如IOException、SQLException等。非受检异常是指编译器不要求必须处理的异常,例如NullPointerException、ArrayIndexOutOfBoundsException等。
3、项目的日志,日志分哪些级别?
在项目中,日志分为五个级别:TRACE、DEBUG、INFO、WARN 和 ERROR。其中,TRACE级别的日志记录最详细的信息,DEBUG级别的日志记录是最详细的调试信息,INFO级别的日志记录是一般的运行信息,WARN级别的日志记录是警告信息,ERROR级别的日志记录是错误信息。
4、equals和==的区别?
- 在Java中,==和equals()的区别如下:
- ==比较的是两个对象的值是否相等,而equals()比较的是两个对象引用所指向的内容是否相等。
- ==比较的是两个对象的引用地址,而equals()比较的是两个对象的内容。
- 如果一个类没有重写equals()方法,那么调用equals()方法就相当于调用了它的父类的equals()方法。如果一个类重写了equals()方法,那么就需要根据具体情况来判断是否需要使用equals()方法来比较两个对象。
5、简单说一下java的IO流
Java IO流 是一种流式的数据输入/输出模型,它提供了一种高效的方式来处理输入/输出数据。Java IO流分为字节流 和 字符流 两种类型。字节流是以字节为最小单位进行读写的,而字符流则是以字符为最小单位进行读写的。Java IO流中包含了许多类,如InputStream、OutputStream、Reader、Writer等,每个类都有其特定的用途。例如,FileInputStream和FileOutputStream用于文件的读取和写入,BufferedReader和BufferedWriter则可以对数据进行缓冲,提高读写效率。
6、给了一个处理json文件的场景题
7、java中有哪些集合类?
Java中的集合类是Java数据结构的实现。Java的集合类是java.util包中的重要内容,它允许以各种方式将元素分组,并定义了各种使这些元素更容易操作的方法。Java集合类是Java将一些基本的和使用频率极高的基础类进行封装和增强后再以一个类的形式提供。集合类是可以往里面保存多个对象的类,存放的是对象,不同的集合类有不同的功能和特点,适合不同的场合,用以解决一些实际问题 。
常用的集合类有List、Set、Map等。其中List是有序、可重复的集合,Set是无序、不可重复的集合,Map是键值对形式的集合 。
8、哪个是线程安全,哪个是线程不安全的?
Java中的集合类有线程安全和不安全的之分。线程安全是指在多线程环境下,集合类的行为符合预期,不会出现数据丢失、数据错误等问题。而不安全的集合类则可能会在多线程环境下出现数据丢失、数据错误等问题 。
常用的线程安全的集合类有Vector、HashTable、Properties等,而常用的线程不安全的集合类有ArrayList、LinkedList、HashSet、TreeSet、HashMap、TreeMap等 。
9、线程池有哪些作用?
线程池是一种池化的技术,类似的还有数据库连接池、HTTP 连接池等等。池化的思想主要是为了减少每次获取和结束资源的消耗,提高对资源的利用率。比如在一些偏远地区打水不方便的,大家会每段时间把水打过来存在池子里,这样平时用的时候就直接来取就好了。线程池同理,正是因为每次创建、销毁线程需要占用太多系统资源,所以我们建这么一个池子来统一管理线程。用的时候从池子里拿,不用了就放回来,也不用你销毁,是不是方便了很多?
线程池的作用主要有以下几点:
- 避免创建过多的线程时引发的内存溢出问题。
- 降低资源消耗。
- 复用线程、便利地管理线程和任务、并将线程的创建和任务的执行解耦开来。
- 控制同时运行的线程数量,避免线程过多导致系统资源占用过高,甚至崩溃的问题发生。
11、mysql场景题,查一个学生表里面学生的总数,查学生表里面姓张的学生,查成绩最大的那个学生。
1)查一个学生表里面学生的总数:
SELECT COUNT(*) FROM 学生表;
2)查学生表里面姓张的学生:
SELECT * FROM 学生表 WHERE 姓名 LIKE '张%';
3)查成绩最大的那个学生:
SELECT * FROM 学生表 WHERE 成绩 = (SELECT MAX(成绩) FROM 学生表);
12、Linux中常用的命令?(这里我说了vim)
Vim 是一个强大的文本编辑器,它在终端中运行,并且有着丰富的功能和快捷键。以下是一些 Vim 的常见命令:
1)打开文件和保存文件:
- 打开文件:`vim 文件名`
- 保存文件:在普通模式下,输入 `:w` 并按 Enter 键
- 保存并退出:在普通模式下,输入 `:wq` 并按 Enter 键
- 不保存并退出:在普通模式下,输入 `:q!` 并按 Enter 键
2)普通模式(Normal Mode):
进入普通模式:按下 `Esc` 键
移动光标:使用方向键或以下快捷键:
- `h`:左移
- `j`:下移
- `k`:上移
- `l`:右移
删除字符:
- `x`:删除光标下的字符
复制和粘贴:
- `yy`:复制当前行
- `p`:粘贴
撤销和重做:
- `u`:撤销
- `Ctrl + r`:重做
3)插入模式(Insert Mode):
进入插入模式:
- `i`:在光标前插入
- `a`:在光标后插入
- `I`:在当前行的开头插入、
- `A`:在当前行的末尾插入
退出插入模式:按下 `Esc` 键
4)可视模式(Visual Mode):
进入可视模式:
- `v`:按字符选中文本
- `V`:按行选中文本
- 复制选中文本:按 `y`
- 剪切选中文本:按 `x` 或 `d`
- 粘贴:在普通模式下按 `p`
5)搜索和替换:
- 搜索:在普通模式下,输入 `/`,然后输入要搜索的文本,按 Enter 键。可以使用 `n` 和 `N` 来浏览搜索结果。
- 替换:在普通模式下,输入 `:%s/要替换的文本/替换成的文本/g` 来替换全文中的匹配项。
6)跳转和撤销:
- 跳转到行号:在普通模式下,输入 `:`,然后输入行号,按 Enter 键。
- 撤销:在普通模式下,输入 `u`。
7)保存和退出:
- 保存文件:在普通模式下,输入 `:w` 并按 Enter 键。
- 保存并退出:在普通模式下,输入 `:wq` 并按 Enter 键。
- 不保存并退出:在普通模式下,输入 `:q!` 并按 Enter 键。
13、怎么用vim去替换一个文件中的所有test替换成dev?
:%s/test/dev/g
14、怎么查看最新修改的十个文件(用ls看)?
ls -lt | head -n 10
这个命令的作用是:
ls -lt:列出当前目录下的文件和子目录,按照修改时间从新到旧的顺序排序。
- l:以长格式显示文件信息,包括文件权限、所有者、大小、修改时间等。
- t:按照修改时间排序。
head -n 10:从排序后的文件列表中取前 10 行,即显示最新修改的十个文件。
这样,你就可以看到最新修改的十个文件的列表,它们将按照修改时间从新到旧的顺序显示在终端中。如果你想查看不同数量的文件,只需更改 head 命令中的数字即可。
例如,如果你想查看最新修改的五个文件,可以使用 head -n 5。
15、怎么查看当前目录占了多少磁盘容量?
du -sh .
这个命令的作用是:
- du:表示计算磁盘使用情况。
- s:表示汇总结果,只显示目录的总大小而不显示子目录的大小。
- h:以人类可读的格式显示文件大小,以 K、M、G 等单位表示。
- .:表示当前目录。
16、怎么查看当前进程占用了多少内存?
ps aux
如果你要查看特定进程的内存占用情况,你可以使用 grep 命令来筛选出相关信息。假设你知道要查找的进程名称,例如 myprocess,则可以使用如下命令:
ps aux | grep myprocess
17、了解top吗,就是用top看占用了多少内存?
默认情况下,top 会显示所有运行的进程,按照 CPU 使用率排序。你可以按 Shift+M 来按照内存使用率排序,以便查看占用内存最多的进程在列表的顶部。
top 会实时更新进程列表和资源使用情况。你可以在列表中看到每个进程的 PID(进程标识符)、内存使用量(RES 列)、内存使用率(%MEM 列)等信息。
若要退出 top,可以按下 q 键。
18、你知道了一个端口号,怎么查pid?
netstat -tuln | grep 端口号 sudo lsof -i :端口号
19、awk命令grep命令
参见文章《Linux Shell脚本极简入门》
20、你有一个日志文件,怎么看日志文件中包含error的信息?
grep "error" 文件名
21、内存泄露是什么?
服务器内存泄漏是指服务器应用程序在运行时持续分配内存而不释放,导致服务器的内存使用量逐渐增加,最终可能耗尽可用内存,导致服务器性能下降或崩溃。内存泄漏是一种常见的软件问题,通常需要仔细的诊断和修复。
22、你了解的服务器是什么?
"服务器" 通常指的是计算机网络中的硬件或软件,它们提供服务、资源或数据给其他计算机或设备,以满足客户端的请求。服务器在网络中扮演着重要的角色,用于存储和管理数据、提供网络服务、托管网站、支持应用程序等多种用途。
以下是一些关于服务器的常见概念:
- 硬件服务器:这是指物理服务器,通常是一台专用的计算机,用于执行服务器软件和提供各种服务。硬件服务器可以是机架式服务器、塔式服务器、刀片服务器等不同形式。
- 虚拟服务器:虚拟服务器是在物理服务器上通过虚拟化技术创建的虚拟实例。一台物理服务器可以托管多个虚拟服务器,每个虚拟服务器都可以运行独立的操作系统和应用程序。
- 服务器软件:服务器软件是安装在服务器硬件上的应用程序,用于提供各种服务,例如网络服务、数据库服务、文件共享等。常见的服务器操作系统包括Linux、Windows Server等。
- Web 服务器:Web 服务器是一种特殊类型的服务器,用于托管网站和提供网页内容给客户端浏览器。常见的Web服务器包括Apache、Nginx、IIS等。
- 数据库服务器:数据库服务器是用于存储和管理数据库的服务器,允许客户端应用程序访问和操作数据库中的数据。常见的数据库服务器包括MySQL、PostgreSQL、Oracle等。
- 应用服务器:应用服务器是用于托管和执行应用程序的服务器,通常用于支持业务逻辑和应用程序的后端处理。Java应用服务器如Tomcat、WebLogic和应用服务器如Node.js都是常见的例子。
- 文件服务器:文件服务器是用于存储和共享文件的服务器,允许多个用户访问和共享存储在服务器上的文件和资源。
- 云服务器:云服务器是在云计算平台上运行的虚拟服务器实例,它们通常由云服务提供商托管和管理。用户可以根据需要创建、配置和扩展云服务器。
服务器在企业和互联网应用程序中起着关键作用,提供了可靠的资源和服务,使用户能够访问和共享信息。它们可以是物理的,也可以是虚拟的,根据不同的需求和规模选择适当的服务器架构和配置。
23、怎么在服务器部署mysql服务?
自信百度,这样的文章很多
24、SSH命令是干嘛的?
SSH(Secure Shell)是一种网络协议和加密技术,用于安全地远程访问和管理计算机系统。SSH 的主要用途包括以下几个方面:
远程登录:SSH 允许用户从本地计算机安全地登录到远程计算机系统。这是通过加密通信实现的,因此敏感数据(如用户名和密码)在传输过程中受到保护。SSH 远程登录通常用于远程服务器、网络设备和云计算实例的管理。
文件传输:SSH 可以用于安全地传输文件,包括上传和下载文件。一个常见的用例是使用 scp(Secure Copy Protocol)命令,它基于 SSH,用于在本地计算机和远程服务器之间复制文件。
例如,从本地复制文件到远程服务器:
scp 文件名 用户名@远程服务器IP:目标路径
从远程服务器复制文件到本地
scp 用户名@远程服务器IP:远程文件路径 本地目标路径
远程命令执行:SSH 允许用户在远程计算机上执行命令,无需直接登录到远程系统。这对于自动化和批处理任务非常有用。使用 ssh 命令可以在远程系统上执行命令,例如:
ssh 用户名@远程服务器IP "远程命令"
端口转发:SSH 支持端口转发,允许用户在安全通信隧道中传输流量。这对于保护敏感服务和访问受限制的资源非常有用。SSH 可以进行本地端口转发和远程端口转发。
加密通信:SSH 使用加密技术来保护通信的机密性和完整性。这使得黑客难以窃听或篡改数据传输。SSH 通常使用公钥和私钥对来进行身份验证,以确保只有授权用户可以访问系统。
总之,SSH 是一种安全的远程管理协议,用于远程登录、文件传输、执行远程命令等任务,它在网络和系统管理中起着重要作用,特别是在保护敏感数据和系统安全方面。
25、讲一下git怎么上传项目,怎么解决冲突?
要上传项目到 Git 并解决冲突,通常需要以下步骤。在这个示例中,假设你已经在本地计算机上创建了一个 Git 仓库,想要将其推送到远程仓库,并且在推送时可能会遇到冲突。
上传项目到 Git(推送到远程仓库)的步骤:
1) 初始化仓库:如果你的项目尚未初始化为 Git 仓库,请运行以下命令:
git init
2) 添加文件:将项目中的文件添加到 Git 仓库的暂存区(staging area):
git add .
这会将所有更改添加到暂存区。如果只想添加特定文件,可以使用 git add 文件名。
3) 提交更改:将暂存区中的更改提交到本地仓库,同时添加提交消息:
git commit -m "提交消息"
4) 连接到远程仓库:将本地仓库与远程仓库关联,并添加远程仓库的地址:
git remote add origin 远程仓库地址
例如:
git remote add origin https://github.com/你的用户名/你的仓库.git
5)推送到远程仓库:将本地仓库的更改推送到远程仓库:
git push -u origin 主分支名称
例如:
git push -u origin main
这会将项目上传到远程仓库。-u 选项用于将本地主分支与远程主分支关联起来,以便将来的推送和拉取。
解决冲突的步骤:
如果在推送项目时遇到冲突,通常是因为远程仓库中的更改与你的本地更改产生了冲突。解决冲突的步骤如下:
① 拉取最新更改:在解决冲突之前,首先拉取远程仓库的最新更改:
git pull origin 主分支名称
例如
git pull origin main
这将在本地合并远程仓库的更改。
② 解决冲突:打开包含冲突的文件,通常会看到冲突部分被包裹在类似以下的标记中:
<<<<<<< HEAD 本地更改 ======= 远程更改 >>>>>>> 远程/分支名称
你需要手动编辑文件,保留需要的更改并删除不需要的部分。解决冲突后,保存文件。
③ 标记为已解决:一旦解决了冲突,使用以下命令标记文件为已解决:
git add 文件名
提交更改:提交解决冲突后的更改
git commit -m "解决冲突"
④ 推送更改:将解决冲突后的更改推送到远程仓库:
git push origin 主分支名称
例如:
git push origin main
实战案例
光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
如果对你有帮助的话,点个赞收个藏,给作者一个鼓励。也方便你下次能够快速查找。
如有不懂还要咨询下方小卡片,博主也希望和志同道合的测试人员一起学习进步
在适当的年龄,选择适当的岗位,尽量去发挥好自己的优势。
我的自动化测试开发之路,一路走来都离不每个阶段的计划,因为自己喜欢规划和总结,
测试开发视频教程、学习笔记领取传送门!