Java面试题

Java面试题

目录

JavaSE编程基础

1.JDK,JRE,JVM三者关系

2.面向过程和面向对象的区别

3.Java有哪些基本数据类型

4.什么Java注释

5.Java 有没有 goto

6.final 有什么用?

7.final finally finalize区别

8.面向对象三大特性

9.== 和 equals 的区别是什么

10.String 类的常用方法都有那些?

11.String和StringBuffer、StringBuilder的区别是什么?String为什么是不可变的

12.自动装箱与拆箱

13.int 和 Integer 有什么区别

14.Java 为每个原始类型提供了哪些包装类型:

15ArrayList、LinkedList、Vector 的区别。

JDBC技术

1.什么是JDBC,在上面时候会用到它?

3.execute,executeQuery,executeUpdate的区别是什么?

4.JDBC的PreparedStatement是什么?

5.相对于Statement,PreparedStatement的优点是什么?

6.JDBC的ResultSet是什么?

7.java.util.Datejava.sql.Date有什么区别?

8.说说事务的概念,在JDBC编程中处理事务的步骤。

9.数据库连接池的原理。为什么要使用连接池。

10.什么是JDBC的最佳实践?

Mysql数据库技术

1.数据库MySQL分页时用的语句

2.根据你以往的经验简单叙述一下MYSQL的优化

3.有两张表;请用SQL查询,所有的客户订单日期最新的前五条订单记录。

4.数据库设计中,一对多如何处理?

5.数据库设计中,多对多一般如何处理?

6.MySQL数据库中,常用的数据类型

7.Student学生表(学号,姓名、性别、年龄、组织部门),Course      课程表(编号,课程名称),Sc选课表(学号,课程编号,成绩)

8.表结构说明

9.查询“001”课程比“002”课程成绩高的所有学生的学号;

10.查询平均成绩大于60分的同学的学号和平均成绩;

11.查询所有同学的学号、姓名、选课数、总成绩;

12.查询姓“李”的老师的个数;

13.查询所有课程成绩小于60分的同学的学号、姓名;

14.查询至少有一门课与学号为“1001”的同学所学相同的同学的学号和姓名;

JavaScript语言和jQuery技术

1.JS中如何将页面重定向到另一个页面?

2.undefined,null 和 undeclared 有什么区别?

3.如何在JavaScript中每x秒调用一个函数

4.JS 中 == 和 === 区别是什么?

5.JavaScript内置可用类型

6.jQuery 库中的 $() 是什么?

7.JQuery有几种选择器?

8.jquery中$.get()提交和$.post()提交有区别吗?

9.window.onload()函数和jQuery中的document.ready()有什么区别?

10.什么是CDN?哪些是流行的jQuery CDN?使用CDN有什么好处?

11.如何从CDN加载jQuery?

JSP技术

1.说一说Servlet的生命周期?

2.jsp和servlet的区别、共同点、各自应用的范围?

3.Servlet API中forward()与redirect()的区别?

4.request.getAttribute()和 request.getParameter()有何区别?

5.MVC的各个部分都有那些技术来实现?如何实现?

6.jsp有哪些内置对象?作用分别是什么?

7.说一下 JSP 的 4 种作用域?

8.session 和 cookie 有什么区别?

9.说一下 session 的工作原理?

10.JSP三大指令是什么?

11.http的响应码200,404,302,500表示的含义分别是?

12.如何解决表单提交的中文乱码问题

13.你的项目中使用过哪些JSTL标签?

14.怎么防止重复提交

15.Request对象的主要方法有哪些?

16.JSP中动态include和静态include的区别?

17.什么情况下调用doGet()和doPost()?

18.get和post的区别?

Spring框架

1.什么是spring框架?

2.spring的作用

3.什么是IOC?

4.什么是DI

5.依赖注入的三种实现方式?

SpringMVC框架

1.什么是 SpringMvc?

2.SpringMVC 工作原理?

3.SpringMVC 流程?

4.如果你也用过 struts2.简单介绍下 springMVC 和 struts2 的区别有哪些?

5.@RequestMapping 注解用在类上面有什么作用?

Mybatis框架

1.什么是 MyBatis?

2.Mybatis 动态 sql 是做什么的?都有哪些动态 sql?能简述一下动态 sql 的执行原理不?

3.#{}和${}的区别是什么?

4.为什么说 Mybatis 是半自动 ORM 映射工具?它与全自动的区别在哪里?

5.MyBatis 与 Hibernate 有哪些不同?

6.MyBatis 的好处是什么?

7.什么是 MyBatis 的接口绑定,有什么好处?

8.接口绑定有几种实现方式,分别是怎么实现的?

shiro安全框架

1.shiro可以完成哪些工作?

2.Apache Shiro 的三大核心组件

3.shiro有哪些组件?

4.比较 SpringSecurity 和 Shiro

5.Shiro 的优点

maven

1.什么是Maven?

2.Maven仓库是什么

3.Maven的工程类型有哪些?

4.Maven常用命令有哪些?

Linux系统

1.请写出常用的linux指令

Redis存储系统

1.什么是Redis?

2.Redis的特点什么是?

3.Redis数据类型有哪些?

4.Redis的配置以及持久化方案有几种?

5.Redis中的常用命令哪些?

SpringBoot框架

1.什么是 Spring Boot?

2.Spring Boot 有哪些优点?

3.什么是 JavaConfig?

4.如何重新加载 Spring Boot 上的更改,而无需重新启动服务器?

5.如何在自定义端口上运行 Spring Boot 应用程序?

SpringCloud

 

 

JavaSE编程基础

1.JDK,JRE,JVM三者关系

    1. 、jdk是JAVA程序开发时用的开发工具包,其内部也有JRE运行环境JRE。
    2. 、JRE是JAVA程序运行时需要的运行环境,就是说如果你光是运行JAVA程序而不是去搞开发的话,只安装JRE就      能运行已经存在的JAVA程序了。
    3. 、JDk、JRE内部都包含JAVA虚拟机JVM,JAVA虚拟机内部包含许多应用程序的类的解释器和类加载器等等。

2.面向过程和面向对象的区别

a.、两者都是软件开发思想,先有面向过程,后有面向对象。在大型项目中,针对面向过程的不足推出了面向对象开发思想。      b.、编程思路不同:面向过程以实现功能的函数开发为主,而面向对象要首先抽象出类、属性及其方法,然后通过实例化类、       执行方法来完成功能。

c.、封装性:都具有封装性,但是面向过程是封装的是功能,而面向对象封装的是数据和功能。面向对象具有继承性和多态性,       而面向过程没有继承性和多态 性,所以面向对象优势是明显。

3.Java有哪些基本数据类型

定义:Java语言是强类型语言,对于每一种数据都定义了明确的具体的数据类型,在内存中分配了不同大小的内存空间。        a.数值型:整数类型(byte,short,int,long)

b浮点类型(float,double) c字符型(char)

d布尔型(boolean)

4.什么Java注释

