JAVA小白面试题总结(持续更新)

  1. jdk和jre的区别
    (1). jdk:全称Java Development Kit,java开发的类库,工具包
    (2). jre:全称Java Runtime Environment,java运行时的环境,包含了java虚拟机,java基础类库
  2. 离开了jdk 只有jre可以运行项目吗
    JRE只有java,即解释器,而解释器只能对字节码解释执行。所以只安装了JRE,是不能执行java程序的。需先用jdk的javac编译器对源代码编译为class文件才行。
    摘自知乎:https://zhuanlan.zhihu.com/p/62504600
    所以如果java文件没有被编译成class文件则需要jdk 如果已经编译成了jdk则不需要
  3. final关键字
    final意为不可变的,常与static一同使用,一般分为四个场景
    (1). 修饰变量(成员变量,局部变量):只能被赋值一次且无法被改变
    (2). 修饰方法:表示方法不可被重写
    (3). 修饰方法参数:表示在变量的生存期中它的值不能被改变
    (3). 修饰类:表示类不可被继承
  4. Map和list的区别
    (1). List中的对象按照索引位置排序,可以有重复对象,允许按照对象在集合中的索引位置检索对象
    (2). Map中的每一个元素包含一个键对象和值对象,它们成对出现。键对象不能重复,值对象可以重复。
    也就是说区别是,list有索引所以数据可以重复,map是k-v键值对,key是键所以不能重复但value可以
  5. hashMap和hashTable的区别
    (1). HashMap是非线程安全的,只是用于单线程环境下,多线程环境下可以采用concurrent并发包下的concurrentHashMap。
    Hashtable也是JDK1.0引入的类,是线程安全的,能用于多线程环境中。
  6. java 字符串两端有空格如何去重
//去除首位空格
str.trim()
//去除所有空格
str.replaceAll(" ","")
//去除空白字符不限于空格
 str.replaceAll("\\s*","")
  1. 为什么要序列化
    对象的序列化技术,实现的手段是通过Object流,是将对象转换为容易传输的格式的过程
    若在网络上对象需要传输,那么就需要序列化,保证了对象的传输性和一致性,传递方序列化(序列化成流) 接收方反序列化(从该流重新构造对象)
  2. 什么是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成功登入

  1. 如何防止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里字符串使用#{}非字符串使用${}

  1. RabbitMQ,ActiveMQ和Kafka的区别
    ActiveMQ:底层是用java写的对JMS支持最好,采用多线程并发,资源消耗比较大
    Kafka:为大数据开发的有着集群,负载均衡的支持
    RabbitMQ:受众广,AMQP协议,支持多种场景
  2. JMS跟ActiveMQ的关系
    JMS:全称Java Message Service 是JavaEE的消息规范
    ActiveMQ是JMS的一种落地实现
  3. 集合
    1. Set:
      TreeSet:支持有序性操作。但是查找效率不高
      HashSet:支持快速查找,但不支持有序性操作。
      LinkedHashSet:具有 HashSet 的查找效率,并且内部使用双向链表维护元素的插入顺序。
    2. List:
      ArrayList:基于动态数组实现,支持随机访问。
      Vector:和 ArrayList 类似,但它是线程安全的。
      LinkedList:基于双向链表实现,只能顺序访问,但是可以快速地在链表中间插入和删除元素。
  4. spring中最重要的两个功能是什么
    IOC:依赖注入,控制反转
    AOP: 面向切面编程
  5. 如何使用线程
    1. 实现runable接口中的run方法
    2. 实现 Callable 接口
    3. 继承 Thread 类

你可能感兴趣的:(JAVA小白面试题总结(持续更新))