2019金三银四面试题总结

  1. redis中的数据存在那一块?
    Redis先存入到内存中,然后定时刷新到磁盘中。

  2. 自己对比较熟悉的框架整理?

  3. 商城方面的知识?
    建议看一下我个人写的商城项目:https://download.csdn.net/download/w1316022737/10973408

  4. 在Liunx中如何阻止一个进程?
    通过kill命令阻止进程,kill [参数] [进程号]

  5. Kill 6 80 所代表的意思?
    阻止进程号为80的进程

  6. 第三方支付接口的流程?
    http://www.cnblogs.com/xifengxiaoma/p/10107635.html

  7. mysql5.5和mysql5.7有啥不同?
    https://blog.csdn.net/eagle89/article/details/80936899

  8. El表达式如何使用?
    https://jingyan.baidu.com/article/fdffd1f8750475f3e98ca106.html

  9. 有哪些选择器?
    https://blog.csdn.net/czh500/article/details/80304843

  10. 对Spring AOP方面的理解?

❶ AspectJ的底层技术
AspectJ的底层技术是静态代理,即用一种AspectJ支持的特定语言编写切面,通过一个命令来编译,生成一个新的代理类,该代理类增强了业务类,这是在编译时增强,编译时增强的性能比运行时增强性能好

❷ Spring AOP
Spring AOP采用的是动态代理,在运行期间对业务方法进行增强,所以不会生成新类

JDK动态代理只能为接口创建动态代理实例,而不能对类创建动态代理,需要获得被目标类的接口信息(应用JAVA的反射技术),生成一个实现了代理接口的动态代理类(字节码),在通过反射机制获得动态代理类的构造函数,利用构造函数生成动态代理类的实例对象,在调用具体方法前调用invokeHandler方法来处理

  1. 一般什么时候使用AOP?
    性能监测,访问控制,事务管理,缓存,对象池管理,日志记录,AOP将这些分散在各个业务逻辑中的代码通过横向切割的方式抽取到一个独立的模块中

  2. AOP如何织入?在XML中如何配置,使用注解如何使用?
    https://blog.csdn.net/qq_31993621/article/details/82504100

  3. SpringMVC的专有注解?
    @Controller,@RequestMapping,@Resource,@Autowired,
    @ModelAttribute,@SessionAttributes,@PathVariable,
    @ResponseBody,@Component,@Repository

  4. 在三层中,如果没有service中的实现类,使用autowird如何配置?
    https://blog.csdn.net/u013257679/article/details/52295106/

  5. 在动态sql中的where和关键字where有什么区别?
    相当于sql语句中的where关键字。 这个标签还有一个功能就是自动会去掉第一个and,比如下面两句sql代码,如果第一个满足的那么就会去掉and这个关键字。 --> and user.sex= #{userCustom.sex} and user.username=#{userCustom.username}

  6. 如何删除数据库中的一个字段
    删除:alter table 表名 drop 字段名
    修改:alter table 表名 change 原字段名 新字段名
    添加:alter table 表名 add 字段 数据类型 属性

  7. 视图一般用在什么时候?
    好处:安全(虚拟表),方便,简化数据操作
    举例:在实际过程中,公司有不同角色的工作人员,采购人员,可以需要一些与其有关数据,而与其他无关的数据,对它没有任何意义,这时候就可以创建创建igyie视图
    当sql语句比较长的时候,创建一个视图,以后可以简化代码

  8. 谈谈你对索引的理解,优势?
    https://blog.csdn.net/zhang_xiaomeng/article/details/78218829

  9. sql里面1-100循环怎样做?

代码:
main()
{
int i,sum=0;
for(i=1;i<=100;i++)
if(i%2==1) sum+=i;
printf("%d\n",sum);
i=1;
sum=0;
while(i<=100)
{
if(i%2==1) sum+=i;
i++;
}
printf("%d\n",sum);
}

