zoukankan      html  css  js  c++  java
  • 实战面试题

    mysql中between和and的区别:
    自己理解:between的意思:选取两个值之间的数据范围;
    and的意思是:他的字面意思是和,让后作用是选取这个值和另一个值
    官方答案:
    -------------------------------------------------------------
    mysql中#{}和${}的区别?
    #{}是预编译处理,$ {}是字符串替换。
    mybatis在处理#{}时,会将sql中的#{}替换为?号,调用PreparedStatement的set方法来赋值;
    mybatis在处理 $ { } 时,就是把 ${ } 替换成变量的值。使用 #{} 可以有效的防止SQL注入,提高系统安全性。
    ---------------------------------------------------------------
    springboot配置:
    application.properties或者
    application.yml
    application.properties和application.yml的区别 :
    内容格式比较:
    .properties文件,通过.来连接,通过=来赋值,结构上,没有分层的感觉,但比较直接。
    .yml文件,通过:来分层,结构上,有比较明显的层次感,最后key赋值的:后需要留一个空格
    执行顺序
    如果工程中同时存在application.properties文件和 application.yml文件,yml文件会先加载,而后加载的properties文件会覆盖yml文件。
    -----------------------------------------------------------------------------------------
    springboot自动配置原理是什么?
    自动配置原理:
    1)SpringBoot启动的时候加载主配置类,开启了自动配置功能@EnableAutoConfiguration
    2)@EnableAutoConfiguration 作用:
    @EnableAutoConfiguration注解通过@SpringBootApplication被间接的标记在了Spring Boot的启动类上。
    在SpringApplication.run(...)的内部就会执行selectImports()方法,找到所有JavaConfig自动配置类的全限定名对应的class,然后将所有自动配置类加载到Spring容器中。
    -------------------------------------------------------------------------------
    ajax的标准写法:
    $.ajax({
    url:"http://www.microsoft.com", //请求的url地址
    dataType:"json", //返回格式为json
    async:true,//请求是否异步,默认为异步,这也是ajax重要特性
    data:{"id":"value"}, //参数值
    type:"GET", //请求方式
    beforeSend:function(){
    //请求前的处理
    },
    success:function(req){
    //请求成功时处理
    },
    complete:function(){
    //请求完成的处理
    },
    error:function(){
    //请求出错处理
    }
    });
    -------------------------------------------------------------------------------
    equals()和"=="的区别?
    功能的不同:
    "=="是判断两个变量或实例是不是指向同一个内存空间。
    "equals"是判断两个变量或实例所指向的内存空间的值是不是相同。
    定义不同:
    "equals"在JAVA中是一个方法。
    "=="在JAVA中只是一个运算符合。
    --------------------------------------------------------------------------------
    Session 和cookie 的区别?
    存储位置不同
    cookie的数据信息存放在客户端浏览器上。
    session的数据信息存放在服务器上
    存储容量不同
    单个cookie保存的数据<=4KB,一个站点最多保存20个Cookie。
    对于session来说并没有上限,但出于对服务器端的性能考虑,session内不要存放过多的东西,并且设置session删除机制。
    跨域支持上不同
    cookie支持跨域名访问。
    session不支持跨域名访问。
    服务器压力不同
    cookie保管在客户端,不占用服务器资源。对于并发用户十分多的网站,cookie是很好的选择。
    session是保管在服务器端的,每个用户都会产生一个session。假如并发访问的用户十分多,会产生十分多的session,耗费大量的内存。
    有效期上不同
    开发可以通过设置cookie的属性,达到使cookie长期有效的效果。
    只需关闭窗口该session就会失效,因而session不能达到长期有效的效果。
    --------------------------------------------------------------------------------------
    springcold的五大组件:
    服务发现注册中心——Eureka 作用:实现服务治理(服务注册与发现)
    客服端负载均衡——Feign 作用:主要提供客户侧的软件负载均衡算法
    断路器——Hystrix 作用:断路器,保护系统,控制故障范围
    服务网关——Zuul 作用:api网关,路由
    分布式配置——Spring Cloud Config 作用:配置管理
    -------------------------------------------------------------------------
    springCold和Springboot的区别?
    1.
    Spring boot是Spring的一套快速配置脚手架,可以基于Spring Boot快速开发单个微服务;
    Spring Cloud是一个基于Spring Boot实现的云应用开发工具;
    2.
    Spring Boot专注于快速、方便集成的单个个体;
    Spring Cloud是关注全局的服务治理框架;
    3.
    Spring boot使用了默认大于配置的理念,很多集成方案已经帮你选择好了,能不配置就不配置;
    Spring Cloud很大的一部分是基于Spring Boot来实现。
    4.
    Spring Boot可以离开Spring Cloud独立使用开发项目;
    Spring Cloud离不开Spring Boot,属于依赖的关系。
    ----------------------------------------------------------------------------
    list集合去重:
    1.可以双重for循环去重
    2.set集合判断去重,不打乱顺序
    3.set和list转换去重
    4.使用java8新特性stream方法进行List去重
    ----------------------------------------------------------------------
    jdbc操作数据库的流程?
    1.class.forname()加载数据库的连接驱动
    2.DriverMapper.getConnection()获取数据库连接对象
    3.根据sql获取sql会话对象,有两种获取方式:statement、PreparedStatement
    4.执行sql处理结果集
    5.关闭结果集,关闭会话,关闭连接
    --------------------------------------------------------------------------
    JVM调优?
    1.线程池:解决用户相应时间长的问题
    2.JVM启动参数:调整各代的内存比例和垃圾回收算法,提高虚拟机的吞吐量
    3.程序的算法:改进程序逻辑算法提高性能
    ---------------------------------------------------------------------------
    什么是HTTP协议? (超文本传输协议)
    客户端和服务器端之间数据传输的格式规范是一个基于请求和相应模式的.无状态的.应用层协议,基于TCP的连接
    ------------------------------------------------------------------------------
    创建线程有几种方式?
    有四种,分别是
    1.继承Thread类
    2.实现Runnable接口
    3.实现Collable接口
    4.通过线程池
    -------------------------------------------------------------------------------
    mysql数据库调优:
    1.为每一个字段都选取自己合适的字段属性
    2.使用join来代替子查询
    3.来使用联合查询来代替手动创建临时表
    4.使用外键
    5.使用索引
    6.优化查询语句
    ----------------------------------------------------------------------------------
    内连接和外连接的区别:
    内连接:指连接结果仅包含符合连接条件的行,参与连接的两个表都应该符合连接条件。
    外连接:连接结果不仅包含符合连接条件的行同时也包含自身不符合条件的行。包括左外连接、右外连接和全外连接。
    --------------------------------------------------------------------------------------
    hashmap数据结构:
    数组+链表+红黑树(jdk1.8后)
    hash表的优点:
    无论哈希表中数据多少,效率都很高.
    hash表的原理:
    每条数据都有其对应的位置,我们查找特定的数据时,我们看一下其位置是否有数据即可
    -------------------------------------------------------------------------------------------
    使用的码云有几个分支?
    大的项目有5个,包括master,hotfix,featrue_login等等
    小点的项目的话就是主要有两个master,hotfix
    码云是怎么合并分支的?
    a:合并分支可以通过指令的方式,git merge 分支名
    b:也可以通过码云网页进行合并
    码云合并分支后怎么解决冲突?
    若是碰见冲突的代码,首先是查看哪里的代码冲突了,然后和同事协商,商量出来一个结果之后进行相应的修改,而后再去进行合并
    ------------------------------------------------------------------------------------
    介绍一下hashmap?
    hashmap的底层实现类是map,
    从结构来讲,jdk1.7时用的是数组+链表(jdk1.8增加了红黑树)实现的,当链表的长度超过8之后会把数组转换为红黑树
    存储时,首先声明一个数组,当使用put之后会进行懒加载来初始化数组,若是没有声明数组的长度,则数组长度初始化为16,然后当使用
    put进行存储时,会先进行hash运算,移位,抑或等操作获取到一个hash值,在通过位运算得到数组的索引,然后判断此索引值是否为空,若为空
    直接插入,若是存在,则判断key是否存在若存在则直接覆盖,若不存在则判断是否是红黑树,若是红黑树直接插入
    若不是红黑树则插入链表,然后判断链表长度是否大于8,若是大于8则转为红黑树,若不是则判断key是否存在,若存在则直接覆盖
    若不存在则插入链表
    初始size为16,扩容:newsize = oldsize*2,size一定为2的n次幂
    扩容针对整个Map,每次扩容时,原来数组中的元素依次重新计算存放位置,并重新插入
    插入元素后才判断该不该扩容,有可能无效扩容(插入后如果扩容,如果没有再次插入,就会产生无效扩容)
    当Map中元素总数超过Entry数组的75%,触发扩容操作,为了减少链表长度,元素分配更均匀
    计算index方法:index = hash & (tab.length – 1)
    --------------------------------------------------------------------------------------
    外连接和内连接的区别?
    内连接只显示两表id匹配的
    左外连接,是以左表为主表,显示左表的所有数据,对于不匹配的部分都用null显示
    ---------------------------------------------------------------------------------------
    activemq数据丢失怎么解决?
    生产者到消息数据丢失?
    a:事务的方式
    消息MQ服务器中数据丢失?
    a:消息队列做持久化
    消费端数据丢失?
    b:异步Confirm模式,若成功服务器会传回ACK=true,否则ack=false
    手工确认模式开启,只有消费端手工确认之后,才表示这个消息已经被正确处理 若没消费,需重复处理
    1:有可能MQ服务器没接到消费端传过来的消息,会重复处理,所以要保证接口的幂等性
    2:避免重复处理不成功,造成阻塞,所以给固定次数的重试机制
    -------------------------------------------------------------------------------------------
    redis的数据类型,都是做什么用的?
    String:用户基本信息,点赞,分布式锁
    Hash:快速定位,购物车
    List:双向链表,(秒杀,保存待抢购的商品列表)
    Set:唯一,秒杀时保证每个商品被人抢购一件
    Zset:比如分数排序,排行榜
    --------------------------------------------------------------------------------------------
    elasticasearch插件?
    用的是kibana,BigDesk Plugin监控es的插件,Head Plugin 很方便对es进行各种操作的客户端
    --------------------------------------------------------------------------------------------
    Object类常用的方法有哪些?
    tostring equals == hashCode等待
    --------------------------------------------------------------------------------------------
    springboot拦截器和过滤器区别?
    过滤器就是过滤的作用,在web开发中过滤一些我们指定的url
    功能:
    拦截掉我们不需要的接口请求修改请求(request)和响应(response)内容完成CORS跨域请求等等
    区别:
    过滤器的实现基于回调函数。而拦截器(代理模式)的实现基于反射
    过滤器是依赖于Servlet容器,属于Servlet规范的一部分,而拦截器则是独立存在的
    过滤器的执行由Servlet容器回调完成,而拦截器通常通过动态代理(反射)的方式来执行。
    ----------------------------------------------------------------------------------
    项目测试的流程:
    测试本阶段需要一套Bug管理系统,形成需求、设计、开发、测试互动。
    1)、编写测试计划和测试方案
    2)、功能测试
    单元测试、集成测试
    3)、性能测试
    集成测试、压力测试
    如果能做到,最好能进行自动化测试。

    如果能做到,做分析统计工作。

    最后形成测试报告。
    ------------------------------------------------------------------------------
    session和cookie:关闭浏览器后会怎样?

    session保存在服务器端,会一直存在,默认存在时间30分钟;

    cookie保存sessionid,服务器会根据cookie中sessionid获取session;

    两种类型的Cookie:

    临时Cookie(会话Cookie)
    永久Cookie
    不设置过期时间,则表示这个cookie生命周期为浏览器会话期间,只要关闭浏览器窗口,cookie就消失了。这种生命期为浏览会话期的cookie被称为会话cookie。
    会话cookie一般不保存在硬盘上而是保存在内存里。

    设置了过期时间,浏览器就会把cookie保存到硬盘上,关闭后再次打开浏览器,这些cookie依然有效直到超过设定的过期时间。
    存储在硬盘上的cookie可以在不同的浏览器进程间共享,比如两个IE窗口。而对于保存在内存的cookie,不同的浏览器有不同的处理方式。

    为何关闭浏览器后,再次访问会觉得session失效了呢,这里的失效意思是session的数据丢失了?
    其实这里session数据并没有丢失,只是关闭浏览器后,因为默认的cookie生命周期为浏览器的缓存,即关掉浏览器之后cookie就失效了,此时sessionid也就没有了。
    再次访问后,服务器又生成一个新的sessionid,此时request.getSession()通过sessionid获取到的session就不是之前的session了。

  • 相关阅读:
    C#?和??运算符以及合并条件表达式
    Nhibernate Batch update returned unexpected row count from update; actual row count: 0 解决方案
    js根据ClassName来删除元素(有坑误入)
    C#正则表达式(通俗易懂)
    AngularJs自定义表单验证
    基于angularJs坐标转换指令(经纬度中的度分秒转化为小数形式 )
    网页乱码问题
    交换两个数值(值类型,引用类型)
    不用临时变量,交换二个变量的值
    PDF在线预览 (flexpaper+swftools+saveaspdfandxps)
  • 原文地址:https://www.cnblogs.com/guoweijie/p/14047785.html
Copyright © 2011-2022 走看看