定义:用于解释说明程序的文字分类:

  单行注释:格式: // 注释文字多行注释:格式: /* 注释文字 */

 文档注释:格式:/** 注释文字 */

作用:在程序中,尤其是复杂的程序中,适当地加入注释可以增加程序的可读性,有利于程序的修改、调试和交流。注释的内       容在程序编译的时候会被忽视,不会产生目标代码,注释的部分不会对程序的执行结果产生任何影响。

注意事项:多行和文档注释都不能嵌套使用。

5.Java 有没有 goto

goto 是 Java 中的保留字,在目前版本的 Java 中没有使用。

6.final 有什么用?

用于修饰类、属性和方法;

a被final修饰的类不可以被继承

b被final修饰的方法不可以被重写

c被final修饰的变量不可以被改变,被final修饰不可变的是变量的引用,而不是引用指向的内容,引用指向的内容是可以改变       

7.final finally finalize区别

 

afinal可以修饰类、变量、方法,修饰类表示该类不能被继承、修饰方法表示该方法不能被重写、修饰变量表示该变量是一个       常量不能被重新赋值。

bfinally一般作用在try-catch代码块中,在处理异常的时候,通常我们将一定要执行的代码方法finally代码块中,表示不管是       否出现异常,该代码块都会执行,一般用来存放一些关闭资源的代码。

cfinalize是一个方法,属于Object类的一个方法,而Object类是所有类的父类,该方法一般由垃圾回收器来调用,当我们调       用System.gc() 方法的时候,由垃圾回收器调用finalize(),回收垃圾,一个对象是否可回收的最后判断。

8.面向对象三大特性

a封装:隐藏对象的属性和实现细节,仅对外提供公共访问方式,将变化隔离,便于使用,提高复用性和安全性。

b继承:继承是使用已存在的类的定义作为基础建立新类的技术,新类的定义可以增加新的数据或新的功能,也可以用父类的       功能,但不能选择性地继承父类。通过使用继承可以提高代码复用性。继承是多态的前提。

c所谓多态就是指程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法调用在编程时并不确定,而是在程序       运行期间才确定,即一个引用变量到底会指向哪个类的实例对象,该引用变量发出的方法调用到底是哪个类中实现的方法,必      须在由程序运行期间才能决定。

9.== 和 equals 的区别是什么

== : 它的作用是判断两个对象的地址是不是相等。即,判断两个对象是不是同一个对象。(基本数据类型 == 比较的是值,引用数据类型 == 比较的是内存地址)

equals() : 它的作用也是判断两个对象是否相等。但它一般有两种使用情况:

情况1:类没有覆盖 equals() 方法。则通过 equals() 比较该类的两个对象时,等价于通过“==”比较这两个对象。

情况2:类覆盖了 equals() 方法。一般,我们都覆盖 equals() 方法来两个对象的内容相等;若它们的内容相等,则返回 true (即,认为这两个对象相等)。

10.String 类的常用方法都有那些?

aindexOf():返回指定字符的索引。bcharAt():返回指定索引处的字符。  creplace():字符串替换。

dtrim():去除字符串两端空白。

esplit():分割字符串,返回一个分割后的字符串数组。    fgetBytes():返回字符串的 byte 类型数组。

glength():返回字符串长度。

htoLowerCase():将字符串转成小写字母。    itoUpperCase():将字符串转成大写字符。gsubstring():截取字符串。

kequals():字符串比较。

11.String和StringBuffer、StringBuilder的区别是什么?String为什么是不可变的

a可变性:String类中使用字符数组保存字符串,private  final   char   value[],所以string对象是不可变的。StringBuilder与StringBuffer都继承自AbstractStringBuilder类,在AbstractStringBuilder中也是使用字符数组保存字符串, char[] value,这两种对象都是可变的。

b线程安全性:String中的对象是不可变的,也就可以理解为常量,线程安全。AbstractStringBuilder是StringBuilder与StringBuffer的公共父类,定义了一些字符串的基本操作,如expandCapacity、append、insert、indexOf等公共方法。StringBuffer对方法加了同步锁或者对调用的方法加了同步锁,所以是线程安全的。StringBuilder并没有对方法进行加同步       锁,所以是非线程安全的。

c性能:每次对String 类型进行改变的时候,都会生成一个新的String对象,然后将指针指向新的String 对象。StringBuffer 每次都会对StringBuffer对象本身进行操作,而不是生成新的对象并改变对象引用。相同情况下使用StirngBuilder 相比使用

 

StringBuffer 仅能获得10%~15% 左右的性能提升,但却要冒多线程不安全的风险。

对于三者使用的总结:如果要操作少量的数据用 = String,单线程操作字符串缓冲区 下操作大量数据 = StringBuilder,多线程操作字符串缓冲区 下操作大量数据 = StringBuffer

12.自动装箱与拆箱

a装箱:将基本类型用它们对应的引用类型包装起来;   b拆箱:将包装类型转换为基本数据类型;

13.int 和 Integer 有什么区别

Java      是一个近乎纯洁的面向对象编程语言,但是为了编程的方便还是引入了基本数据类型,但是为了能够将这些基本数据类型当成对象操作,Java 为每一个基本数据类型都引入了对应的包装类型(wrapper class),int 的包装类就是 Integer,Java 5 开始引入了自动装箱/拆箱机制,使得二者可以相互转换。

14.Java 为每个原始类型提供了哪些包装类型:

原始类型: boolean,char,byte,short,int,long,float,double

包装类型:Boolean,Character,Byte,Short,Integer,Long,Float,Double

15ArrayList、LinkedList、Vector 的区别。

ArrayList,Vector 底层是由数组实现,LinkedList 底层是由双线链表实现,从底层的实现可以得出它们的性能问题, ArrayList,Vector 插入速度相对较慢,查询速度相对较快,而LinkedList 插入速度较快,而查询速度较慢。再者由于 Vevtor 使用了线程安全锁,所以ArrayList 的运行效率高于 Vector。

 

JDBC技术

1.什么是JDBC,在上面时候会用到它?

JDBC的全称是Java DataBase Connection,也就是Java数据库连接,我们可以用它来操作关系型数据库。JDBC接口及相关类在java.sql包和javax.sql包里。我们可以用它来连接数据库,执行SQL查询,存储过程,并处理返回的结果。

JDBC接口让Java程序和JDBC驱动实现了松耦合,使得切换不同的数据库变得更加简单。

2.JDBC访问数据库的基本步骤是什么? a、加载(注册)数据库驱动(到JVM) b、建立(获取)数据库连接。

c、创建(获取)数据库操作对象。

d、定义操作的SQL语句。e、执行数据库操作。

f、获取并操作结果集。

g、关闭对象,回收数据库资源(关闭结果集-->关闭数据库操作对象-->关闭连接)

3.execute,executeQuery,executeUpdate的区别是什么?

a、Statement的execute(String  query)方法用来执行任意的SQL查询,如果查询的结果是一个ResultSet,这个方法就返回true。如果结果不是ResultSet,比如insert或者update查询,它就会返回false。

