常见面试题

1、Get和POST的区别?

GET后退按钮/刷新无害,POST数据会被重新提交(浏览器应该告知用户数据会被重新提交)。 GET书签可收藏,POST为书签不可收藏。
GET能被缓存,POST不能缓存 。
GET编码类型application/x-www-form-url,POST编码类型encodedapplication/x-www-form-urlencoded
或 multipart/form-data。为二进制数据使用多重编码。
GET历史参数保留在浏览器历史中。POST参数不会保存在浏览器历史中。 GET对数据长度有限制,当发送数据时,GET 方法向 URL
添加数据;URL 的长度是受限制的(URL 的最大长度是 2048 个字符)。POST无限制。 GET只允许 ASCII字符。POST没有限制。也允许二进制数据。 与 POST 相比,GET 的安全性较差,因为所发送的数据是 URL的一部分。在发送密码或其他敏感信息时绝不要使用 GET !POST 比 GET 更安全,因为参数不会被保存在浏览器历史或 web
服务器日志中。 GET和POST还有一个重大区别,简单的说: GET产生一个TCP数据包;POST产生两个TCP数据包。 长的说:
对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据);
而对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)。
GET的数据在 URL 中对所有人都是可见的。POST的数据不会显示在 URL 中。

2、MyBatis和Hibernate的区别?

    Mybatis:专注sql本身,需要程序员自己编写sql语句,sql修改、优化比较方便。mybatis是一个不完全的ORM框架,虽然程序员自己写sql,mybatis也可以实现映射(输入映射,输出映射)
    应用场景:适用需求变化较多的项目,比如:互联网项目。
    Hibernate:是一个标准的ORM框架(对象关系映射)。入门门槛较高,不需要写sql,sql语句自动生成,对sql语句进行优化、修改比较困难。
    应用场景:适用需求变化不多的中小型项目,比如:后台管理系统,erp,orm,oa等
  相同点:
    (1)Hibernate与MyBatis都是通过SessionFactoryBuider由XML配置文件生成SessionFactory,由SessionFactory 生成Session,由Session来开启执行事务和SQL(Structured Query Language,结构化查询语言)语句。
    (2)Hibernate和MyBatis都支持JDBC(Java DataBase Connectivity,java数据库连接)和JTA(Java Transaction API,Java事务API(Application Programming Interface,应用程序编程接口))事务处理。
    注:jdbc和jta的主要作用是增强数据访问能力。
    (3)基于ORM(Object Relational Mapping, 对象关系映射)思想解决了entity和数据库的映射问题
  不同点:
    (1)sql方面:mybaits通过mapper.xml维护映射结果,程序员手动编写sql相比hibernate自动生成hql(hibernate sql)更加灵活,sql调优更加容易(hibernate因为更好的封装性,开发效率提高的同时,sql语句调优要更费力,当然可以手动修改sql来优化,但是同时也会影响开发效率);hibernate的hql数据库移植性更好,体现在强壮性。hibernate在级联删除的时候效率低;数据量大, 表多的时候,基于关系操作会变得复杂。
    (2)缓存方面:mybatis和hibernate都可以使用第三方缓存,而hibernate相比maybatis有更好的二级缓存机制。

3、Linux的常用指令有哪些?

常用指令:
 ls           显示文件或目录
 -l            列出文件详细信息l(list)
 -a            列出当前目录下所有文件及目录,包括隐藏的a(all)
 mkdir         创建目录
 -p            创建目录,若无父目录,则创建p(parent)
cd             切换目录
touch          创建空文件
echo           创建带有内容的文件。
cat            查看文件内容
cp             拷贝
mv             移动或重命名
rm             删除文件
 -r            递归删除,可删除子目录及文件
 -f            强制删除
find           在文件系统中搜索某文件
wc             统计文本中行数、字数、字符数
grep           在文本文件中查找某个字符串
rmdir          删除空目录
tree           树形结构显示目录,需要安装tree包
pwd            显示当前目录
ln             创建链接文件
more、less     分页显示文本文件内容
head、tail     显示文件头、尾内容
ctrl+alt+F1    命令行全屏模式

vi命令:https://www.cnblogs.com/mondol/p/vi-examples.html

4、SpringMVC的理解?