SQL:
DECLARE @sum int , @i int
SET @sum = 1
SET @i = 1
WHILE @i<=10
BEGIN
SET @sum = @sum+ @i
SET @i = @i + 1
END
PRINT @sum
  1. 创建一个线程?
    https://blog.csdn.net/m0_37840000/article/details/79756932

  2. 数据库中的常用函数?
    https://blog.csdn.net/xnh_565175944/article/details/80561248

  3. 手写单例?
    https://blog.csdn.net/w1316022737/article/details/83114376

  4. 高并发解决方案?
    ❶数据库方面:
    可以使用Mycat中间件做分库分表
    ❷缓存方面:
    可以使用Redis做集群
    ❸消息中间件方面:
    可以使用RabbitMQ做集群
    ❹代理方面:
    可以使用Nginx做集群
    ❺代码方面:
    可以分模块做集群
    ❻硬件方面:
    使用F5

  5. 分布式项目跨模块如何保证事务?
    使用消息中间件,发送端发送一条消息接收端收到了就提交,如果没有就继续发送或者回滚

  6. SAS接口?

  7. 使用eques时为什么要保证hashcode相等?
    每个Object对象的hashCode都是唯一的,在批量的对象比较中,hashCode要比equals来的快,如果equals相等,hashCode一定相等,hashCode相等,equals不一定相等

  8. 你对数据库事务的理解?
    https://www.cnblogs.com/takumicx/p/9998844.html

  9. Spring的核心模块?

