1.什么是IOC

把对象的生命周期交给Spring框架来管理,它通过反射机制,在实例化一个类的时候,它会通过反射调用set方法将事先保存在底层HashMap中的类属性注入到类中,从而实现了控制反转

2.什么是AOP

AOP是基于IOC控制反转与AOP面向对象编程的补充和增强,它最主要的技术就是它的横切技术,就是从封装对象的内部解剖开来,把那些影响到多个类的行为封装到一个可重用模块 (Aspect)来使用,这样一方面减少了系统当中的重复代码,并高度解耦,AOP最主要的技术就是动态代理与静态织入。

 1) 什么是动态代理

它利用消息截取的方式,对截取到的消息进行装饰,从而替代原有对象行为的执行,它直接的在运行时运用反射机制来动态的创建代理对象,动态代理分为JDK动态代理与CGLIB动态代理。

(1)JDK动态代理

JDK动态代理是默认的代理方式,它需要一个实现接口,并且它创建对象的速度远大于CGLIB

(2)CGLIB动态代理

CGLIB代理它可以在没有接口或者有接口时都可以使用,但是因为它创建对象是直接通过操作字节码文件生成的代理类,所以它创建对象的速度远小于JDK代理,其次它的执行速度会略微的比JDK快,更加的适合单例模式,但会出现一个问题,如果操作过多,就会永久堆满,就会OutOfMemry异常,所以Spring是默认用JDK动态代理,只有没有接口的时候才使用CGLIB代理

2)什么是静态织入

它是引入特定的可重用模块,在编译期间就织入有关的可重用代码,给每个业务增强提供了一个代理类,它是在程序运行前代理类的字节码文件(.class后缀)就已经存在,再由代理类来创建对象。

3.GC垃圾回收机制

1)复制回收法:

扫描区域内的所有的对象,将所有的可达对象复制到另一个区域保存起来,再将正在使用的区域内存全部清空,方便快捷,只需要遍历对象即可,不会有内存化碎片,但是复制对象需要成本。

2)标记清除法:

遍历区域内的所有对象,并且对可达对象进行了标记,再将不可达对象清除,但是它就会产生大量的内存化碎片。

3)标记整理法:

遍历区域内所有可达对象,并对可达对象进行标记,整理到一起,最后清除所有不可达对象,达到GC垃圾回收的目的

4.MyBatis如何防止SQL注入攻击

它最主要的是进行了预编译,首先SQL注入攻击只能在预编译期间的时候有效,于是Mybatis事先将SQL语句发送给数据库,进行预编译生成一个类似与框架一样的固定的SQL语句,其中的具体数据内容它会先用占位符“?”替代,当预编译结束以后才把具体数据重新与占位符替换,从而达到防止了SQL的注入攻击。

5.Session与Cookie的区别

1.Session是在服务器端记录用户的信息确定用户的身份

Cookie是在客户端记录用户的信息确定用户的身份

2.Session是存在服务器端它更加的安全

Cookie它存放在客户端,可以分析存放本地的Cookie进行Cookie欺骗,所以不安全

3.Session是在服务器端所以它会占用服务器的性能

Cookie不会占用服务器性能

4.Session-destory()是直接销毁会话

Cookie可以通过设置它的过期时间来使其过期

5.Session没有存储的数据限制,可以保存更为复杂的数据类型

Cookie单个保存的数据是不能超过4k

6.Session的生命周期是有间隔性的,当Session出现存在的那一刻开始,如果一段时间没有重新访问Session,那么Session就会消失

Cookie它可以预先设置它的生存周期,或者永久的保存在本地文件,如果没有设置它的生命周期,那么Cookie就会在浏览器关闭的时候就一起消失了。

6.消息队列

消息队列是分布式系统的重要组件,主要用于应用的解耦、流量削峰、异步消息等从而实现高可用、高性能,消息队列都有:ActiveMQ、RabbitMQ、ZeroMQ、Kafka、MetaMQ、RocketMQ。

应用解耦:

常规的一个订单访问请求,需要用户发送请求,然后去访问库存,但是如果库存系统出问题,那么用户的订单请求就会直接失败。

于是在请求与库存中间加入消息队列,就是用户下单后,订单系统进行持久化处理,将消息写入消息队列,消息队列就会给用户返回下单成功,后续库存系统通过消息队列获取下单的信息,根据下单的信息进行更新操作,这样就防止了库存出问题后直接返回给用户订单失败,而是把请求给消息队列直接返回下单成功,实现了请求和库存系统的解耦。

流量削峰:

常规的高并发请求会导致流量暴增,应用就会宕掉。

于是我们就在应用前端加入消息队列,用户的请求被服务器接收后,会先将信息传入消息队列,然后具体业务再通过消息队列的信息进行业务处理,如果请求数量高到超过了消息队列的最大长度,就会抛弃用户的请求或者直接跳转页面,做后续处理

异步消息:

