- jdk和jre的区别
(1). jdk:全称Java Development Kit,java开发的类库,工具包
(2). jre:全称Java Runtime Environment,java运行时的环境,包含了java虚拟机,java基础类库 - 离开了jdk 只有jre可以运行项目吗
JRE只有java,即解释器,而解释器只能对字节码解释执行。所以只安装了JRE,是不能执行java程序的。需先用jdk的javac编译器对源代码编译为class文件才行。
摘自知乎:https://zhuanlan.zhihu.com/p/62504600
所以如果java文件没有被编译成class文件则需要jdk 如果已经编译成了jdk则不需要 - final关键字
final意为不可变的,常与static一同使用,一般分为四个场景
(1). 修饰变量(成员变量,局部变量):只能被赋值一次且无法被改变
(2). 修饰方法:表示方法不可被重写
(3). 修饰方法参数:表示在变量的生存期中它的值不能被改变
(3). 修饰类:表示类不可被继承 - Map和list的区别
(1). List中的对象按照索引位置排序,可以有重复对象,允许按照对象在集合中的索引位置检索对象
(2). Map中的每一个元素包含一个键对象和值对象,它们成对出现。键对象不能重复,值对象可以重复。
也就是说区别是,list有索引所以数据可以重复,map是k-v键值对,key是键所以不能重复但value可以 - hashMap和hashTable的区别
(1). HashMap是非线程安全的,只是用于单线程环境下,多线程环境下可以采用concurrent并发包下的concurrentHashMap。
Hashtable也是JDK1.0引入的类,是线程安全的,能用于多线程环境中。 - java 字符串两端有空格如何去重
//去除首位空格
str.trim()
//去除所有空格
str.replaceAll(" ","")
//去除空白字符不限于空格
str.replaceAll("\s*","")
- 为什么要序列化
对象的序列化技术,实现的手段是通过Object流,是将对象转换为容易传输的格式的过程
若在网络上对象需要传输,那么就需要序列化,保证了对象的传输性和一致性,传递方序列化(序列化成流) 接收方反序列化(从该流重新构造对象) - 什么是sql注入
SQL注入(SQLi)是一种注入攻击,可以执行恶意SQL语句。它通过将任意SQL代码插入数据库查询,使攻击者能够完全控制Web应用程序后面的数据库服务器
样例
select * from student where name='' and pwd=''
这时pwd这一项填入
’ OR ‘1’='1后
select * from student where name='' and pwd='' OR '1'='1'
这样密码就永远是true成功登入
- 如何防止sql注入
(1). 在原生开发里可以用PreparedStatement来接sql
conn =ForumUtil.getConnection();
String sql = "select * from student where name='' and pwd=''";
ps =conn.prepareStatement(sql);
这中方法就是先把sql语句来编译好 先确定了sql结构 ,就不会出现注入问题
在mybatis里Like关键字也要使用CONCAT来拼接,做到防止sql注入
report_time LIKE CONCAT(#{nowTime},'%')
mybatis里字符串使用#{}非字符串使用${}
- RabbitMQ,ActiveMQ和Kafka的区别
ActiveMQ:底层是用java写的对JMS支持最好,采用多线程并发,资源消耗比较大
Kafka:为大数据开发的有着集群,负载均衡的支持
RabbitMQ:受众广,AMQP协议,支持多种场景 - JMS跟ActiveMQ的关系
JMS:全称Java Message Service 是JavaEE的消息规范
ActiveMQ是JMS的一种落地实现 - 集合
- Set:
TreeSet:支持有序性操作。但是查找效率不高
HashSet:支持快速查找,但不支持有序性操作。
LinkedHashSet:具有 HashSet 的查找效率,并且内部使用双向链表维护元素的插入顺序。 - List:
ArrayList:基于动态数组实现,支持随机访问。
Vector:和 ArrayList 类似,但它是线程安全的。
LinkedList:基于双向链表实现,只能顺序访问,但是可以快速地在链表中间插入和删除元素。
- Set:
- spring中最重要的两个功能是什么
IOC:依赖注入,控制反转
AOP: 面向切面编程 - 如何使用线程
1. 实现runable接口中的run方法
2. 实现 Callable 接口
3. 继承 Thread 类 -
什么是IOC?
控制反转(IOC)就是把原先我们代码里面需要实现的对象创建、依赖的代码,反转给容器来帮忙实现。那么必然的我们需要创建一个容器,同时需要一种描述来让容器知道需要创建的对象与对象的关系。这个描述最具体表现就是我们可配置的文件。IOC容器最主要是完成了对象的创建和依赖的管理注入等。 -
Spring AOP
AOP即面向切面编程。可以说是OOP(Object Oriented Programming,面向对象编程)的补充和完善。OOP引入封装、继承、多态等概念来建立一种对象层次结构,用于模拟公共行为的一个集合。AOP技术利用一种称为"横切"的技术,剖解开封装的对象内部,并将那些影响了多个类的公共行为封装到一个可重用模块,并将其命名为"Aspect",即切面。所谓"切面",简单说就是那些与业务无关,却为业务模块所共同调用的逻辑或责任封装起来,便于减少系统的重复代码,降低模块之间的耦合度,并有利于未来的可操作性和可维护性。AOP把软件系统分为两个部分:核心关注点和横切关注点。业务处理的主要流程是核心关注点,与之关系不大的部分是横切关注点。横切关注点的一个特点是,他们经常发生在核心关注点的多处,而各处基本相似,比如权限认证、日志、事物。AOP的作用在于分离系统中的各种关注点,将核心关注点和横切关注点分离开来。
-
Java设计模式
1、工厂模式:客户类和工厂类分开。消费者任何时候需要某种产品,只需向工厂请求即可。消费者无须修改就可以接纳新产品。缺点是当产品修改时,工厂类也要做相应的修改。如:如何创建及如何向客户端提供。
2,单例模式
确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例单例模式。单例模式只应在有真正的“单一实例”的需求时才可使用。3,适配器模式
适配器模式:把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口原因不匹配而无法一起工作的两个类能够一起工作。适配类可以根据参数返还一个合适的实例给客户端。4,代理模式
代理模式:代理模式给某一个对象提供一个代理对象,并由代理对象控制对源对象的引用。代理就是一个人或一个机构代表另一个人或者一个机构采取行动。某些 情况下,客户不想或者不能够直接引用一个对象,代理对象可以在客户和目标对象直接起到中介的作用。客户端分辨不出代理主题对象与真实主题对象。代理模式可 以并不知道真正的被代理对象,而仅仅持有一个被代理对象的接口,这时候代理对象不能够创建被代理对象,被代理对象必须有系统的其他角色代为创建并传入。