SpringMVC工作原理&执行流程
一.SpringMVC的工作流程

        1、  用户发送请求至前端控制器DispatcherServlet。
        2、  DispatcherServlet收到请求调用HandlerMapping处理器映射器。
        3、  处理器映射器找到具体的处理器(可以根据xml配置、注解进行查找),生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet。
        4、  DispatcherServlet调用HandlerAdapter处理器适配器。
        5、  HandlerAdapter经过适配调用具体的处理器(Controller,也叫后端控制器)。
        6、  Controller执行完成返回ModelAndView。
        7、  HandlerAdapter将controller执行结果ModelAndView返回给DispatcherServlet。
        8、  DispatcherServlet将ModelAndView传给ViewReslover视图解析器。
        9、  ViewReslover解析后返回具体View。
        10、 DispatcherServlet根据View进行渲染视图(即将模型数据填充至视图中)。
        11、 DispatcherServlet响应用户。
    二.SpringMVC的工作原理
        1.SpringMVC请所有的请求都提交给DispatcherServlet,它会委托应用系统的其他模块负责负责对请求进行真正的处理工作。 
        2.DispatcherServlet查询一个或多个HandlerMapping,找到处理请求的Controller. 
        3.DispatcherServlet请请求提交到目标Controller 
        4.Controller进行业务逻辑处理后,会返回一个ModelAndView 
        5.Dispathcher查询一个或多个ViewResolver视图解析器,找到ModelAndView对象指定的视图对象 
        6.视图对象负责渲染返回给客户端。 
    三.SpringMVC的注解
        1、@Controller:
        2、@RequestMapping:
        3、@Resource和@Autowired
        4、@ModelAttribute和 @SessionAttributes
        5、@PathVariable
        6、@requestParam
        7、@ResponseBody
        8、@Component
        9、@Repository

详情请见:SpringMVC的注解

四、SpringMVC的执行流程
    1 根据配置文件创建spring的容器
    2 发送http请求到核心控制器
    3 容器通过映射去寻找业务控制器
    4 使用适配器找到相应的业务类,在业务类进行封装
    5 数据放到model中 用map传递数据进行页面展示

5、Spring的知识?

https://blog.csdn.net/zlc15138071827/article/details/79977982

6、Java的面向对象的特征

面向对象编程有三个特征:封装,继承,多态。
封装:1.使用private关键字来实现封装;2.讲类的属性私有化,提供公开的方法实现对属性的操作;3便于修改,增强代码的可维护性;
继承:1关键字是extend;2Java只能单继承;3子类继承了父类非私有的属性和方法;4构造方法不能继承;
多态:子类可以替代父类使用,接口可以替代实现类使用; 重载:1在同一个类中;2方法名相同;3参数类型或者数量不同;
重写:1发生在子类与父类之间;2方法名、返回值类型、参数类型都相同;3重写的修饰符权限要大于被重写的权限;

7、JSP的内置对象?

输入、输出对象:request,response,out;
作用域通信对象:session,application,pageContext;
Servlet对象: page,config;
错误对象: exception;
四个作用域(信息共享的范围)从大到小:appliaction>session>request>page
application:全局作用范围,整个应用程序共享.生命周期为:应用程序启动到停止。
session:会话作用域,当用户首次访问时,产生一个新的会话,以后服务器就可以记住这个会话状态。
request:请求作用域,就是客户端的一次请求。 page:一个JSP页面。

8、Jsp和Servlet的区别?

1.JSP的本质就是Servlet,JVM只能识别java的类,不能识别JSP的代码,Web容器将JSP的代码编译成JVM能够识别的java类。
2.jsp更擅长表现于页面显示,servlet更擅长于逻辑控制。
3.Servlet中没有内置对象,Jsp中的内置对象都是必须通过HttpServletRequest对象,HttpServletResponse对象以及HttpServlet对象得到。
4.Jsp是Servlet的一种简化,使用Jsp只需要完成程序员需要输出到客户端的内容,Jsp中的Java脚本如何镶嵌到一个类中,由Jsp容器完成。
而Servlet则是个完整的Java类,这个类的Service方法用于生成对客户端的响应。   

详情请见:Jsp和Servlet的区别

9、Session的生命周期?

Session中的数据保存在服务器端,在客户端需要的时候创建Session,在客户端不需要的时候销毁Session,使它不再占用服务器内存。前面说了服务器并不管客户端是否依然存在,因而它也无法确定客户端什么时间不再使用它,但是如果在客户端不再用的时候不及时销毁Session的话,服务器很快就会内存不足。为了解决这个问题,给Session加了一个生命周期,当服务器发现Session超过了它的生命周期,就会释放该Session所占用的内存空间。

10、Session和cookie的区别?

1、session是存储在服务器端,cookie是存储在客户端的,所以安全来讲session的安全性要比cookie高,然后我们获取session里的信息是通过存放在会话cookie里的sessionid获取的。
2、由于session是存放在服务器的内存中,所以session里的东西不断增加会造成服务器的负担,所以会把很重要的信息存储在session中,而把一些次要东西存储在客户端的cookie里,然后cookie确切的说分为两大类分为会话cookie和持久化cookie。
3、会话cookie是存放在客户端浏览器的内存中,他的生命周期和浏览器是一致的,浏览器关了会话cookie也就消失了,然而持久化cookie是存放在客户端硬盘中,而持久化cookie的生命周期就是我们在设置cookie时候设置的那个保存时间;sessio是在服务器关闭的时候,或者是sessio过期,再或者调用了invalidate()的或者是我们想要session中的某一条数据消失调用session.removeAttribute()方法,最后session是通过调用session.getsession来创建,这就是session与cookie的区别。