常规的数据的写入一般都是串行或者并行,假如流程是用户注册,写入信息、邮箱认证、短信认证,在串行方式下,它就会按顺序的依次执行,全部执行完毕后返回给用户。在并行方式下,用户写入数据后,同时进行后续的认证操作,再返回给用户信息,速度上会比串行方式下快点,但是这两种方式都比较耗时。

于是我们就在用户写入数据之后加入了消息队列,在用户写入数据之后,将信息写入到消息队列后直接返回给用户成功信息,后续用户在进行邮件短信的认证操作。

7.SpringBoot常用注解

@SpringBootApplication启动类注解

  @Configuration配置类注解

        @EnableAutoConfiguration自动配置

        @ComponentScan自动扫描组件

        @Controller将用户请求转发到对应服务接口

        @ResponseBody异步获取数据使用,比如异步获取Json数据会直接返回Json数据

        @RestController是@Controller和@ResponseBody的集合

        @Import导入其他配置类

        @ImportResource加载xml配置文件

        @PathVariable获取URL参数Restful风格接口

  @Service修饰Service层的组件

        @Bean等价于xml的Bean,产生一个Bean交给SPringBoot管理

        @Value注入SpringBoot的配置文件

        @Component组件不好归类时,进行标注

        @AutoWired自动导入依赖的Bean,IOC

8.Redis

首先Redis是单线程的,它通过队列技术将并发访问变成了串行访问,其次Redis的速度快,因为数据存在内存    当中,类似与HashMap,它有丰富的数据类型,String字符串,按照添加顺序保持有序的字符串列表List集合,无序    的字符串集合set集合,已排序的集合sorted set,它还支持事物,操作都是原子性,就是对数据的更新要么都成功    要么都失败,并且支持持久化数据和数据备份,它持久化分为AOF和RDB,RDB就是给Key加了一个时间戳,一段时间    就会快照一次,AOF就是它会记录每次对服务器写的操作,当服务器重启时他就就会重新执行这些命令,支持主从复    制,主机会自动将数据库复制到从机,可以进行读写分离。

9.List、Set、Map

List接口

List是一个继承于collection的接口,它是有序的集合,List集合的每一个元素都有一个索引,从0开始依次往后,它允许出现重复的元素,实现List集合有:ArraysList、LinkedList、Vector、Stack

                ArraysList 它是一个动态的数组,它允许任何的元素插入,包括null,每一个ArraysList都有一个初始容量,并且随着容器中的元素不断增加,容器也随之增加,每次容器进行更新操作都会进行容量检查,快溢出时就会进行扩容。

LinkedList 它是一个双向链表,它除了ArraysList的方法外还提供了get(查询)、remove(移除)、insert(添加)在LinkedList的首尾部。

Set接口

Set也是继承自collection的接口,Set集合是不能有重复数据,可以有null但切只有一个,实现Set的接口有:HashSet、TreeSet、LinkedHashSet、EnumSet。

HashSet 它是查询最快的集合,其内部由HashCode来实现,内部的顺序由哈希码值来决定的,并且它的元素可以有null但切只有一个,所以它不保证Set的迭代顺序。

TreeSet 它是二叉树实现的,基于TreeMap,生成一个总是处于排序状态的Set,内部以TreeMap实现,它不允许放入null值,它是用元素的自然顺序对元素进行排序,或者用Comparator进行排序。

LinkedHashSet 它同样是根据元素的HashCode值来决定元素的存储位置,但是它同时使用链表维护元素的次序,就是像以插入顺序保存的,当遍历时,它将会以元素的添加顺序访问集合的元素,它迭代访问全部元素时性能比HashSet好,但是插入性能比HashSet逊色。

Map接口

它与List和Set不同,它由一系列键值对组成,提供了key和value的映射,一个key对应一个value,因此它不能存在相同的key,value可以相同,实现map的集合有:HashMap、HashTable、TreeMap、WeakHashMap。

HashMap 是以哈希表数据结构实现的,查找对象时通过哈希函数计算位置,为了快速查询设计,内部定义了一个hash表数组,通过哈希函数将元素的地址值转换为数组中存放的索引,如果有冲突就会使用散列链表将其串起来。

HashTable 是以哈希表数据结构实现的,解决冲突与HashMap一样,因为它还是继承Dictionary类,所以每个key和value都可以是一个对象,并且每个key最多与一个value关联。

TreeMap 是有序的散列表,实现SortedMap接口,底层通过红黑树实现

 总结

                1.List、Set都是继承自collection接口,而Map不是

2.List:有序放入元素,元素可以重复,可以有null值,遍历方式下标或者迭代器。查找元素效率高,插入慢,因为插入元素就会导致其他元素位置改变。

Set:无序放入元素,元素不可以重复,可以有null值但只有一个,但是它的元素位置  固定由HashCode决定,遍历方式只能用迭代器,检索慢,更新快,因为更新操作不会导致其他元素位置改变

Map:存储键值对的数据