Spring Core
Core模块是Spring的核心类库,Spring的所有功能都依赖于该类库,Core主要实现IOC功能,Spring的所有功能都是借助IOC实现的(IOC基本概念:https://blog.csdn.net/w1316022737/article/details/85255886)

Context
Context模块提供框架式的Bean访问方式,其他程序可以通过Context访问Spring的Bean资源,相当于资源注入,提供了对国际化的支持

ORM
Spring的ORM模块提供对常用的ORM框架的管理和辅助支持,Spring支持常用的Hibernate,ibtas,jdao等框架的支持,Spring本身并不对ORM进行实现,仅对常见的ORM框架进行封装,并对其进行管理

DAO
Spring提供对JDBC的支持,对JDBC进行封装,允许JDBC使用Spring资源,并能统一管理JDBC事务

WEB
WEB模块提供对常见框架如:Struts1,WEBWORK(Struts2),JSF的支持,Spring能够管理这些框架,将Spring的资源注入给框架,也能在这些框架的前后插入拦截器

MVC
WEB MVC模块为Spring提供了一套轻量级的MVC实现,在Spring的开发中,即可以用Struts也可以用Spring自己的MVC框架,使用更加的灵活

AOP
AOP模块是Spring的AOP库,提供了AOP(拦截器)并提供常用的拦截器,供用户自定义和配置

  1. 常用的redis命令?
    https://blog.csdn.net/w1316022737/article/details/85320099

  2. 使用mybatis时刚新增一条记录,如何获取id?
    把insert节点的useGeneratedKeys=true设置先生成主键,然后keyProperty=”id”,把生成的主键指向属性

  3. sleep和wait有什么区别?
    原理不同:sleep()方法是Thread类的静态方法,它会使此线程暂停执行一段时间,wait()是Object类的方法,要调用notify()方法,notifyAll()方法
    对锁的处理机制不同:sleep()不涉及线程间的通信,不会释放锁,wait()会释放锁
    使用区域不同:sleep()方法可以放在任何地方使用,wait()必须放在同步方法或者同步语句块中使用

  4. toString()和String.valueOf()有啥区别?
    toString()不能为null,但String.valueOf()为null
    https://blog.csdn.net/Alecor/article/details/81384141

  5. static public void test() 和public static void test()有啥区别?
    没有说关键字static必须写在谁前面,只是习惯,也是规范建议写时吧static 写在 public、private 后,就像java类的命名规范一般首字母大写,class Test,但是class test 也不是错误的,只是规范点是建议大写

  6. 有两台服务器,用户请求过来了,一台宕机了,如何不让session失效,将请求转到另一台服务器?
    使用jsonp
    因为js不能跨域请求json数据,但是js可以跨域加载js
    http://localhost:8087/user/token/4ffd07a2-1f92-46942ab763931018?callback=fun
    8087做处理:查询到json数据,拼接成fun({“id”:1})
    8082浏览器加载到fun({“id”:1})
    调用fun方法,里面的参数就是json数据
    2019金三银四面试题总结_第1张图片

  7. == 和equals的区别?
    ==比较的是两个对象的内存地址的引用是否相同,equals比较的是两个对象的内容是否相等

  8. 手写代码1-100之间的各奇偶之和?

public static void main(String[] args){
int sum = 0;
for(int i=1;i<=100;i++){
if(i%2==0){
sum += i;
}
}
System.out.println("1-100的偶数之和是:" + sum);
}
奇数则反之
  1. session是什么?
    https://blog.csdn.net/weixin_36416680/article/details/80506150

  2. 当你接手一个代码时,此代码性能差,如何优化?
    先考虑前端渲染的时间长短,其次看看那些判断不需去掉这些判断,然后考虑多线程

  3. 谈谈你对this的理解?
    https://blog.csdn.net/w1316022737/article/details/83215210

  4. 忙循环是什么?
    https://blog.csdn.net/a_quiet_evening/article/details/79373675

  5. 嵌套事务和合并事务?
    https://blog.csdn.net/mlin_123/article/details/52742869

  6. 手写存储过程?
    https://www.cnblogs.com/tuqun/p/3661652.html

  7. 排序都有那几种方法?用JAVA实现快速排序算法?

public class QuickSort {
    /*
     * 快速排序
     */
    
    public static void main(String[] args) {
        String[] strVoid = new String[] {"11", "66", "22", "0", "55", "22", "0", "32"};
        QuickSort sort = new QuickSort();
        sort.quickSort(strVoid, 0, strVoid.length - 1);
        for (int i = 0; i < strVoid.length; i++) {
            System.out.println(strVoid[i] + " ");
        }
        //用比较器排序
        List list=new ArrayList();
        for(String str:strVoid) {
            list.add(str);
        }
        Collections.sort(list,new Comparator() {

            @Override
            public int compare(String arg0, String arg1) {
                int num=arg1.compareTo(arg0);
                return num;
            }
            
        });
        for(String str:list) {
            System.out.print(str+" | ");
        }
    }
    
    public void quickSort(String[] strDate, int left, int right) {
        String middle, tempDate;
        int i, j;
        i = left;
        j = right;
        middle = strDate[(i + j) / 2];
        do {
            while (strDate[i].compareTo(middle) < 0 && i < right)
                i++; // 找出左边比中间值大的数
            while (strDate[j].compareTo(middle) > 0 && j > left)
                j--; // 找出右边比中间值小的数
            if (i <= j) { // 将左边大的数和右边小的数进行替换
                tempDate = strDate[i];
                strDate[i] = strDate[j];
                strDate[j] = tempDate;
                i++;
                j--;
            }
        } while (i <= j); // 当两者交错时停止

        if (i < right) {
            quickSort(strDate, i, right);// 从
        }
        if (j > left) {
            quickSort(strDate, left, j);
        }
    }
}

冒泡排序:https://blog.csdn.net/w1316022737/article/details/83143772

  1. HashMap,ConcurrentHashMap与LinkedHashMap的区别?
    https://blog.csdn.net/cai131498/article/details/79580516

  2. JAVA中堆和栈的区别,说下java的内存机制?
    堆和栈的区别:https://blog.csdn.net/chensi16114/article/details/72867260
    内存机制:https://blog.csdn.net/w1316022737/article/details/83305025

  3. Servlet和Filter的区别?
    Filter不像Servlet,它不能产生一个请求或者响应,它只是修改对某一资源的请求,或者修改从某一的响应
    http://www.cnblogs.com/guoyafenghome/p/8490238.html

  4. SpringMVC运行原理?

1.用户发送请求到前端控制器DispatcherServlet
2.DispatcherServlet收到请求调用HandlerMapping处理器映射器
3.处理器映射器找到具体的处理器(可以根据xml配置、注解进行查找),生成处理器对象及处理器拦截器
  一并返回给DispatcherServlet
4.DispatcherServlet调用HandlerAdapter处理器适配器
5.HandlerAdapter经过适配调用具体的处理器(Controller,后端控制器)
6.Controller执行完返回ModelAndView
7.HandlerAdapter将ModelAndView返回给DispatcherServlet
8.DispatcherServlet将ModelAndView传给ViewReslover视图解析器
9.ViewReslover解析后返回具体View
10.DispatcherServlet根据view进行渲染视图(将模块数据填充到视图中)
11.DispatcherServlet响应用户

MVC原理图:
2019金三银四面试题总结_第2张图片
SpringMVC原理图:
2019金三银四面试题总结_第3张图片

  1. 你对HTTP的理解?
    https://www.cnblogs.com/wxisme/p/6212797.html

  2. 如何用git解决代码冲突?
    https://www.cnblogs.com/gavincoder/p/9071959.html

  3. 你用那个工具编写接口文档?
    RAP
    https://blog.csdn.net/u013090676/article/details/80593771

  4. 创建实体类的风格?

  5. 用哪个工具生成报表?
    https://blog.csdn.net/n15642656987/article/details/80833233

  6. ajax的异步和同步的区别?
    同步请求在请求完成前,后续的程序将处于暂停执行状态。而异步请求,除过请求事件函数中的程序在特定条件下执行外,请求外的程序会紧接着执行。部分属性在同步请求中不可用或受限制,如异步请求可以通过配置属性 timeout 来进行超时设置, 而同步请求则不能配置,如果在同步请求中配置timeout 会抛异常(禁止在同步请求中使用属性 timeout的异常信息)。

  7. java项目中VO和DTO以及Entity各自是在什么情况下应用的?
    https://blog.csdn.net/qq_38990386/article/details/80536186

  8. 不能在不同用户之间共享数据的方法是? D
    A. 通过cookie
    B. 利用文件系统
    C. 利用数据库
    D. 通过ServletContext对象
    说明:A,B都和后台没有关系,C 所有数据都是在数据库里面,D 是与登录用户有关的,切换另一个用户数据就不一样了

  9. 关于sleep()和wait(),以下描述错误的一项是? D
    A. sleep是线程类(Tread)的方法,wait是Object类的方法
    B. sleep不释放对象锁,wait放弃对象锁
    C. sleep暂停线程,但监控状态仍然保持,结束后会自动恢复
    D. wait后进入等待锁定池,只有针对此对象发出notify方法后获得对象锁进入运行状态
    说明:D错是因为进入的是就绪状态而不是运行状态

  10. 执行完以下代码int[] x = new int[25]后,以下哪项说明是正确的? A
    A. x[24]为0
    B. x[24]未定义
    C. x[25]为0
    D. x[0]为空
    注:每个没有赋值的数组,里面的所有值都为0

  11. 哪一个不是EL定义的隐式对象? C
    A. cookie
    B. pageContext
    C. attributes
    D. initParam

  12. 如果try{} 里有一个return语句,那么紧跟在这个try后的finally{} 里的code会不会被执行,什么时候被执行,在return前还是后? B
    A. 不会执行
    B. 会执行,在return前执行
    C. 会执行,在return后执行
    说明:会执行 try{}中的return执行后在没有返回数据时先去执行finally{}中的代码,然后再返回。所以说finally{}在return中间执行

  13. 设i,j为int型变量名,a为int型数组名,以下选项中,正确的赋值语句是? B
    A. i=i+2
    B. a[0]=7
    C. i++ - --j
    D. a(0)=66

  14. 表达式3/6*5的计算结果是? A
    A. 0, B. 3, C. 2.5, D. 以上都错误

  15. 构造函数有返回值? B
    A. 正确 B. 错误

  16. 结构化程序设计的基本流程控制结构? A
    A. 顺序结构, B. 分支结构, C. 逻辑结构, D. 循环结构

  17. 下面数据结构中,属于非线性的是? B
    A. 线性表, B. 树, C队列, D. 堆栈
    说明:线性结构,是指数据元素有一个直接前件元素和直接后件元素。线性表是线性结构。栈和队列是指对插入和删除操作有特殊要求的线性表,树是非线性结构

  18. 以下说法正确的是? D
    A. 可以创建abstract类的实例
    B. 不能有抽象构造函数
    C. 不能有抽象静态方法
    D. 接口中的所有方法都是抽象的
    E. 不可以继承String类

  19. Internet采用TCP/IP网络协议,该协议的主要层次结构? DCBA
    A. 应用层
    B. 传输层
    C. 网络层
    D. 数据链路层
    E. 物理层
    说明:TCP/IP由四个层次组成:数据链路层、网络层、传输层、应用层
    https://blog.csdn.net/qq_36631758/article/details/60593246?locationNum=2&fps=1

  20. XML解析技术有DOM,SAX等,说说你对这两种解析技术的理解?
    DOM和SAX解析器的主要区别在于它们解析XML文档的方式,使用DOM解析时,XML文档以树形结构的形式加载到内存中,而SAX是事件驱动的解析器
    https://blog.csdn.net/wwj_748/article/details/8711876

  21. mysql中group和group_concat()的区别?
    https://blog.csdn.net/moakun/article/details/82085968

  22. 链表和线性表的区别?
    链表就像LinkedList,线性表底层是数组就像ArrayList

  23. 在使用dubbo时遇到的问题?
    1.服务调用不通
    解决方案:首先排除网络问题,再看发布的服务是否正确,再看端口号是否正确,再看注解@Service用的是不是Spring的,如果用的是dubbo的话,改过来,在看web里面是否加载了Spring配置文件,服务器端的pojo要实现序列化,监控中心提供者和消费者是否正常注册,代码配置文件是否正确,端口是否禁用

  24. Spring的Controller是单例还是多例?
    SpringMVC默认是单例的,Spring Bean作用域有5个:singleton(单例模式),prototype(原型模式),request,session,global session,为什么spring要默认单例呢,❶为了性能,实践:不要在controller中定义成员变量,如果必须要定义一个非静态成员变量时,则通过注解@Scope(“prototype”)将其设置为多列模式,如果给controller中定义很多属性,那么单例肯定会出现竞争访问,因此,只要controller中不定义属性,那么单例完全是安全的

  25. NO和INO的区别?
    https://www.cnblogs.com/aspirant/p/8630283.html

  26. HashCode()方法的作用?
    https://blog.csdn.net/anmoyyh/article/details/76019777

  27. Spring IOC的实现原理?
    ❶解析XML
    ❷获取每个Bean的属性
    ❸给Bean的私有属性赋值
    代码解析:https://www.cnblogs.com/ITtangtang/p/3978349.html

  28. 终止一个正在运行线程的方式有几种?并说出区别?
    https://www.cnblogs.com/of-fanruice/p/7522201.html

  29. 用哪个测试工具测试代码?
    Swagger
    https://www.cnblogs.com/yoyoblogs/p/5736836.html

  30. 分布式锁如何实现?
    使用Zookeeper的临时节点,首先分为ip为01,ip为02两个节点,比如说去操作数据库中的id,首先第一个节点去create要操作的id,这时当它没创建完的时候就加了锁,如果创建完了就close,当第二个节点去操作的时候,首先要get要操作的id,看看其它节点是否在操作了,如果在操作就不再去操作,如果没有就继续,通常的做法是把 zk 上的一个 znode 看作是一把锁,
    通过 create znode 的方式来实现。所有客户端都去创建 /distribute_lock 节点,最终成功创建的那个客户端也即拥有了这把锁

  31. final、finally、finalize的区别?
    https://blog.csdn.net/mumu1998/article/details/81775022

  32. sso单点登录?
    单一系统使用的是session,就数据存在session中,请求其它模块时获取一下session
    分布式系统中要将登录模块分离出来,可以使用session共享,在集群下,如果使用tomcat搭建3个节点的集群,并发量是有限制的,所以当并发比较大的时候就不能这样,可以使用redis,将信息存储在redis中,可以设置一个过期时间,因为redis是基于内存中的,所以性能比较高,请求模块时获取一些redis就可以了,这些是个人看法,那块有问题请指教一下,如下链接为用一个令牌验证进行:
    http://www.cnblogs.com/ywlaker/p/6113927.html

  33. 如何解决跨域问题?
    使用jsonp

  34. 如何使用SVN?
    https://blog.csdn.net/sinat_37812785/article/details/80243207

  35. JPA的EntityManager类的常用方法
    https://blog.csdn.net/tianyingxiaojiang/article/details/75136753

  36. Velocity简介
    https://www.jianshu.com/p/98300c2df6c9

  37. 数据库中的水平分割和垂直分割分别是什么?
    水平分割基于同一个系统,将一张表拆分成n多个子表
    垂直分割根据系统进行划分数据库

  38. token登录流程?
    ❶ 客户端调用登录接口传入参数用户名和账户密码
    ❷ 服务端收到客户端传的参数进行数据库验证,如果正确
    ❸ 将用户信息存放在redis中,key为token,value为用户userid
    ❹ token临时唯一不重复值
    ❺ 服务端返回token给客户端,客户端收到了token之后,存放在本地
    ❻ 客户端调用服务端使用token查询用户信息
    ❼ 查询用户信息接口,token查找redis能够查找对应userid,使用userid查询数据库,将用户信息返回给客户端

  39. 为什么redis是单线程的,性能还那么高?
    https://blog.csdn.net/u013328047/article/details/82229710

  40. redis如何实现分布式锁?
    https://baijiahao.baidu.com/s?id=1623086259657780069&wfr=spider&for=pc
    https://www.cnblogs.com/0201zcr/p/5942748.html

  41. RabbitMQ怎么保证消息不对丢失?
    生产者可以采用重试机制。因为消费者会不停的消费消息,可以重试将消息放入队列。
    如果还是不行,可以将消息记录到数据库,后期做补偿。(不太推荐,不方便)
    https://www.cnblogs.com/flyrock/p/8859203.html

  42. RabbitMQ队列满了如何解决?
    死信队列,可以理解为备胎。(推荐使用)
    即在消息过期,队列满了,消息被拒绝的时候,都可以扔给死信队列。
    如果出现死信队列和普通队列都满的情况,此时考虑消费者消费能力不足,可以对消费者开多线程进行处理。

  43. RabbitMQ有哪几种交换机?
    https://blog.csdn.net/w1316022737/article/details/83820050

  44. RabbitMQ如何解决分布式事务?
    https://www.cnblogs.com/toov5/p/10289999.html

  45. 你了解哪些并发包?
    https://www.cnblogs.com/java-zhao/p/5139895.html

  46. Nginx宕机了怎么解决?
    https://blog.csdn.net/winsonyuan/article/details/52784988

  47. 在一个类中怎么调用另一个类的private方法
    使用它的get方法

  48. java反射
    https://www.cnblogs.com/ysocean/p/6516248.html

  49. springcloud的缺点
    https://blog.csdn.net/w1316022737/article/details/85223529

  50. 解释一下面向对象的4个特性
    https://blog.csdn.net/u012968272/article/details/43900837

  51. hashmap怎么put一个元素
    https://blog.csdn.net/w1316022737/article/details/87866079
    上面链接中的第七个

  52. 两个装有对象的list怎么去重放到第三个数组里
    https://blog.csdn.net/liuchen1166/article/details/72957474

  53. 序列化和反序列化的过程
    对象序列化是一个用于将对象状态转换为字节流的过程,可以将其保存到磁盘文件中或通过网络发送到任何其他程序;从字节流创建对象的相反的过程称为反序列化。而创建的字节流是与平台无关的,在一个平台上序列化的对象可以在不同的平台上反序列化。

光大技术爱好者们,那块如果有问题,欢迎留言!

你可能感兴趣的:(面试季,面试题总结)