尼克老湿の面试回顾(4)

本文涵盖Spring框架原理、MySQL数据库优化、Redis内存管理、Java基础、Git及Linux命令等技术要点,并附带常见面试题目解析及代码示例。

前言

瓜子二手车

面试内容

一面

1.Spring

1). Spring Session是如何实现的?

     详细可参考: 通过Spring Session实现新一代的Session管理

2). Spring中有哪些设计模式,体现在什么地方?

     详细可参考: Spring框架中的设计模式

3). Spring AOP是什么设计模式,是什么原理实现的?

     详细可参考: Spring AOP的实现原理

4). AOP的应用场景有哪些?

应用场景
Authenticatio权限
Caching缓存
Context passing内容传递
Error handling错误处理
Lazy loading 懒加载
Debugging  调试
logging, tracing, profiling and monitoring 记录跟踪 优化 校准
Performance optimization性能优化
Persistence  持久化
Resource pooling 资源池
Synchronization 同步
Transactions事务
2.MySQL

1). 索引的种类有哪些?

2). MySQL的执行计划Explain的参数

3). MySQL的优化是怎么做的?

4). 常用的MySQL函数有哪些?

5). 谈一下MySQL的锁机制是怎样的?

6). Update 10条语句,会不会锁表,如果不会的话会把这10条数据锁住么?

mysql的行锁是通过索引加载的,即是行锁是加在索引响应的行上的,要是对应的SQL语句没有走索引,则会全表扫描,行锁则无法实现,取而代之的是表锁。

简而言之:where条件里面,不加索引时,update会使用“表锁”进行更新,影响所有行的查询更新;加了索引后,使用“行锁”进行udpate,只锁当前行。不影响其他行的查询更新。

其他可参考 : MySql批量更新死锁案例分析

7). 添加索引的SQL语句怎么写?

ALTER TABLE table_name ADD INDEX index_name (column_list)
ALTER TABLE table_name ADD UNIQUE (column_list)
ALTER TABLE table_name ADD PRIMARY KEY (column_list)
CREATE INDEX index_name ON table_name (column_name)
复制代码

8). 有表如下,请写出查询总分大于180分的同学的SQL

nameclasssubjectgrade
Mike1英语87
Mike1数学96
Mike1语文66
Nicole1英语73
……………………
select name, sum(grade) from table group by name having sum(grade) > 180
复制代码

参看 : sql group by 与 having的用法

3.Redis

1). Redis有哪几种数据结构?

  • String
  • Hash
  • List
  • Set
  • Sorted Set或ZSet

2). Redis是单线程但为什么这么快?

  • 完全基于内存;
  • 使用I/O多路复用模型;
  • 采用单线程,避免了不必要的上下文切换和竞争条件;
  • 数据结构简单,对数据的操作也简单;
  • 自己构建VM机制;

     详细可参考: 为什么说Redis是单线程的以及Redis为什么这么快!

3). Redis与MySQL比较的优缺点有哪些?

4). Redis的使用场景有哪些?

5). Redis的内存优化机制是怎样的?

4.Java基础

1). lambda表达式

2). 线程间的通信方式

5.手写代码

1). 数组去重

2). 两个数组求交集

public class ArrayIntersection {

    public static void main(String[] args){
        int[] a = {1,1,3,4,5,6,7,8,9,9};
        int[] b = {0,1,4,5,6,9,9};

        Set<Integer> set = new HashSet<>();

        for (int i = 0;i<a.length;i++){
            set.add(a[i]);
        }

        for(int j = 0;j<b.length;j++){
            if(!set.add(b[j])){
                System.out.print(b[j] + " ");
            }
        }
    }
}
复制代码

总的时间复杂度为 O(n)

6.Git

1). 代码回滚

$ git reset --hard HEAD^        回退到上个版本
$ git reset --hard commit_id    退到/进到 指定commit_id
复制代码
7.Linux

1). 查看文件的命令有哪些?

命令简介
cat从第一行开始显示全部的文本内容
tac从最后一行开始,显示全部分文本内容,与cat相反
nl显示文本时,可以输出行号
more按页显示文本内容
less与more差不多,也是按页显示文本内容,区别是less可以一行一行的回退,more回退只能一页一页回退
head从头开始显示文件指定的行数
tail显示文件指定的结尾的行数,但每一行的位置还是原文件中的位置,不会像tac那样与原文件相反
viLinux文本编辑器

2). 修改文件权限的命令是哪一个?如果想要该文件可读可写可操作该加什么样的参数?

8.Nginx

1). 谈一下Nginx的负载均衡策略有哪几种方式?

  • 轮询策略(默认)
  • 指定权重策略
  • ip绑定 ip_hash
  • fair(第三方)
  • url_hash(第三方)
  • sticky策略

2). 谈一下如何配置Nginx的白名单黑名单?


二面

1.MySQL

1). 谈一下MySQL的事务

2.Java基础

1). 谈一下Java中的集合容器类

2). 谈一下HashTable的底层实现

      Hashtable是通过"拉链法"实现的哈希表。它包括几个重要的成员变量:table, count, threshold, loadFactor, modCount

3). 谈一下HashMap的底层实现,红黑树的优点是什么?

2). 谈一下多线程的使用场景

3). 谈一下线程池的使用方式以及各个参数的意义是什么?

其他可参考 : 深入分析java线程池的实现原理

3. IO

1). Java中有哪几种IO?

  • 首先,传统的java.io包,基于流模型实现,同步阻塞IO,好处是代码比较简单、直观,缺点是IO效率和扩展性存在局限性,容易成为应用性能的瓶颈;
  • 在Java1.4中引入了NIO框架,提供了Channel、Selector、Buffer等新的抽象,可以构建多路复用的、同步非阻塞IO程序,同时提供了更接近操作系统底层的高性能数据操作方式;
  • 在Java 7 中,NIO有了进一步的改进,也就是NIO2,引入了异步非阻塞IO方式,也有人叫它AIO。异步IO操作基于事件和回调机制,可以简单的理解为,应用操作直接返回,而不会阻塞在那里,当后台处理完成,操作系统会通知相应线程进行后续工作。

2).

4.JVM

1). 如果New一个对象,都存在了什么地方?

详细可参考: 从Java类到对象的创建过程都做了些啥?内存中的对象是啥样的?

5.手写代码

1). 如何用多个栈实现一个队列的功能?

public class StackToQueue {
    
    Stack<Integer> stack1 = new Stack<Integer>();
    Stack<Integer> stack2 = new Stack<Integer>();
    
    public void push(int node){
        stack1.push(node);
    }
    
    public int pop(){
        if(stack1.empty() && stack2.empty()){
            throw new RuntimeException("Queue is empty!");
        }
        if(stack2.empty()){
            while(!stack1.empty()){
                stack2.push(stack1.pop());
            }
        }
        return stack2.pop();
    }
    
}
复制代码

2). 树的后序遍历 遍历文件夹

      详细可参考: 树的后序遍历 遍历文件夹

更新时间

发布时间 : 2018年8月21

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值