
面试题
小小志秩
Think Twice,Code Once.
展开
-
JSP和Servlet有哪些相同点和不同点
JSP是Servlet技术的扩展,所有的jsp文件都会被翻译为一个继承HttpServlet的类。也就是jsp最终也是一个Servlet.这个Servlet对外提供服务。Servlet和JSP最主要的不同点在于JSP侧重于视图,Servlet主要用于控制逻辑。Servlet如果要实现html的功能,必须使用Writer输出对应的html,比较麻烦。而JSP的情况是Java和HTML可以组合成...原创 2019-05-17 00:38:35 · 284 阅读 · 0 评论 -
悲观锁和乐观锁的区别,怎么实现
悲观锁每次拿数据都以为别人会修改,所以每次拿数据时都会上锁。实现:开启事务,启用锁机制乐观锁每次拿数据时候都认为别人不会修改,所以不会上锁,但是在更新数据时候会判断在此期间是否有人更新过。实现:1.使用版本号2.使用时间戳...原创 2019-05-08 21:42:16 · 5801 阅读 · 0 评论 -
事务的特性和隔离级别
事务特性原子性:要么发生要么不发生一致性:失误前后数据必须保证完整性隔离性:多用户并发访问事务互不干扰持久性:事务一旦被提交对数据的改变是永久的,即便发生故障也如此隔离级别脏读:B事务读取到了A事务尚未提交的数据 ------ 要求B事务要读取A事 务提交的数据不可重复读:一个事务中 两次读取的数据的内容不一致 ----- 要求的是一个事务中多次读取时数据是一致的 —...原创 2019-05-08 21:41:25 · 91 阅读 · 0 评论 -
git,svn区别
Git是分布式的,而Svn不是分布的。Git下载下来后,在OffLine状态下可以看到所有的Log,SVN不可以。SVN的特点是简单,只是需要一个放代码的地方时用是OK的,Git的特点版本控制可以不依赖网络做任何事情,对分支和合并有更好的支持。...原创 2019-04-14 22:01:21 · 132 阅读 · 0 评论 -
说说http,https协议
HTTP是超文本协议,默认端口是80,以明文方式传输。HTTPS是HTTP协议的安全版,安全基础是SSL,以密文方式传输。原创 2019-04-14 21:56:16 · 696 阅读 · 0 评论 -
接口有什么用
接口是一种规范,在这里举两个例子接口就比如KFC,你一听KFC就知道是卖炸鸡薯条的,他可以有不同的分店,也可以有自己的创新食品(多态),但是招牌炸鸡、鸡肉卷、全家桶什么的肯定会有,你不用进店看菜单就知道他有,但如果不叫KFC换成炸鸡店你也可以吃到炸鸡,但是你不进店看菜单你不知道他具体都卖的有哪些食品,这就是接口的好处比如电插孔,多是两孔和三孔的那种,如果没有这种规范那每家电器公司都来做一种...原创 2019-04-14 21:54:04 · 152 阅读 · 0 评论 -
java的多态表现在哪里
多态是同一个行为具有多个不同表现形式或形态的能力。多态就是同一个接口,使用不同的实例而执行不同操作。比如同一个打印机,可以打印黑白的纸张也可以打印彩色的,同样是人,却有黑人白人之分。...原创 2019-04-14 21:52:33 · 2664 阅读 · 0 评论 -
springmvc的核心是什么,请求的流程是怎么处理的,控制反转怎么实现的
AOP切面编程和IOC控制反转是核心。流程:用户发送请求给服务器。url:user.do—>Dispatchservlet处理–>DispatchServlet通过HandleMapping调用这个url对应的Controller,Controller执行完毕后,如果返回字符串,则ViewResolver将字符串转化成相应的视图对象;如果返回ModelAndView对象,该对象本...原创 2019-04-14 21:51:31 · 1385 阅读 · 0 评论 -
数组在内存中如何分配
当一个对象使用new关键字创建的时候,会在堆上分配内存空间,然后才返回到对象的引用。这对数组来说也是一样的,因为数组也是一个对象,简单的值类型的数组,每个数组成员是一个引用(指针),引用到栈上的空间。...原创 2019-04-14 21:39:25 · 2465 阅读 · 0 评论 -
String,StringBuffer和StringBuilder的区别
运行速度:StringBuilder > StringBuffer > StringString最慢的原因:String为字符串常量,而StringBuilder和StringBuffer均为字符串变量,即String对象一旦创建之后该对象是不可更改的,但后两者的对象是变量,是可以更改的。String:适用于少量的字符串操作的情况。StringBuilder:适用于单线程下在字...原创 2019-04-14 21:33:40 · 135 阅读 · 0 评论 -
SpringCloud都有哪些组件
Spring Cloud为微服务架构开发涉及的配置管理,服务治理,熔断机制,智能路由,微代理,控制总线,一次性token,全局一致性锁,leader选举,分布式session,集群状态管理等操作提供了一种简单的开发方式。Spring Cloud Config:配置管理工具,支持使用Git存储配置内容,支持应用配置的外部化存储,支持客户端配置信息刷新、加解密配置内容等。Spring Cloud...原创 2019-04-14 21:31:07 · 2148 阅读 · 0 评论 -
nosql相关(主要是redis)
redis和memcache的区别Redis和Memcache都是将数据存放在内存中,都是内存数据库。不过memcache还可用于缓存其他东西,例如图片、视频等等。Redis不仅仅支持简单的k/v类型的数据,同时还提供list,set,hash等数据结构的存储。虚拟内存–Redis当物理内存用完时,可以将一些很久没用到的value 交换到磁盘。过期策略–memcache在set时就指定,...原创 2019-05-08 21:44:21 · 109 阅读 · 0 评论 -
redis是如何持久化的
RDB原理是将Reids在内存中的数据库记录定时dump到磁盘上的RDB持久化优点是对于灾难恢复而言,rdb可以很轻松的将一个单独的文件转移到其他存储介质上缺点是如果出现宕机,未来得及存入磁盘的数据将会丢失。AOF原理是将Reids的操作日志以追加的方式写入文件优点是能更大程度的保证记录的完整性缺点是对于相同数量的数据集而言,AOF文件通常要大于RDB文件。RDB 在恢复大数据集时的...原创 2019-05-08 21:46:07 · 100 阅读 · 0 评论 -
redis的淘汰策略
volatile-lru:从已设置过期时间的数据集(server.db[i].expires)中挑选最近最少使用的数据淘汰。volatile-ttl:从已设置过期时间的数据集(server.db[i].expires)中挑选将要过期的数据淘汰。volatile-random:从已设置过期时间的数据集(server.db[i].expires)中任意选择数据淘汰。allkeys-lru:从数...原创 2019-05-08 21:47:16 · 113 阅读 · 0 评论 -
Servlet API中forward() 与redirect()的区别
forward是服务器端发送请求,我们一般称为转发,可以在后台进行带参转发请求。redirect被我们成为重定向,也就是说redirect会重新发送请求,是在客户端的跳转。forward转发请求时浏览器的地址不会改变,redirect重定向会发生改变。Forward是一次请求中完成。而redirect是重新发起请求。Forward是在服务器端完成,而不用客户端重新发起请求,效率较高。...原创 2019-05-17 00:30:41 · 284 阅读 · 0 评论 -
servlet是什么以及servlet的生命周期
servlet,全称java servlet,是使用java语言编写的服务器端的程序,在httpservlet中,重写doget和dopost方法,便于交互式的浏览和修改数据,生成动态的web内容。它的生命周期可以这样去看,启动一个项目时,就会加载servlet的字节码文件,然后对该servlet进行实例化,调用servlet的init方法完成初始化,当页面上用户点击按钮发送请求时,servl...原创 2019-05-17 00:27:41 · 474 阅读 · 0 评论 -
http get和post请求的区别
GET和POST都是HTTP请求的方式,get一般用于资源信息的获取,post一般用于资源信息的更新操作。主要区别在于Get请求提交的数据会在地址栏显示出来,而post请求不会再地址栏显示出来。get请求提交的数据会附着在URL之后,用?分割开来,多个数据传参的话使用&连接符,这个存在的问题就是传参的数据量会受到地址栏长度的限制,而且数据暴露在地址栏,很不安全。POST请求提交的数据会...原创 2019-05-17 00:20:25 · 117 阅读 · 0 评论 -
什么是设计模式?常用的设计模式有哪些?
设计模式就是经由无数前人的实践,在设计过程中能够反复使用、解决特定问题的设计方法。常用的设计模式有单例模式(饿汉模式、懒汉模式、枚举模式)、工厂模式、装饰模式、代理模式、适配器模式等等。...原创 2019-05-12 23:03:54 · 1730 阅读 · 0 评论 -
线程池的作用
规定线程数量,防止系统因为运行的线程过多导致崩溃或运行缓慢。节约资源,不用每次都进行创建和销毁,响应速度更快,连接池也是一样的。原创 2019-05-12 23:01:09 · 139 阅读 · 0 评论 -
简单了解线程并发库
JDK5中增加了Doug Lea的并发库,这一引进给Java线程的管理和使用提供了强大的便利性。 java.util.current包中提供了对线程优化、管理的各项操作,使得线程的使用变得的心应手。该包提供了线程的运行,线程池的创建,线程生命周期的控制。Java通过Executors提供四个静态方法创建四种线程池,分别为:newCachedThreadPool创建一个可缓存线程池,如果线程池...原创 2019-05-12 22:59:13 · 156 阅读 · 0 评论 -
"=="和equals方法de区别
“==”是用来比较两个变量的值是否相同,这里的变量可以是基本数据类型以及引用类型的变量,如果是基本数据类型的变量,就直接比较具体的值是否相同,如果是引用类型的变量就直接比较对应引用类型的内存的首地址是否相同。equals是用来比较两个变量的内容是否一致,也就是特征是否相同,比如字符串,字符串的比较就是用equals,因为里面的是内容而非值,值是具体的数字,函数等等。...原创 2019-05-11 23:29:49 · 146 阅读 · 0 评论 -
有了基本数据类型,为什么还需要包装类型
之所以需要包装类型,就是因为java是一个面向对象的语言,然而基本数据类型不具备面向对象的特性,当我们把基本数据类型包装成包装类型之后,它就具有了面向对象的特性。而且,在往ArrayList、HashMap这些容器传数据的时候,基本类型int和double是传输不进去的,因为容器都是装object类型的,所以需要转为包装类型进行传输。每一个基本数据类型都有对应的包装类型,这里要解释下装箱和拆箱方...原创 2019-05-11 23:19:39 · 1878 阅读 · 0 评论 -
面向对象的特征有哪些方面
封装:将对象封装为一个高度自治,相对封闭的个体,外界无法改变,只能通过自身进行改变。比如人具有名字这个属性,名字的内容只能通过自身提供方法去更改和操作,别人无法变动。抽象:找出一些事物的共通之处,将其抽取出来作为一个新的类,统一管理规划,只注意相同属性,忽略不同之处。继承:在定义和实现一个类的时候,可以将一个已经存在的类A作为基础,在此基础上进行创建新的类B,这个新创建的类B就会拥有类A的内...原创 2019-05-11 22:52:27 · 116 阅读 · 0 评论 -
Java跨平台原理
因为各大系统之间操作位数以及支持的指令不一致,因此导致程序在不同的系统上需要编写不相同的代码来执行。所以Java便开发出了适用于不同操作系统以及位数的虚拟机(JVM),能够屏蔽掉差异性,提供统一的接口来使用。我们java开发者只用配置相关的运行环境,遵循java规范编写代码,便可在虚拟机上运行程序。...原创 2019-05-11 22:37:18 · 123 阅读 · 0 评论 -
Eureka和zookeeper的区别
分布式服务,使用Eureka更好,AP特性的分布式协调工具,zookeeper因为网络故障就无法返回可用的主机。zookeeper技术更加成熟,资料更多。Eureka。是spring cloud之下一个专门负责微服务服务注册和发现的组件,Eureka就是为了服务发现而设计的。Zookeeper。是用来保证分布式一致性的一个软件。不是为了服务发现注册而设计的,只不过它的特性也可以被二次开发成...原创 2019-04-14 21:27:29 · 225 阅读 · 0 评论 -
ajax怎么解决跨域
使用代理,通过后台操作。JSONP(添加响应头,允许跨域 ),addHeader(‘Access-Control-Allow-Origin:*’);//允许所有来源访问addHeader(‘Access-Control-Allow-Method:POST,GET’);//允许访问的方式在ajax的dataType方式改为“jsonp”...原创 2019-04-14 21:25:59 · 142 阅读 · 0 评论 -
SpringMVC如何接收请求参数
传统方式:req.getParameter()直接在方法形参列表中写形参变量:形参变量名称与请求参数名称一致直接在方法形参列表中写形参变量+@ReqquestParam:形参变量名称与请求参数名称不一致直接使用domain实体类对象接收:实体类对象的属性名称与请求参数名称一致,而且属性必须有set方法、domain实体类必须有无参构造使用RESTFUL风格:@PathVariable(“...原创 2019-04-07 08:47:19 · 554 阅读 · 1 评论 -
你的进销存系统中使用的哪些框架?说一说SpringDataJpa
SpringDataJpa是Spring对JPA的实现封装,用起来更方便,现在目前市面上还是有20%左右的公司在使用SpringDataJpa。核心接口是Respotory、JpaRepository、JpaSpecificationExecutor。SpringDataJpa好处是DAO层只需要写接口继承JpaRepository、JpaSpecificationExecutor接口,不需...原创 2019-04-07 08:39:54 · 469 阅读 · 0 评论 -
请你说一下Spring的bean标签有哪些配置方式
最简单的bean标签,直接在配置文件中写就行了。实例工厂:配置一个工厂bean,再配置一个目标bean,使用factory-bean属性引用工厂bean的id,使用factory-method指定工厂bean对象中的方法名称,这个方法必须返回一个目标bean对象。静态工厂:配置工厂bean,但是要加上factory-method指定工厂bean对象中的方法名称,这个方法必须返回一个目标bea...原创 2019-04-05 21:04:47 · 219 阅读 · 0 评论 -
请你解释一下Spring的控制反转(IOC)和依赖注入(DI)
控制反转(IOC):将创建对象的权力交给Spring来管理,可以通过配置bean标签或者扫描包(@Controller、@Service、@Repository、@Component)的方式,默认使用类名称(首字母小写)作为键,创建的对象作为值存入Spring容器中,而且默认是单例模式,也可以自己指定一个名称作为键。如果是bean标签,可以使用id或者name属性指定如果是注解方式,可以在注...原创 2019-04-05 21:03:31 · 629 阅读 · 0 评论 -
刚才提到了Spring的AOP,请你说一说Spring的AOP
全称是面向切面编程(Aspect Oriented Programming)。AOP本身是由AOP联盟推出的一套接口规范,Spring的AOP实现了AOP联盟规范中的一部分。基于动态代理技术实现:原本有一个接口一个实现类,使用JDK动态代理或者CGLIB动态代理技术生成一个代理类,代理类和被代理类型要求必须实现相同接口,代理类中持有一个被代理类的对象作为属性,在重写接口的方法中调研被代理对象...原创 2019-04-05 21:01:06 · 265 阅读 · 0 评论 -
你刚才提到了SpringMVC,怎么用?底层有什么原理
SpringMVC是对Servlet/JSP技术的封装,之前的a)Servlet用来做项目的时候使用不是太方便【一个Servlet只能处理一种请求】。使用SpringMVC首先要配置中央控制器【DispatcherServlet】(还要加上初始化参数指定SpringMVC的配置文件路径),然后SpringMVC的配置文件中添加配置,通过请求访问路径进行匹配(/xxx/yyy:/xxx匹配Con...原创 2019-04-05 20:59:26 · 210 阅读 · 0 评论 -
谈一谈你对Spring框架的感受
Spring是春天的意思,代表程序员的春天。之所以这样说,是因为Spring有两大核心,控制反转(IOC)和依赖注入(DI),以及面向切面编程(AOP),IOC将创建对象的权利交给spring去完成,DI则在创建对象之后,使用set或者构造方法对其属性进行初始化,AOP则在方法执行前后添加业务逻辑,底层使用动态代理实现,可用来实现权限验证、事务管理日志记录等功能。Spring是一个容器型框架...原创 2019-04-05 20:57:20 · 440 阅读 · 0 评论 -
Java访问数据库有哪些技术
底层代码JDBC。自行封装JDBC工具类。Commons-Dbutils+dbcp(QueryRunner)。SpringJDBC(JdbcTemplate)。JPA(配置文件、domain实体类+注解、EntityManager)。SpringDataJpa(是Spring对JPA的封装,用起来更简单快捷,很可能还要使用文浩对SpringDataJpa的扩展)。Hibernate框...原创 2019-04-05 20:49:52 · 513 阅读 · 0 评论 -
HashMap与HashTable的区别
HashMap的键值对允许空值,HashTable不允许。HashMap线程不安全,HashTable线程安全。HashMap与HashTable都是无序的,但是TreeMap是有序的。项目中通常要用到properties文件,该文件属性是HashTable的子类,但键值对必须为字符串类型,一般用来配置项目的初始化数据,比如数据库连接池、JDBC。...原创 2019-04-05 20:47:44 · 210 阅读 · 0 评论 -
列举你熟悉的几种数据结构
数组。链表。栈。二叉树。键值对。矩阵。原创 2019-04-05 20:44:38 · 1681 阅读 · 0 评论 -
SpringMVC如何传递数据给页面前端
传统方式:三大作用域.setAttribute,在转发到页面,在页面中就可以取出数据,但是这种只支持同步请求Model、ModelMap、ModelAndView:这三个其实就是将数据保存到请求作用域中,转发之后能获取数据,也只支持同步请求@ResponseBody注解将返回的值【对象、数组、集合、Map集合】自动转化为JSON格式字符串,再利用响应对象中的输出流,这种方式是今后用得最多的,...原创 2019-04-07 08:48:29 · 1057 阅读 · 1 评论 -
有没有自己研发过类似SpringMVC的小框架?说一下思路
服务器启动时候【listener配置】i.加载配置文件、扫描包(读取bean的配置信息) ii.获取到完全限定名iii.利用反射创建对象iv.以注解值为键,以创建的对象为值,保存到Map集合中v.将这个Map集合保存到ServletContext作用域中请求访问的时候【所有请求都来到一个中央控制器中,再进行统一分发】i.解析到请求地址中的uriii.解析Map集合中所有保存的对象...原创 2019-04-07 08:49:52 · 284 阅读 · 0 评论 -
SpringDataJpa如何自定义扩展?说一下思路
经过查看SpringDataJpa接口的继承体系,发现SpringDataJpa默认使用SimpleJpaRepository来创建子类对象,并且生成代理对象,最后返回出来我们可以给我们所有的业务Repository抽取一个公共父接口,(BaseRepository+@NoRepositoryBean注解),扩展的方法写在这个父接口中然后写一个父接口的实现类,继承SimpleJpaRepos...原创 2019-04-07 08:51:13 · 343 阅读 · 0 评论 -
servlet生命周期
Servlet 通过调用 init () 方法进行初始化。Servlet 调用 service() 方法来处理客户端的请求。Servlet 通过调用 destroy() 方法终止(结束)。最后,Servlet 是由 JVM 的垃圾回收器进行垃圾回收的。...原创 2019-04-14 20:57:26 · 180 阅读 · 0 评论