b、Statement的executeQuery(String query)接口用来执行select查询,并且返回ResultSet。即使查询不到记录返回的ResultSet也不会为null。我们通常使用executeQuery来执行查询语句,这样的话如果传进来的是insert或者update语句的        话,它会抛出错误信息为 “executeQuery method can not be used for update”的java.util.SQLException。

 

c、Statement的executeUpdate(String query)方法用来执行insert或者update/delete(DML)语句。

d、只有当你不确定是什么语句的时候才应该使用execute()方法,否则应该使用executeQuery或者executeUpdate方法。

4.JDBC的PreparedStatement是什么?

PreparedStatement对象代表的是一个预编译的SQL语句。用它提供的setter方法可以传入查询的变量。由于PreparedStatement是预编译的,通过它可以将对应的SQL语句高效的执行多次。由于PreparedStatement自动对特殊字符转       义,避免了SQL注入攻击,因此应当尽量的使用它。

5.相对于Statement,PreparedStatement的优点是什么?

a、PreparedStatement有助于防止SQL注入,因为它会自动对特殊字符转义。     b、PreparedStatement可以用来进行动态查询。

c、PreparedStatement执行更快。尤其当你重用它或者使用它的拼量查询接口执行多条语句时。

d、使用PreparedStatement的setter方法更容易写出面向对象的代码,而Statement的话,我们得拼接字符串来生成查询语句。       如果参数太多了,字符串拼接看起来会非常丑陋并且容易出错。

6.JDBC的ResultSet是什么?

在查询数据库后会返回一个ResultSet,它就像是查询结果集的一张数据表。ResultSet对象维护了一个游标,指向当前的数据       行。开始的时候这个游标指向的是第一行。如果调用了ResultSet的next()方法游标会下移一行,如果没有更多的数据了, next()方法会返回false。可以在for循环中用它来遍历数据集。

7.java.util.Datejava.sql.Date有什么区别?

java.util.Date包含日期和时间,而java.sql.Date只包含日期信息,而没有具体的时间信息。如果你想把时间信息存储在数据库       里,可以考虑使用Timestamp或者DateTime字段。

8.说说事务的概念,在JDBC编程中处理事务的步骤。

事务是作为单个逻辑工作单元执行的一系列操作,一个逻辑工作单元必须有四个属性,称为原子性、一致性、隔离性和持久性

(ACID) 属性,只有这样才能成为一个事务 。JDBC处理事务有如下操作:

conn.setAutoComit(false);设置提交方式为手工提交conn.commit()提交事务

conn.rollback(),回滚

提交与回滚只选择一个执行。正常情况下提交事务,如果出现异常,则回滚。

9.数据库连接池的原理。为什么要使用连接池。

数据库连接是一种关键的有限的昂贵的资源,对数据库连接的管理能显著影响到整个应用程序的伸缩性和健壮性,影响到程序       的性能指标。数据库连接池正是针对这个问题提出来的。

数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是重新建立一个;释        放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据库连接遗漏。这项技术能明显提高对       数据库操作的性能。

数据库连接池在初始化时将创建一定数量的数据库连接放到连接池中,这些数据库连接的数量是由最小数据库连接数来设定的。无论这些数据库连接是否被使用,连接池都将一直保证至少拥有这么多的连接数量。连接池的最大数据库连接数量限定了        这个连接池能占有的最大连接数,当应用程序向连接池请求的连接数超过最大连接数量时,这些请求将被加入到等待队列中。

10.什么是JDBC的最佳实践?

a、数据库资源是非常昂贵的,用完了应该尽快关闭它。Connection,   Statement,    ResultSet等JDBC对象都有close方法,调用它就好了。

b、养成在代码中显式关闭掉ResultSet,Statement,Connection的习惯,如果你用的是连接池的话,连接用完后会放回池里,       但是没有关闭的ResultSet和Statement就会造成资源泄漏了。

 

c、在finally块中关闭资源,保证即便出了异常也能正常关闭。

d、尽量使用PreparedStatement而不是Statement,以避免SQL注入,同时还能通过预编译和缓存机制提升执行的效率。         e、数据库隔离级别越高性能越差,确保你的数据库连接设置的隔离级别是最优的。

f、如果在WEB程序中创建数据库连接,最好通过JNDI使用JDBC的数据源,这样可以对连接进行重用。

 

 

Mysql数据库技术

1.数据库MySQL分页时用的语句

使用limit关键字。Select * from 表名 where 条件 limit 开始位置,结束位置。通过动态的改变开始和结束位置的值来实现分页。

2.根据你以往的经验简单叙述一下MYSQL的优化

a、尽可能使用更小的整数类型.(mediumint就比int更合适).   b、尽可能的定义字段为not null,除非这个字段需要null.

c、如果想要清空表的所有记录,建议用truncate table tablename而不是delete from tablename. d、避免出现SELECT * FROM table 语句,要明确查出的字段。

e、小心使用 IN 和 OR,需要注意In集合中的数据量。建议集合中的数据不超过200个。

3.有两张表;请用SQL查询,所有的客户订单日期最新的前五条订单记录。

客户信息表(c CUSTOM)有以下字段:id、name、mobile

客户订单表(C_ORDER)有以下字段:id、custom_id、commodity、count、order _date Select * from c_order order by order_date desc limit 0,5;

4.数据库设计中,一对多如何处理?

数据库外键关系表示的其实是一种一对多关系,所以处理一对多时可以使用外键。

5.数据库设计中,多对多一般如何处理?

引入中间表,把一个多对多表示为两个一对多。

6.MySQL数据库中,常用的数据类型

 

类型名称

说明

int(integer)

整数类型

double

小数类型

decimal(m,d)

指定整数位与小数位长度的小数类型

date

日期类型,格式为yyyy-MM-dd,包含年月日,不包含时分秒

datetime

日期类型,格式为yyyy-MM-dd HH:mm:ss,包含年月日时分秒

timestamp

日期类型,时间戳

varchar(M)

文本类型,M为0~65535之间的整数

7.Student学生表(学号,姓名、性别、年龄、组织部门),Course      课程表(编号,课程名称),Sc选课表(学号,课程编号,成绩)

a、写一个SQL语句,查询选修了计算机原理的学生学号和姓名

select 学号,姓名 from Student where 学号 in(select 学号 from Sc where 课程编号 in(Select 课程编号 from Course where 课程名称 = ‘计算机原理’))

 

b、写一个SQL语句,查询“周星驰”同学选修了的课程名字

select 课程名称 from Course where 编号 in (select Sc.课程编号 from Student,Sc where Student.姓名=’周星驰’ and Student.学号 = Sc.学号)

8.表结构说明

下面是学生表的(Student)的结构说明

 

字段名称

字段解释

字段类型

字段长度

约束

s_id

学号

字符

10

PK

s_name

学生姓名

字符

50

Not null

s_age

学生年龄

数值

3

Not null

s-sex

学生性别

字符(男:1女:0)

1

Not null

下面是教师表(Teacher )的结构说明

 