11、抽象类与接口的区别?

抽象类和接口都不能够实例化,但可以定义抽象类和接口类型的引用。一个类如果继承了某个抽象类或者实现了某个接口都需要对其中的抽象方法全部进行实现,否则该类仍然需要被声明为抽象类。接口比抽象类更加抽象,因为抽象类中可以定义构造器,可以有抽象方法和具体方法,而接口中不能定义构造器而且其中的方法全部都是抽象方法。抽象类中的成员可以是private、默认、protected、public的,而接口中的成员全都是public的。抽象类中可以定义成员变量,而接口中定义的成员变量实际上都是常量。有抽象方法的类必须被声明为抽象类,而抽象类未必要有抽象方法。

12、数据库的三范式?

    1.所有字段值都是不可分解的原子值;
    2.一个表中只能保存一种数据,不可以把多种数据保存在同一张数据库表中;
    3.每一列数据都和主键直接相关,而不能间接相关;

13、什么是事务?

事务是应用程序中一系列严密的操作,所有操作必须成功完成,否则在每个操作中所作的所有更改都会被撤消。也就是事务具有原子性,一个事务中的一系列的操作要么全部成功,要么一个都不做。
事务的结束有两种,当事务中的所有步骤全部成功执行时,事务提交。如果其中一个步骤失败,将发生回滚操作,撤消之前到事务开始时的所有操作。

Spring中有2种事务管理方式:
    Spring支持编程式事务管理和声明式事务管理两种方式。
    1.编程式事务管理使用TransactionTemplate或者直接使用底层的PlatformTransactionManager。对于编程式事务管理,spring推荐使用TransactionTemplate。
    2.声明式事务管理建立在AOP之上的。其本质是对方法前后进行拦截,然后在目标方法开始之前创建或者加入一个事务,在执行完目标方法之后根据执行情况提交或者回滚事务。声明式事务最大的优点就是不需要通过编程的方式管理事务,这样就不需要在业务逻辑代码中掺杂事务管理的代码,只需在配置文件中做相关的事务规则声明(或通过基于@Transactional注解的方式),便可以将事务规则应用到业务逻辑中。

14、事务在什么情况下使用?

对数据库的数据进行批量或连表操作时,为了保证数据的一致性和正确性,我们需要添加事务管理机制进行管理。当对数据库的数据进行操作失败时,事务管理可以很好保证所有的数据回滚到原来的数据,如果操作成功,则保证所有需要更新的数据持久化。

15、什么是线程?线程的实现方式有几种?

一、什么是线程?
线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源。
二、线程的实现方式有几种?
1.继承Thread类,重写run方法
2.实现Runnable接口,重写run方法,实现Runnable接口的实现类的实例对象作为Thread构造函数的target
3.通过Callable和FutureTask创建线程
4.通过线程池创建线程
详情请见:多线程的实现方式

16、MySql的索引是什么?有什么用?

索引用于快速找出在某个列中有一特定值的行,不使用索引,MySQL必须从第一条记录开始读完整个表,直到找出相关的行,表越大,查询数据所花费的时间就越多,如果表中查询的列有一个索引,MySQL能够快速到达一个位置去搜索数据文件,而不必查看所有数据,那么将会节省很大一部分时间。
优点:
   1、所有的MySql列类型(字段类型)都可以被索引,也就是可以给任意字段设置索引
   2、大大加快数据的查询速度.
缺点:
   1、创建索引和维护索引要耗费时间,并且随着数据量的增加所耗费的时间也会增加
   2、索引也需要占空间,我们知道数据表中的数据也会有最大上线设置的,如果我们有大量的索引,索引文件可能会比数据文件更快达到上线值
   3、当对表中的数据进行增加、删除、修改时,索引也需要动态的维护,降低了数据的维护速度。
使用原则:
  通过上面说的优点和缺点,我们应该可以知道,并不是每个字段度设置索引就好,也不是索引越多越好,而是需要自己合理的使用。
  1、对经常更新的表就避免对其进行过多的索引,对经常用于查询的字段应该创建索引,
  2、数据量小的表最好不要使用索引,因为由于数据较少,可能查询全部数据花费的时间比遍历索引的时间还要短,索引就可能不会产生优化效果。
  3、在一同值少的列上(字段上)不要建立索引,比如在学生表的”性别”字段上只有男,女两个不同值。相反的,在一个字段上不同值较多可是建立索引。

17、Ajax的请求方式?

四种请求方式:Get、POST、PUT、DELETE
详情请见:Ajax常见请求方式详解(增删改查)

18、jQuery的几种选择器?

    1、标签选择器:$("标签名")
    2、#id选择器:$("#id名")
    3、.class选择器:$(".class名")
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值