1、Linux基础
1.1 请说出自己常用的10个linux命令及其作用;
答:
- ll:查看指定目录的文件和文件夹详细信息,查看文件的权限、大小、修改日期等
- chmod +x <file_name>:为指定文件增加可执行权限
- tar -zxvf <file_name>:解压tar.gz类型的文件
- unzip <file_name>:解压zip类型的文件
- yum install -y <soft_name>:下载并安装指定软件包,且过程中的程序询问默认为yes
- netstat -tnl:列出正在监听中的TCP连接信息和端口信息
- cat/more/less <file_name>:查看文件,大文件一般使用less,避免一次加载整个文件,less能够方便的翻页、查找、跳转
- rm -rf dir:递归删除整个目录,且不进行询问
- vim/vi <file_name>:查看并编辑文本文件
- tail -fn 500 :查看文件的最近500行,并进入监听状态,输出文件新增的内容
1.2 CPU、内存、磁盘怎么监控其使用情况;
答:使用top命令监控CPU和内存的使用情况,top命令能实时查看CPU的负载、使用率、已使用内存、未使用内存等信息;使用df -f命令查看磁盘分区、挂载情况、总容量、已使用和未使用容量等信息。
1.3 如何监控业务系统或数据库的关键进程;
答:如监控某java程序,先使用jps -v查询该程序的pid(进程号),接着使用top -p pid监控该进程的CPU和内存使用情况,可观察cpu的负载数值是否过高(空闲时为0.x)、程序已使用内存是否达到系统极限等信息。
2、数据库
2.1 使用的数据库类型和版本、创建的数据库和表的字符编码;
答:MongoDB-3.2、Maria-10、Oracle-11g,字符编码一般指定为UTF-8
2.2 SQL语句熟练程度,多表关联、行列转换、分组排序是否掌握;
答:
多表关联:一般使用SQL99语法中的inner join、left join、right join语句,join后接连接条件,on后接筛选条件;
inner join是内连接,left join是左连接,以左表为基础进行关联,即两表中符合连接条件的记录 + 左边表中所有不满足连接条件的记录,right join相反;
行列转换:使用case…when…then…else…end语法;
分组:当一列或多列组合的值完全相同时,使用group by语句把这些重复记录当成一组,分组条件可以使用having语句,分组后,可以使用sum()、max()、min()等函数计算组内的累积量、最大值、最小值;
排序:使用order by语句+要分组的字段,默认升序,使用desc指定降序排列;多个字段排序时,只有第一个字段相等,第二个字段才会起作用。
2.3 MySQL中的怎么分析慢SQL、怎么定位数据库慢的原因;
答:
分析慢SQL:
通过修改配置文件或全局变量开启Mysql慢查询日志,开启后大于设定时间的查询会记录在日志中,使用EXPLAIN关键字进一步分析某条SQL语句性能,根据返回结果观察语句是否用到了索引,扫描的行数是否过多,然后进一步优化;
数据库慢的原因:
首先从慢查询日志出发,判断索引是否建立完善,SQL语句是否用到了索引;
接着分析SQL是否足够优化,是否返回了不必要的字段,后台代码多次操作能否合并,减少数据库的连接;
接着判断程序中事务的使用是否合理,数据库的隔离级别是否过高;
然后判断表结构是否设计合理,字段的数据类型是否有设置过大、存在浪费的现象;
最后从服务器硬件、网络情况、分布式架构是否合理等方面进一步分析。
3、Java
3.1 Java多线程熟练程度,如何实现特定线程读取磁盘上特定标识的文件;如线程-1只读取以a-1、b-1、c-1无后缀文件,依次类推;
答:
public static void main(String[] args) {
Path path = Paths.get("e:", "dir");
try {
// 递归遍历指定目录
Files.walkFileTree(path, new SimpleFileVisitor<Path>() {
// 访问文件时触发
@Override
public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
// 当文件名以"-1"结尾时,进行处理
if (file.toString().endsWith("-1")) {
try(InputStream inputStream = new FileInputStream(file.toString())){
// do something
}
}
return FileVisitResult.CONTINUE;
}
});
} catch (IOException e) {
e.printStackTrace();
}
}
3.2 SpringBoot/Cloud在项目中运用情况,自己遇到和解决的问题;
答:
SpringBoot:
SpringBoot官方提供了常用的依赖关系集合,如web、JPA环境,能为我们解决一部分依赖关系的问题;
SpringBoot提供了大量的自动配置类,能够减少日常开发中一部分配置文件;
在开发过程中使用dev-tools,能够实现项目的热部署,修改代码快速重启,节约了时间;
SpringBoot内置了tomcat,项目可以直接打包成jar然后部署;
3.3 Http接口,响应数据格式为:{code:‘0’, msg:’’, data: {}}获取data数据的逻辑(按步骤写三句话说明自己会怎么做);
答:
通过Ajax请求接口,并指定请求参数dataType为json,若请求成功,则回调success方法;
判断返回结果result是否为空,若result不为空,根据后台自定义的规则判断code是否正确,若正确,通过result.data获取data数据(因指定dataType为json,所以result为json对象);
4、JS
通过0、1来表示一周里面某一天是否被选中(选中为:1, 否则为0);1010001表示选中了周一、周三、周日,问如何通过JS代码输出周一、周三、周日
答:
printDay(0b1010001);
/**
* 根据约定规则的二进制数输出星期几
* @param weekNums 二进制格式的数
*/
function printDay(weekNums){
if(weekNums >> 6 === 1){
console.log('周一');
}
if(weekNums >> 5 & 0b01 === 1){
console.log('周二');
}
if(weekNums >> 4 & 0b001 === 1){
console.log('周三');
}
if(weekNums >> 3 & 0b0001 === 1){
console.log('周四');
}
if(weekNums >> 2 & 0b00001 === 1){
console.log('周五');
}
if(weekNums >> 1 & 0b000001 === 1){
console.log('周六');
}
if(weekNums >> 0 & 0b0000001 === 1){
console.log('周日');
}
}
注:文中有些问题博主也不能完全确定,无法保证答案全部正确。如有疏漏,恳请指出!