字段名称

字段解释

字段类型

字段长度

约束

t_id

教师编号

字符

10

PK

t_name

教师名字

字符

50

Not null

下面是课程表(Course)的结构说明

 

字段名称

字段解释

字段类型

字段长度

约束

c_id

课程编号

字符

10

PK

c_name

课程名字

字符

50

Not null

t_id

教师编号

字符

10

Not null

下面是成绩表(SC)的结构说明

 

字段名称

字段解释

字段类型

字段长度

约束

s_id

学号

字符

10

PK

c_id

课程编号

字符

10

Not null

score

成绩

数值

3

Not null

 

9.查询“001”课程比“002”课程成绩高的所有学生的学号;

select a.s_id from (select s_id,score from SC where C_ID='001') a,(select s_id,scorefrom SC where C_ID='002') b where a.score>b.score and a.s_id=b.s_id;

 

10.查询平均成绩大于60分的同学的学号和平均成绩;

select S_ID,avg(score) from sc group by S_ID having avg(score) >60;

 

11.查询所有同学的学号、姓名、选课数、总成绩;

select Student.S_ID,Student.Sname,count(SC.C_ID),sum(score) from Student left Outer join SC on Student.S_ID=SC.S_ID group by Student.S_ID,Sname

 

12.查询姓“李”的老师的个数;

select count(distinct(Tname)) from Teacher where Tname like '李%';

 

13.查询所有课程成绩小于60分的同学的学号、姓名;

select S_ID,Sname from Student where S_ID not in (select S.S_ID from Student AS S,SC where S.S_ID=SC.S_ID and score>60);

14.查询至少有一门课与学号为“1001”的同学所学相同的同学的学号和姓名;

select distinct S_ID,Sname from Student,SC where Student.S_ID=SC.S_ID and SC.C_ID in (select C_ID from SC where S_ID='1001');

 

JavaScript语言和jQuery技术

1.JS中如何将页面重定向到另一个页面?

a、使用 location.href:window.location.href =“https://www.baidu.com/”

b、使用location.replace:window.location.replace(" https://www.baidu.com/;");

2.undefinednull  undeclared 有什么区别?

a、null表示"没有对象",即该处不应该有值,转为数值时为0。典型用法是:作为函数的参数,表示该函数的参数不是对象。作       为对象原型链的终点。

b、undefined表示"缺少值",就是此处应该有一个值,但是还没有定义,转为数值时为NaN。典型用法是:变量被声明了,但没     有赋值时,就等于undefined。调用函数时,应该提供的参数没有提供,该参数等于undefined。对象没有赋值的属性,该属性的       值为undefined。函数没有返回值时,默认返回undefined。

c、undeclared:js语法错误,没有申明直接使用,js无法找到对应的上下文。

3. 如何在JavaScript中每x秒调用一个函数

 

 
  
 
  

 

4.JS 中 == 和 === 区别是什么?

a、对于string,number等基础类型,==和===有区别:不同类型间比较,==之比较“转化成同一类型后的值”看“值”是否相等,===如     果类型不同,其结果就是不等。同类型比较,直接进行“值”比较,两者结果一样。

b、对于Array,Object等高级类型,==和===没有区别,进行“指针地址”比较。

5.JavaScript内置可用类型

string,number,boolean,null和undefined,object,symbol(ES6新语法)

6.jQuery 库中的 $() 是什么?

$() 函数是 jQuery() 函数的别称。$() 函数用于将任何对象包裹成 jQuery 对象,接着你就被允许调用定义在 jQuery 对象上的多个不同方法。你可以将一个选择器字符串传入 $() 函数,它会返回一个包含所有匹配的 DOM 元素数组的 jQuery 对象。

7.JQuery有几种选择器?

a、基本选择器:#id,class,element,*;

b、层次选择器:parent > child,prev + next ,prev ~ siblings

c、基本过滤器选择器::first,:last ,:not ,:even ,:odd ,:eq ,:gt ,:lt

d、表单选择器: :input ,:text ,:password ,:radio ,:checkbox ,:submit 等;

e、表单过滤器选择器::enabled ,:disabled ,:checked ,:selected

8.jquery中$.get()提交和$.post()提交有区别吗?

相同点:都是异步请求的方式来获取服务端的数据; 异同点:

a、请求方式不同:$.get() 方法使用GET方法来进行异步请求的。$.post() 方法使用POST方法来进行异步请求的。

b、参数传递方式不同:get请求会将参数跟在URL后进行传递,而POST请求则是作为HTTP消息的实体内容发送给Web服务器       的,这种传递是对用户不可见的。

c、数据传输大小不同:get方式传输的数据大小不能超过2KB 而POST要大的多

d、安全问题: GET 方式请求的数据会被浏览器缓存起来,因此有安全问题。

 

9.window.onload()函数和jQuery中的document.ready()有什么区别?

a、执行时间:window.onload必须等到页面内包括图片的所有元素加载完毕后才能执行。$(document).ready()是DOM结构绘制      完毕后就执行,不必等到加载完毕。$(document).ready()在 window.onload之前执行。

b、简化写法:window.onload没有简化写法。$(document).ready(function(){})可以简写成$(function(){});

c、出现地方不同:window.onload是js标准,可出现在任何js脚本中。$(document).ready只有在jq库中出现。

10.什么是CDN?哪些是流行的jQuery CDN?使用CDN有什么好处?

内容传送网络或内容分发网络(CDN)是部署在因特网上的多个数据中心的大型分布式服务器系统。CDN的目标是为具有高可       用性和高性能的最终用户提供内容。

有3个流行的jQuery CDN:谷歌,微软jQuery。

使用CDN的优势:它减少了服务器的负载。它节省了带宽。jQuery框架将从这些CDN加载更快。最重要的好处是,如果用户访     问过使用任何这些CDN的jQuery框架的任何站点,它将被缓存

11. 如何从CDN加载jQuery?

 

 
  
 
  

 

 

JSP技术

1.说一说Servlet的生命周期?

Servlet有良好的生存期的定义,包括加载和实例化、初始化、处理请求以及服务结束。这个生存期由javax.servlet.Servlet接口       的init(),service()和destroy方法表达。

Servlet被服务器实例化后,容器运行其init方法,请求到达时运行其service方法,service方法自动派遣运行与请求对应的doXXX方法(doGet,doPost)等,当服务器决定将实例销毁的时候调用其destroy方法。

web容器加载servlet,生命周期开始。通过调用servlet的init()方法进行servlet的初始化。通过调用service()方法实现,根据请       求的不同调用不同的do***()方法。结束服务,web容器调用servlet的destroy()方法。

2.jsp和servlet的区别、共同点、各自应用的范围?

JSP是Servlet技术的扩展,本质上就是Servlet的简易方式。JSP编译后是“类servlet”。Servlet和JSP最主要的不同点在于: Servlet的应用逻辑是在Java文件中,并且完全从表示层中的HTML里分离开来。而JSP的情况是Java和HTML可以组合成一个扩      展名为.jsp的文件。JSP侧重于视图,Servlet主要用于控制逻辑。在struts框架中,JSP位于MVC设计模式的视图层,而Servlet位于       控制层.

