分享一次Java面试笔试题-20190412

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('周日');
    }
}

注:文中有些问题博主也不能完全确定,无法保证答案全部正确。如有疏漏,恳请指出!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值