宜信面试

2020-08-11宜信视频面(40min)
涉及到项目、Java基础知识、框架、mysql、算法,主要还是项目问的多!!!

项目

  • 项目是不是单点开发,有没有了解过分布式开发??

    假如有一个很庞大的企业项目之中,那么分布式的核心概念实际上非常简单,就是将在一台服务器上完成的计算操作分给两台甚至更多台的主机一起完成,这样的开发模式就成为分布式开发。

  • 项目的不足??
    无手机号、邮箱激活操作
    没有对密码进行加密处理

  • 项目有几个模块??

  • 怎样实现的登录注册??

  • 有没有尝试过对项目进行优化??
    使用Redis缓存进行存储优化

  • 除了Ajax、Json进行前后端交互外,你还了解哪些前后端交互的方法??
    1) 利用cookie
      eg:前台通过登录来存储cookie
      后台通过req.cookies()来获取存储的cookie信息
      
    2)利用Ajax
      在学习NodeJS之前最常用的前后端交互大都利用ajax 和JQuery中已经封装好的$.ajax$.post$.getJSON 通过创建一个XMLHttpRequest对象,来进行前后端交互。在学NodeJS之后我们也利用依赖于$http服务自己搭建的_http来完成get、post和jsonp的方式来进行前后端交互;

    3)jsonp

    jsonp是前后端结合跨域方式,因为前段请求到数据需要在回调函数中使用,所以后端得将数据放回到回调函数中jsonp属于AJAX吗? ajax是指通过使用xmlhttpquest对象进行异步数据交互的技术,jsonp是依靠scriptsrc属性来获取的,不属于ajax

    4)服务端渲染
    浏览器请求到的内容其实可以通过后端加工一下,将一会数据直接渲染好,再给浏览器就可以了

在php中实现服务端渲染:

在php文件中可以放入html代码,访问php文件的时候就相当于访问这个对应的html文件,因为在php文件中,所以可以写一些php的代码来渲染数据

在Node中实现服务端渲染:

利用模板引擎,node在渲染模板的时候给模板传入数据,在模板中就可以使用特定的语法来渲染dom了 例如:ejs,jade

注意:express里的路由是靠请求路径划分的,前一个自己搭的路由是根据请求类型划分的。

5)webSocket 和 Socket.io
   网上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端成为一个scoket,通过建立socket双向连接,就可以让客户端和服务端直接进行双向通信。

  • 你觉得用框架的好处有啥??
    框架(Framework)是整个或部分系统的可重用设计,表现为一组抽象构件及构件实例间交互的方法;另一种定义认为,框架是可被应用开发者定制的应用骨架。前者是从应用方面而后者是从目的方面给出的定义。
    简而言之,框架其实就是某种应用的半成品,就是一组组件,供你选用完成你自己的系统。简单说就是使用别人搭好的舞台,你来做表演。而且,框架一般是成熟的,不断升级的软件。
    框架,简化了在分层架构开发中的操作,使得 软件企业的研发将集中在应用的设计上,而不是具体的技术实现。

Java基础知识

问了Java的Collection集合框架、Map集合框架

  • ArrayList、LinkedList的区别??
    他们的数据结构不同,ArrayList是基于动态数组的数据结构,但是LinkedList是链表的数据结构。

  • 有没有了解过map源码,map为什么会冲突??
     HashMap的底层主要是基于数组和链表来实现的,它之所以有相当快的查询速度主要是因为它是通过计算散列码来决定存储的位置。HashMap中主要是通过key的hashCode来计算hash值的,只要hashCode相同,计算出来的hash值就一样。如果存储的对象对多了,就有可能不同的对象所算出来的hash值是相同的,这就出现了所谓的hash冲突。
      解决hash冲突的方法有很多,HashMap底层是通过链表来解决hash冲突的。

  • 拦截器、控制器、过滤器的原理??
    1)过滤器:
    过滤器(Filter):它依赖于servlet容器。在实现上,基于函数回调,它可以对几乎所有请求进行过滤,但是缺点是一个过滤器实例只能在容器初始化时调用一次。使用过滤器的目的,是用来做一些过滤操作,获取我们想要获取的数据。比如:在Javaweb中,对传入的request、response提前过滤掉一些信息,或者提前设置一些参数,然后再传入servlet或者Controller进行业务逻辑操作。

    通常用的场景是:在过滤器中修改字符编码(CharacterEncodingFilter)、在过滤器中修改HttpServletRequest的一些参数(XSSFilter(自定义过滤器)),如:过滤低俗文字、危险字符等。
    2)拦截器
    拦截器(Interceptor):它依赖于web框架,在SpringMVC中就是依赖于SpringMVC框架。在实现上,基于Java的反射机制,属于面向切面编程(AOP)的一种运用,就是在service或者一个方法前,调用一个方法,或者在方法后,调用一个方法,比如动态代理就是拦截器的简单实现,在调用方法前打印出字符串(或者做其它业务逻辑的操作),也可以在调用方法后打印出字符串,甚至在抛出异常的时候做业务逻辑的操作。
    3)控制器
    前端控制器DispatcherServlet 调用处理器适配器去执行处理器(Handler),返回视图 (ModelAndView)

  • Spring框架的作用
    Spring框架主要用于与其他技术(SpringMVC, Mybatis等)进行整合

    我们利用Spring框架管理系统的各个组件(Action,Service,DAO)
    采用Spring的IOC和AOP机制实现各组件的关联.从而实现了低耦合调用.增强了系统可维护性和扩展性.

  • Spring依赖注入啥意思??
    依赖注入(Dependency Injection)和控制反转(Inversion of Control)是同一个概念。
    当某个角色(可能是一个的协助时,在传统的程序设计过程中,通常由调用者来创建被调用者的实例。但在Spring里,创建被调用者的工作不再由调用者来完成,因此称为控制反转;创建被调用者实例的工作通常由Spring容器来完成,然后注入调用者,因此也称为依赖注入。

    依赖注入有两种:设值注入、构造注入

Class A中用到了Class B的对象b,一般情况下,需要在A的代码中显式的new一个B的对象。
采用依赖注入技术之后,不需要直接new来获得这个对象,而是通过Spring容器控制程序来将B对象在外部new出来并注入到A类里的引用中。

mysql

  • 怎样提高查询速度,mysql有几种索引??
    建立索引
    Mysql的索引类型有:
    1)B+树索引
    2)Hash索引 (基于Hash表,所以这种索引只支持精确查找,不支持范围查找,不支持排序。)
    3)R-Tree索引
    4)Full-text
  • 为什么加索引能优化慢查询?
    因为索引其实就是一种优化查询的数据结构,比如Mysql中的索引是用B+树实现的,而B+树就是一种数据结构,可以优化查询速度,可以利用索引快速查找数据,所以能优化查询。
  • 你知道哪些数据结构可以提高查询速度?
    哈希表、完全平衡二叉树、B树、B+树等等。
  • 那这些数据结构既然都能优化查询速度,Mysql为何选择使用B+树?
    Mysql选用B+树这种数据结构作为索引,可以提高查询索引时的磁盘IO效率,并且可以提高范围查询的效率,并且B+树里的元素也是有序的。

数据结构

  • 八大排序??
    快速排序、冒泡排序、直接插入排序、堆排序、希尔排序、简单选择排序、归并排序、基数排序

  • 快速排序算法的思想??
    在这里插入图片描述

  • 快速排序算法缺点??
    优点:快速排序是所有内部排序算法中,平均性能最优的。
    缺点:不稳定

你可能感兴趣的:(面试)