3.Servlet API中forward()与redirect()的区别?

a、从地址栏显示来说

 

forward是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器.浏览       器根本不知道服务器发送的内容从哪里来的,所以它的地址栏还是原来的地址.

redirect是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址.所以地址栏显示的是新的URL.所以redirect等于客       户端向服务器端发出两次request,同时也接受两次response。

b、从数据共享来说

forward:转发页面和转发到的页面可以共享request里面的数据.redirect:不能共享数据.redirect不仅可以重定向到当前应用程序        的其他资源,还可以重定向到同一个站点上的其他应用程序中的资源,甚至是使用绝对URL重定向到其他站点的资源.forward方法      只能在同一个Web应用程序内的资源之间转发请求.forward 是服务器内部的一种操作.redirect 是服务器通知客户端,让客户端重新发起请求.所以,你可以说 redirect 是一种间接的请求, 但是你不能说"一个请求是属于forward还是redirect "。

c、从运用地方来说

forward:一般用于用户登陆的时候,根据角色转发到相应的模块. redirect:一般用于用户注销登陆时返回主页面和跳转到其它的网站等.    d、从效率来说

forward:高. redirect:低.

4.request.getAttribute()和 request.getParameter()有何区别?

a、request.getParameter()取得是通过容器的实现来取得通过类似post,get等方式传入的数据。      b、getAttribute是返回对象,getParameter返回字符串

c、getAttribute()一向是和setAttribute()一起使用的,只有先用setAttribute()设置之后,才能够通过getAttribute()来获得

值,它们传递的是Object类型的数据。而且必须在同一个request对象中使用才有效。,而getParameter()是接收表单的get或者  post提交过来的参数

5.MVC的各个部分都有那些技术来实现?如何实现?

MVC是Model-View-Controller的简写。Model代表的是应用的业务逻辑(通过JavaBean,EJB组件实现),View是应用的表示面(由JSP页面产生),Controller是提供应用的处理过程控制(一般是一个Servlet),通过这种设计模型把应用逻辑,       处理过程和显示逻辑分成不同的组件实现。这些组件可以进行交互和重用。

6.jsp有哪些内置对象?作用分别是什么?

a、request 用户端请求,此请求会包含来自GET/POST请求的参数b、response 网页传回用户端的回应

c、pageContext 网页的属性是在这里管理d、session 与请求有关的会话期

e、application 封装服务器运行环境的对象; f、out 输出服务器响应的输出流对象;

g、config Web 应用的配置对象; h、page JSP网页本身

i、exception 封装页面抛出异常的对象。

7.说一下 JSP 的 4 种作用域?

page:代表与一个页面相关的对象和属性。

request:代表与客户端发出的一个请求相关的对象和属性。一个请求可能跨越多个页面,涉及多个 Web 组件;需要在页面显示的临时数据可以置于此作用域。

 

session:代表与某个用户与服务器建立的一次会话相关的对象和属性。跟某个用户相关的数据应该放在用户自己的     session 中。

application:代表与整个 Web 应用程序相关的对象和属性,它实质上是跨越整个 Web 应用程序,包括多个页面、请求和会话的一个全局作用域。

8.session 和 cookie 有什么区别?

a、存储位置不同:session 存储在服务器端;cookie 存储在浏览器端。

b、安全性不同:cookie 安全性一般,在浏览器存储,可以被伪造和修改。

c、容量和个数限制:cookie 有容量限制,每个站点下的 cookie 也有个数限制。

d、存储的多样性:session 可以存储在 Redis 中、数据库中、应用程序中;而 cookie 只能存储在浏览器中。

9.说一下 session 的工作原理?

session 的工作原理是客户端登录完成之后,服务器会创建对应的 session,session 创建完之后,会把 session 的 id 发送给客户端,客户端再存储到浏览器中。这样客户端每次访问服务器时,都会带着 sessionid,服务器拿到 sessionid 之后,在内存找到与之对应的 session 这样就可以正常工作了。

10.JSP三大指令是什么?

Page :指令是针对当前页面的指令,Include :用于指定如何包含另一个页面,Taglib :用于定义和指定自定义标签。

11.http的响应码200,404,302,500表示的含义分别是?

200 - 确定。客户端请求已成功

302 - 临时移动转移,请求的内容已临时移动新的位置

404 - 未找到文件或目录

500 - 服务器内部错误

12.如何解决表单提交的中文乱码问题

a、设置页面编码,若是jsp页面,需编写代码<%@page language="java" pageEncoding="UTF-8" contentType="text/html;charset=UTF-8" %>

若 是 html 页 面 , 在 网 页 头 部 ( < head>< /head> ) 中 添 加 下 面 这 段 代 码 < meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

b 、 将 form 表 单 提 交 方 式 变 为 post 方 式 , 即 添 加 method="post"; ) 在 Servlet 类 中 编 写 代 码request.setCharacterEncoding("UTF-8"),而且必须写在第一行。

c 、 如 果 是 get 请 求 , 在 Servlet 类 中 编 写 代 码 byte [] bytes = str.getBytes("iso-8859-1");String cstr = new String(bytes,"utf-8");

或者直接修改Tomcat服务器配置文件server.xml增加内容:URIEncoding="utf-8"

13.你的项目中使用过哪些JSTL标签?

项目中主要使用了JSTL的核心标签库,包括< c:if>、< c:choose>、< c: when>、< c: otherwise>、< c:forEach>等,主要用于构造循环和分支结构以控制显示逻辑。虽然JSTL标签库提供了core、sql、fmt、xml等标签库,但是实际开发中建议只使     用核心标签库(core),而且最好只使用分支和循环标签并辅以表达式语言(EL),这样才能真正做到数据显示和业务逻辑的分离,这才是最佳实践。

 

14.怎么防止重复提交

a、禁掉提交按钮。表单提交后使用Javascript使提交按钮disable。这种方法防止心急的用户多次点击按钮。但有个问题,如果      客户端把Javascript给禁止掉,这种方法就无效了。

b、Post/Redirect/Get模式。在提交后执行页面重定向,这就是所谓的Post-Redirect-Get      (PRG)模式。简言之,当用户提交了表单后,你去执行一个客户端的重定向,转到提交成功信息页面。这能避免用户按F5导致的重复提交,而其也不会出现浏览器表单重复提交的警告,也能消除按浏览器前进和后退按导致的同样问题。

c、在session中存放一个特殊标志。当表单页面被请求时,生成一个特殊的字符标志串,存在session中,同时放在表单的隐藏      域里。接受处理表单数据时,检查标识字串是否存在,并立即从session中删除它,然后正常处理数据。如果发现表单提交里没      有有效的标志串,这说明表单已经被提交过了,忽略这次提交。

d、在数据库里添加约束。在数据库里添加唯一约束或创建唯一索引,防止出现重复数据。这是最有效的防止重复提交数据的方     法。