3.线程安全考虑:ArrayList、LinkedList、HashSet、HshMap非线程安全

Vector、HashTable线程安全

JAVA面试题-小白相关推荐

  1. java 实体类包含list 怎么取值_2019 最新 500 道 Java 面试题

    2015 年,因为工作岗位的变动,开始负责给集团招聘一些技术人员,出于对公司的负责,也为了更好的胜任技术经理的职位,在面试的这件事上,我做了大量的"功课",首先我研究了几乎所有大厂 ...

  2. java 实体类包含list 怎么取值_舅舅是面试官,偷偷告诉你们面试官最爱问的Java面试题...

    2015 年,因为工作岗位的变动,舅舅开始负责给集团招聘一些技术人员,出于对公司的负责,也为了更好的胜任技术经理的职位,在面试的这件事上,舅舅做了大量的"功课",首先研究了几乎所有 ...

  3. 关于Java的Object.clone()方法与对象的深浅拷贝,java面试题,java初级笔试题

    写在最前面,我总结出了很多互联网公司的面试题及答案,并整理成了文档,以及各种学习的进阶学习资料,免费分享给大家.扫码加微信好友进[程序员面试学习交流群],免费领取.也欢迎各位一起在群里探讨技术. 文章 ...

  4. 2019 最新 200 道 Java 面试题

    2015 年,因为工作岗位的变动,开始负责给集团招聘一些技术人员,出于对公司的负责,也为了更好的胜任技术经理的职位,在面试的这件事上,我做了大量的"功课",首先我研究了几乎所有大厂 ...

  5. Java 面试题大全(一篇足以,建议收藏)

    Java 面试题大全 1.JDK 和 JRE 有什么区别? 2.== 和 equals 的区别是什么? 3.final 在 java 中有什么作用? 4.java 中的 Math.round(-1.5 ...

  6. 2023史上最全Java面试题【完整版】跳槽必备,看完轻松收撕面试官

    ✨作者简介:杨 戬,博客专家.github开源作者 ✨多年工作总结:Java学习路线总结,小白逆袭Java技术总监 ✨技术交流:定期更新Java硬核干货,不定期送书活动.助你实现技术飞跃 ✨关注公众号 ...

  7. 总结Java反射面试题(附答案)

    反射机制是程序在运行时能够获取自身的信息.在java中,只要给定类的名字,那么就可以通过反射机制来获得类的所有信息.今天总结了java反射面试题10道,各位java程序员可以根据这篇java反射面试题 ...

  8. java面试题(java中高级面试题及答案)

    [java面试题] 1.Collections.sort排序内部原理 在Java6Arrays.sort()和Collections.sort()中使用MergeSort,在Java7中,内部实现被T ...

  9. 5月份最全的Java面试题总汇(不再惧怕面试官,成功坐等offer)

    前言: 这篇文章主要介绍了史上最全的Java面试题,小编在网上看到的觉得挺不错的,现在分享给大家,如有雷同无意冒犯本人会添加链接,也给大家做个参考.一起跟随小编过来看看吧 为什么要公开这些面试题? 原 ...

最新文章

  1. python中一些实用而容易被忽视不常用的库
  2. Flutter ListView解决底部或顶部留白问题
  3. wxWidgets:wxHyperlinkCtrl类用法
  4. qt double 相减不为0_Qt音视频开发25-ffmpeg音量设置
  5. java nio doug_深入的聊聊 Java NIO
  6. Java+Selenium自动化对非输入框的日历或日期控件的处理
  7. 弘辽科技:加速布局机器人赛道,字节跳动有哪些“大心思”?
  8. echart横坐标_echart横坐标显示问题
  9. 有关汉字编码、拼音输入法 大搜罗
  10. android程序卡死无响应,Android程序未响应(ANR)问题
  11. Kube-OVN:大型银行技术团队推荐的金融级云原生网络方案
  12. Word文档中如何添加带打勾的方框
  13. Scratch案例——画彩虹
  14. 北京市财政局数据备份设备购置建设项目招标公告7,977,038.00万元
  15. iOS 制作framework(SDK)的流程
  16. 测量一款高频频率计:FA-2
  17. Ubuntu/Window下X2Go安装连接同步/上传文件夹(一次性成功)
  18. java按照字节截取字符串
  19. 谷歌GDELT数据下载代码
  20. 给语音信号加混响的常用方法(方法二)

热门文章

  1. LeetCode 1669合并两个链表-中等
  2. [蓝桥杯2018初赛]分数-找规律
  3. C++vector容器-预留空间
  4. SQL9 查找除复旦大学的用户信息(数据库否定语句写法)
  5. java文件损坏_java – 损坏的文件处理
  6. 数据结构---多源最短路径
  7. Redis缓存雪崩、缓存穿透、热点Key
  8. 2019-03-18-算法-进化(删除链表的倒数第N个节点)
  9. [CQOI2015]选数(杜教筛)
  10. P3899 [湖南集训]谈笑风生