15.Request对象的主要方法有哪些?

 

方法

解释

setAttribute(String name,Object)

设置名字为name的request 的参数值

getAttribute(String name)

返回由name指定的属性值

getAttributeNames()

返回request 对象所有属性的名字集合,结果是一个枚举的实例

getCookies()

返回客户端的所有 Cookie 对象,结果是一个Cookie 数组

getCharacterEncoding()

返回请求中的字符编码方式 = getContentLength() :返回请求的 Body的长度

getParameter(String name)

获得客户端传送给服务器端的有 name指定的参数值

getRequestURI()

获取发出请求字符串的客户端地址

getRemoteAddr()

获取客户端的 IP 地址

getRemoteHost()

获取客户端的名字

getServletPath()

获取客户端所请求的脚本文件的路径

getServerPort()

获取服务器的端口号

removeAttribute(String name)

删除请求中的一个属性

16.JSP中动态include和静态include的区别?

a、静态include:语法:<%@ include file="文件名" %>,相当于复制,编辑时将对应的文件包含进来,当内容变化时,不会再一次对其编译,不易维护。

b、动态include:语法:<jsp:include      page="文件名">,能够自动检查被包含文件,当客户端对JSP文件进行请求时,会重新将对应的文件包含进来,进行实时的更新。

17.什么情况下调用doGet()和doPost()?

默认情况是调用doGet()方法,JSP页面中的Form表单的method属性设置为post的时候,调用的为doPost()方法;为get的时候,调用deGet()方法。

 

18.get和post的区别?

a、get是用来从服务器上获取数据,而post是用来向服务器传递数据;

b、get将表单中数据按照variable=value的形式,添加到action所指向的URL后面,并且两者用"?"连接,变量之间用"&"连     接;而post是将表单中的数据放在form的数据体中,按照变量与值对应的方式,传递到action所指定的URL。

c、get是不安全的,因为在传输过程中,数据是被放在请求的URL中;而post的所有操作对用户来说都是不可见的。        d、get传输的数据量小,这主要应为受url长度限制;而post可以传输大量的数据,所有上传文件只能用post提交。       e、get限制form表单的数据集必须为ASCII字符;而post支持整个IS01 0646字符集。

f、get是form表单的默认方法。

 

 

 

Spring框架

1.什么是spring框架?

spring是一个开放源代码的设计层面框架,它解决的是业务逻辑层和其他各层的松耦合问题,是一个分层的javaEE一站式轻量级开       源框架

2.spring的作用

方便解耦,简化开发,AOP编程支持,声明式事务支持,集成Junit更加方便的进行分层测试,方便集成各种优秀框架

3.什么是IOC?

控制反转,把创建对象的权利交给spring

4.什么是DI

属性的依赖注入,spring在通过IOC创建对象的时候,如果对象还有属性,就一并给赋值进去DI是在IOC的基础上进行对象的属性       注入

5.依赖注入的三种实现方式?

构造器注入,Setter方法注入,接口注入

SpringMVC框架

1.什么是 SpringMvc?

SpringMvc 是 spring 的一个模块,基于 MVC 的一个框架,无需中间整合层来整合。

2.SpringMVC 工作原理?

a、客户端发送请求到 DispatcherServlet

b、DispatcherServlet 查询 handlerMapping 找到处理请求的 Controller c、Controller 调用业务逻辑后,返回 ModelAndView

d、DispatcherServlet 查询 ModelAndView,找到指定视图e、视图将结果返回到客户端

3.SpringMVC 流程?

 

a、用户发送请求至前端控制器 DispatcherServlet。

b、DispatcherServlet 收到请求调用 HandlerMapping 处理器映射器。

c、处理器映射器找到具体的处理器(可以根据 xml 配置、注解进行查找),生成处理器对象及处理器拦截器(如果有则生成)一并返回给 DispatcherServlet。

d、DispatcherServlet 调用 HandlerAdapter 处理器适配器。

e、HandlerAdapter 经过适配调用具体的处理器(Controller,也叫后端控制器)。

f、Controller 执行完成返回 ModelAndView。

g. HandlerAdapter 将 controller 执行结果 ModelAndView 返回给 DispatcherServlet。h、DispatcherServlet 将 ModelAndView 传给 ViewReslover 视图解析器。

i、ViewReslover 解析后返回具体 View。

g、DispatcherServlet 根据 View 进行渲染视图(即将模型数据填充至视图中)。

k、DispatcherServlet 响应用户。

4.如果你也用过 struts2.简单介绍下 springMVC 和 struts2 的区别有哪些?

a、springmvc 的入口是一个 servlet 即前端控制器,而 struts2 入口是一个 filter 过虑器。

b、springmvc 是基于方法开发(一个 url 对应一个方法),请求参数传递到方法的形参,可以设计为单例或多例(建议单例),

struts2 是基于类开发,传递参数是通过类的属性,只能设计为多例。

c、Struts 采用值栈存储请求和响应的数据,通过 OGNL 存取数据,springmvc 通过参数解析器是将 request 请求内容解析,并给方法形参赋值,将数据和视图封装成 ModelAndView对象,最后又将 ModelAndView 中的模型数据通过 reques 域传输到页面。Jsp 视图解析器默认使用 jstl。

5.@RequestMapping 注解用在类上面有什么作用?

是一个用来处理请求地址映射的注解,可用于类或方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路       径。

 

Mybatis框架

1.什么是 MyBatis?

MyBatis 是一个可以自定义 SQL、存储过程和高级映射的持久层框架。

2.Mybatis 动态 sql 是做什么的?都有哪些动态 sql?能简述一下动态 sql 的执行原理不?

a、Mybatis 动态 sql 可以让我们在 Xml 映射文件内,以标签的形式编写动态 sql,完成逻辑判断和动态拼接 sql 的功能。b、Mybatis 提 供 了 9 种 动 态 sql 标 签 : trim|where|set|foreach|if|choose|when|otherwise|bind。

c、其执行原理为,使用 OGNL 从 sql 参数对象中计算表达式的值,根据表达式的值动态拼接 sql,以此来完成动态 sql 的功能。

3.#{}和${}的区别是什么?

a、#{}是预编译处理,${}是字符串替换。

 

b、Mybatis 在处理#{}时,会将 sql 中的#{}替换为?号,调用 PreparedStatement 的 set 方法来赋值;

c、Mybatis 在处理${}时,就是把${}替换成变量的值。

d、使用#{}可以有效的防止 SQL 注入,提高系统安全性。

4.为什么说 Mybatis 是半自动 ORM 映射工具?它与全自动的区别在哪里?

Hibernate 属于全自动 ORM 映射工具,使用 Hibernate 查询关联对象或者关联集合对象时,可以根据对象关系模型直接获取,所以它是全自动的。而 Mybatis 在查询关联对象或关联集合对象时,需要手动编写 sql 来完成,所以,称之为半自动ORM 映射工具。

5.MyBatis 与 Hibernate 有哪些不同?

a、Mybatis 和 hibernate 不同,它不完全是一个 ORM 框架,因为 MyBatis 需要程序员自己编写 Sql 语句,不过 mybatis 可以通过 XML 或注解方式灵活配置要运行的 sql 语句,并将java 对象和 sql 语句映射生成最终执行的 sql,最后将 sql 执行的结果再映射生成 java 对象。

b、Mybatis 学习门槛低,简单易学,程序员直接编写原生态 sql,可严格控制 sql 执行性能,灵活度高,非常适合对关系数据模型要求不高的软件开发,例如互联网软件、企业运营类软件等,因为这类软件需求变化频繁,一但需求变化要求成果输出迅速。但是灵活的前提是 mybatis 无法做到数据库无关性,如果需要实现支持多种数据库的软件则需要自定义多套 sql 映射文件,工作量大。

c、Hibernate 对象/关系映射能力强,数据库无关性好,对于关系模型要求高的软件(例如需求固定的定制化软件)如果用hibernate 开发可以节省很多代码,提高效率。但是Hibernate 的缺点是学习门槛高,要精通门槛更高,而且怎么设计 O/R 映射,在性能和对象模型之间如何权衡,以及怎样用好 Hibernate 需要具有很强的经验和能力才行。总之,按照用户的需求在有限的资源环境下只要能做出维护性、扩展性良好的软件架构都是好架构,所以框架只有适合才是最好。

6.MyBatis 的好处是什么?

a、MyBatis 把 sql 语句从 Java 源程序中独立出来,放在单独的 XML 文件中编写,给程序的维护带来了很大便利。

b、MyBatis 封装了底层 JDBC API 的调用细节,并能自动将结果集转换成 Java Bean 对象, 大大简化了 Java 数据库编程的重复工作。

c、因为 MyBatis 需要程序员自己去编写 sql 语句,程序员可以结合数据库自身的特点灵活控制 sql 语句,因此能够实现比 Hibernate 等全自动 orm 框架更高的查询效率,能够完成复杂查询。

7.什么是 MyBatis 的接口绑定,有什么好处?

接口映射就是在 MyBatis 中任意定义接口,然后把接口里面的方法和 SQL 语句绑定,我们直接调用接口方法就可以,这样比起原来了 SqlSession 提供的方法我们可以有更加灵活的选择和设置.

8.接口绑定有几种实现方式,分别是怎么实现的?

接口绑定有两种实现方式,一种是通过注解绑定,就是在接口的方法上面加上@Select@Update 等注解里面包含 Sql 语句来绑定,另外一种就是通过 xml 里面写 SQL 来绑定,在这种情况下,要指定 xml 映射文件里面的 namespace 必须为接口的全路径名.

shiro安全框架

1.shiro可以完成哪些工作?

shiro可以帮助我们完成:认证、授权、加密、会话管理、与Web集成、缓存等

2.Apache Shiro 的三大核心组件

a、Subject :当前用户的操作

b、SecurityManager:用于管理所有的Subject

 

c、Realms:用于进行权限信息的验证

3.shiro有哪些组件?

a、Authentication:身份认证/登录,验证用户是不是拥有相应的身份;

b、Authorization:授权,即权限验证,验证某个已认证的用户是否拥有某个权限;即判断用户是否能做事情,常见的如:验        证某个用户是否拥有某个角色。或者细粒度的验证某个用户对某个资源是否具有某个权限;

c、Session Manager:会话管理,即用户登录后就是一次会话,在没有退出之前,它的所有信息都在会话中;会话可以是普通JavaSE环境的,也可以是如Web环境的;

d、Cryptography:加密,保护数据的安全性,如密码加密存储到数据库,而不是明文存储;       e、Web Support:Web支持,可以非常容易的集成到Web环境;

f、Caching:缓存,比如用户登录后,其用户信息、拥有的角色/权限不必每次去查,这样可以提高效率;

g、Concurrency:shiro支持多线程应用的并发验证,即如在一个线程中开启另一个线程,能把权限自动传播过去;        h、Testing:提供测试支持;

i、Run As:允许一个用户假装为另一个用户(如果他们允许)的身份进行访问;

g、Remember Me:记住我,这个是非常常见的功能,即一次登录后,下次再来的话不用登录了。

4.比较 SpringSecurity 和 Shiro

相比 Spring Security, Shiro 在保持强大功能的同时,使用简单性和灵活性。 SpringSecurity: 即使是一个一个简单的请求, 最少得经过它的 8 个Filter。SpringSecurity 必须在 Spring 的环境下使用。初学 Spring Security,曲线还是较大,需要深入学习其源码和框架, 配置起来也较费力.

5.Shiro 的优点

a、简单的身份认证, 支持多种数据源

b、对角色的简单的授权, 支持细粒度的授权(方法级) c、支持一级缓存,以提升应用程序的性能

d、内置的基于 POJO 企业会话管理, 适用于 Web 以及非 Web 的环境e、非常简单的加密 API

f、不跟任何的框架或者容器捆绑, 可以独立运行

 

 

maven

 

1.什么是Maven?

Maven使用项目对象模型(POM)的概念,可以通过一小段描述信息来管理项目的构建,报告和文档的软件项目管理工具。

Maven 除了以程序构建能力为特色之外,还提供高级项目管理工具。由于 Maven 的缺省构建规则有较高的可重用性,所以常常用两三行 Maven 构建脚本就可以构建简单的项目。由于 Maven 的面向项目的方法,许多 Apache Jakarta 项目发布时使用Maven,而且公司项目采用 Maven 的比例在持续增长。

Maven的出现,解决了开发过程中的jar包升级及依赖的难题。它可以对项目依赖的jar包进行管理,可以让你的项目保持基本的        依赖,排除冗余jar包,并且可以让你非常轻松的对依赖的jar包进行版本升级。而这些仅仅是Maven最基本的功能,它可以在这

 

基础上对项目进行清理、编译、测试、打包、发布等等构建项目的工作。

可以说,Maven是现在Java社区中最强大的项目管理和项目构建工具,而更加值得庆幸的是,这样一个强大的工具,它的使用       也是非常简单的。

现在,JavaEE项目使用的开源软件都可以通过Maven来获取,并且,越来越多的公司也开始使用Maven来管理构建项目了。

2.Maven仓库是什么

Maven仓库是基于简单文件系统存储的,集中化管理Java      API资源(构件)的一个服务。仓库中的任何一个构件都有其唯一的坐标,根据这个坐标可以定义其在仓库中的唯一存储路径。得益于 Maven 的坐标机制,任何 Maven项目使用任何一个构件的方式都是完全相同的,Maven 可以在某个位置统一存储所有的 Maven 项目共享的构件,这个统一的位置就是仓库,项目构建完毕后生成的构件也可以安装或者部署到仓库中,供其它项目使用。

对于Maven来说,仓库分为两类:本地仓库和远程仓库。

3.Maven的工程类型有哪些?

POM工程:POM工程是逻辑工程。用在父级工程或聚合工程中。用来做jar包的版本控制。JAR工程:将会打包成jar用作jar包使用。即常见的本地工程 - Java Project。

WAR工程:将会打包成war,发布在服务器上的工程。如网站或服务。即常见的网络工程 - Dynamic Web Project。war工程默认没有WEB-INF目录及web.xml配置文件,IDE通常会显示工程错误,提供完整工程结构可以解决。

4.Maven常用命令有哪些?

a、install

本地安装, 包含编译,打包,安装到本地仓库编译 - javac

打包 - jar, 将java代码打包为jar文件

安装到本地仓库 - 将打包的jar文件,保存到本地仓库目录中。

b、clean

清除已编译信息。

删除工程中的target目录。 c、compile

只编译。 javac命令

d、deploy

部署。 常见于结合私服使用的命令。相当于是install+上传jar到私服。

包含编译,打包,安装到本地仓库,上传到私服仓库。   e、package

打包。 包含编译,打包两个功能。

 

Linux系统

1.请写出常用的linux指令

a、cd /home 进入 '/ home' 目录' b、cd .. 返回上一级目录

c、cd ../.. 返回上两级目录

 

d、mkdir dir1 创建一个叫做 'dir1' 的目录' e、mkdir dir1 dir2 同时创建两个目录

 

Redis存储系统

1.什么是Redis?

Remote Dictionary Server(Redis)是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value 数据库,并提供多种语言的API。它通常被称为数据结构服务器,因为值(value)可以是 字符串(String), 哈希(Map), 列表(list), 集合(sets) 和 有序集合(sorted sets)等类型。

2.Redis的特点什么是?

a、支持多种数据结构,如 string(字符串)、 list(双向链表)、dict(hash表)、set(集合)、zset(排序set)、hyperloglog(基数估算)

b、支持持久化操作,可以进行aof及rdb数据持久化到磁盘,从而进行数据备份或数据恢复等操作,较好的防止数据丢失的手       段。

c、支持通过Replication进行数据复制,通过master-slave机制,可以实时进行数据的同步复制,支持多级复制和增量复制, master-slave机制是Redis进行HA的重要手段。

d、单进程请求,所有命令串行执行,并发情况下不需要考虑数据一致性问题。

3.Redis数据类型有哪些?

a、String(字符串) b、Hash(hash表) c、List(链表)

d、Set(集合)

e、SortedSet(有序集合zset)

4.Redis的配置以及持久化方案有几种?

a、RDB方式b、AOF方式

5.Redis中的常用命令哪些?

a、hset 存储一个哈希键值对的集合

b、hget获取一个哈希键的值c、hdel 删除一个或多个字段

d、hgetall 获取一个哈希是键值对的集合

e、lpush key value向链表左侧添加f、rpush key value向链表右侧添加g、lpop key 从左边移出一个元素

 

h、rpop key 从右边移出一个元素

i、keys * 返回所有的key 可以加*通配

j、exists key判断string类型一个key是否存在 如果存在返回1 否则返回0

 

 

SpringBoot框架

1.什么是 Spring Boot?

多年来,随着新功能的增加,spring 变得越来越复杂。只需访问 https://spring.io/projects页面,我们就会看到可以在我们的应用程序中使用的所有 Spring 项目的不同功能。如果必须启动一个新的 Spring 项目,我们必须添加构建路径或添加 Maven 依赖关系,配置应用程序服务器,添加 spring 配置。因此,开始一个新的 spring 项目需要很多努力,因为我们现在必须从头开始做所有事情。

Spring Boot 是解决这个问题的方法。Spring Boot 已经建立在现有 spring 框架之上。使用spring 启动,我们避免了之前我们必须做的所有样板代码和配置。因此,Spring Boot 可以帮助我们以最少的工作量,更加健壮地使用现有的 Spring 功能。

2.Spring Boot 有哪些优点?

a、减少开发,测试时间和努力。

b、使用 JavaConfig 有助于避免使用 XML。c、避免大量的 Maven 导入和各种版本冲突。

d、通过提供默认值快速开始开发。没有单独的 Web 服务器需要。这意味着你不再需要启动 Tomcat,Glassfish 或其他任何东西。

e、需要更少的配置 因为没有 web.xml 文件。只需添加用@ Configuration 注释的类,然后添加用@Bean 注释的方法,Spring 将自动加载对象并像以前一样对其进行管理。您甚至可以将@Autowired 添加到 bean 方法中,以使 Spring 自动装入需要的依赖关系中。基于环境的配置 使用这些属性,您可以将您正在使用的环境传递到应用程序:-Dspring.profiles.active =

{enviornment}。在加载主应用程序属性文件后,Spring 将在(application{environment} .properties)中加载后续的应用程序属性文件。

3.什么是 JavaConfig?

Spring JavaConfig 是 Spring 社区的产品,它提供了配置 Spring IoC 容器的纯 Java 方法。因此它有助于避免使用 XML 配置。使用 JavaConfig 的优点在于:面向对象的配置。由于配置被定义为 JavaConfig 中的类,因此用户可以充分利用 Java 中的面向对象功能。一个配置类可以继承另一个,重写它的@Bean 方法等。减少或消除 XML 配置。基于依赖注入原则的外化配置的好处已被证明。但是,许多开发人员不希望在 XML 和 Java 之间来回切换。JavaConfig 为开发人员提供了一种纯 Java 方法来配置与 XML 配置概念相似的 Spring 容器。从技术角度来讲,只使用 JavaConfig 配置类来配置容器是可行的,但实际上很多人认为将 JavaConfig 与 XML 混合匹配是理想的。型安全和重构友好。JavaConfig 提供了一种类型安全的方法来配置 Spring 容

器。由于Java 5.0 对泛型的支持,现在可以按类型而不是按名称检索 bean,不需要任何强制转换或基于字符串的查找。

4.如何重新加载 Spring Boot 上的更改,而无需重新启动服务器?

这可以使用 DEV 工具来实现。通过这种依赖关系,您可以节省任何更改,嵌入式 tomcat将重新启动。Spring Boot 有一个开发工具(DevTools)模块,它有助于提高开发人员的生产力。Java      开发人员面临的一个主要挑战是将文件更改自动部署到服务器并自动重启服务器。开发人员可以重新加载 Spring Boot 上的更改,而无需重新启动服务器。这将消除每次手动部署更改的需要。Spring Boot 在发布它的第一个版本时没有这个功能。这是开发人员最需要的功能。DevTools 模块完全满足开发人员的需求。该模块将在生产环境中被禁用。它还提供 H2 数据库控制台以更好地测试应用程序。

 

 

1

 

<dependency>

2

<groupId>org.springframework.boot</groupId>

3

<artifactId>spring-boot-devtools</artifactId>

 

4

<optional>true</optional>

5

</dependency>

 

5.如何在自定义端口上运行 Spring Boot 应用程序?

为了在自定义端口上运行 Spring Boot 应用程序,您可以在 application.properties 中指定端口。

 

 
  

 

 

  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Taboos_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值