总结...

堆和栈

堆和栈存储的数据类型:堆内存主要作用是存放运行时创建(new)的对象。

栈内存的主要作用是存放基本数据类型和引用变量。栈的内存管理是通过栈的"后进先出"模式来实现的。

基本数据类型:int、short、long、byte、float、double、boolean、char

Aop通知与原理

  1. Aop的通知方式有哪些,原理是什么

           原理:AOP的底层原理就是动态代理的实现。

           通知方式:前置通知 方法执行前调用 对应注解 @Before

           后置通知 方法执行后调用 对应注解 @After

           返回通知 方法返回后调用 对应注解 @AfterReturning

           异常通知 方法出现异常调用 对应注解 @AfterThrowing

           环绕通知 动态代理、手动推荐方法运行 对应注解 @Around

jdk1.8的特性:

Lambda表达式,函数式接口,方法引用和构造器调用,Stream API,接口中的默认方法和静态方法,新时间日期API

hashmap遇到hash碰撞如何解决的?

        Hash冲突是由于哈希算法,被计算的数据是无限的,而计算后的结果的范围是有限的,总会存在不同的数据,经过计算之后得到值是一样,那么这个情况下就会出现所谓的哈希冲突

       1,开放定址法也称线性探测法,就是从发生冲突的那个位置开始,按照一定次序从Hash表找到一个空闲位置然后把发生冲突的元素存入到这个位置,而在java中,ThreadLocal就用到了线性探测法来解决Hash冲突

        在这里插入图片描述

 如图,在Hash表索引1的位置存了key=name,再向它添加key=hobby的时候,假设计算得到的索引也是1,那么这个时候发生哈希冲突,而开放开放定址法就是按照顺序向前找到一个空闲的位置,来存储这个冲突的key

        2.链式寻址法,这是一种常见的方法,简单理解就是把存在Hash冲突的key,以单向链表来进行存储,比如HashMap

 如图存在冲突的key直接以单向链表的方式去进行存储

        3.再Hash法,就是通过某个Hash函数计算的key,存在冲突的时候,再用另外一个Hash函数对这个可以进行Hash,一直运算,直到不再产生冲突为止,这种方式会增加计算的一个时间,性能上呢会有一些影响

        4.建立公共移除区,就是把Hash表分为基本表和益处表两个部分,凡是存在冲突的元素,一律放到益处表中

        HashMap在JDK1.8版本中是通过链式寻址法以及红黑树来解决Hash冲突的问题,其中红黑树是为了优化Hash表的链表过长导致时间复杂度增加的问题,当链表长度大于等于8并且Hash表的容量大于64的时候,再向链表添加元素,就会触发链表向红黑树的一个转化

   GET请求和POST请求的区别是什么?

        GET请求参数是通过URL进行传递的,POST请求的参数包含在请求体当中。

        GET请求比POST请求更不安全,因为参数直接暴露在URL中,所以,GET请求不能用来传递敏感信息。

        GET请求在url中传递的参数是有长度限制的(在HTTP协议中并没有对URL的长度进行限制,限制是特定的浏览器以及服务器对他的限制,不同浏览器限制的长度不同。),POST对长度没有限制。

        GET请求参数会完整的保留在浏览器的历史记录中,POST请求的参数不会保留。

        GET请求进行url编码(百分号编码),POST请求支持多种编码方式。

        GET请求产生的URL地址是可以被bookmark(添加书签)的,POST请求不可以。

        GET请求在浏览器回退的时候是无害的,POST请求会.再次提交数据。

        GET请求在浏览器中可以被主动cache(缓存),而POST请求不会,可以手动设置。
(详情查看地址原文链接:https://blog.csdn.net/zhengrong9/article/details/109802706)

left join 与inner join的区别

        1.返回不同

        inner join:inner join只返回两个表中联结字段相等的行。

        left join:left join返回包括左表中的所有记录和右表中联结字段相等的记录。

        2.数量不同

        inner join:inner join的数量小于等于左表和右表中的记录数量。

        left join:left join的数量以左表中的记录数量相同。

        3.记录属性不同

        inner join:inner join不足的记录属性会被直接舍弃。

        left join:left join不足的记录属性用NULL填充。

动态类加载实现原理是什么

ES的索引为什么查询比mysql快?索引原理讲一下。

        第一种情况:

        基于分词后的全文检索:例如select * from test where name like '%张三%',对于关系型数据库mysql来说简直是一种灾难,因为会进行全表检索,但是对es而言分词后,每个字都可以利用FST高速找到倒排索引的位置,并迅速获取文档id列表,大大的提升了性能减少了磁盘IO。

        第二种情况:

        精确检索:进行精确检索,有些时候可能mysql要快一些,当mysql的非聚合索引引用上了覆盖索引,无需回表,则速度上可能更快,但是es还是通过FST找到倒排索引的位置比获取文档id列表,再根据文档id获取文档并根据相关度进行排序。但是es还有个优势,就是es即天然的分布式使得在大量数据搜索时可以通过分片降低检索规模,并且可以通过并行检索提升效率,用filter时更是可以直接跳过检索直接走缓存

原理:

        数据库的索引是B+tree结构

        主键索引是聚合索引,其他索引是非聚合索引

        在讲倒排索引之前咱们先说一下正向索引

正向索引的结构就是每个文档和关键字做关联,每个文档都有与之对应的关键字,记录关键字在文档中出现的位置和次数。但是用户查询的时候是根据关键字去查询的。当用户想要查询“iPhone”,这时候会扫描所有文档找出包含iPhone的文档,可想而知当线上数据量非常庞大的情况下,这样的索引结构根本无法满足实时返回排名结果的要求。

倒排索引

        倒排索引是根据关键词去查找文档的id,每个关键词都会有与之对应的文档id。倒排索引是实现“单词-文档矩阵”的一种具体存储形式,通过倒排索引,可以根据单词快速获取包含这个单词的文档列表。倒排索引主要由三个部分组成:“单词词典”、“排序列表”和”“倒排文件”。

        单词词典(Lexicon):搜索引擎的通常索引单位是单词,单词词典是由文档集合中出现过的所有单词构成的字符串集合,单词词典内每条索引项记载单词本身的一些信息以及指向“倒排列表”的指针。

        倒排列表(PostingList):倒排列表记载了出现过某个单词的所有文档的文档列表及单词在该文档中出现的位置信息,每条记录称为一个倒排项(Posting)。根据倒排列表,即可获知哪些文档包含某个单词。

        倒排文件(Inverted File):所有单词的倒排列表往往顺序地存储在磁盘的某个文件里,这个文件即被称之为倒排文件,倒排文件是存储倒排索引的物理文件。

java的多态、封装、继承概念讲一下

      一、多态

        多态就是: 同一个引用类型,使用不同的实例而执行不同操作

       所谓多态就是指程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法调用在编程时并不确定,而是在程序运行期间才确定,即一个引用变量倒底会指向哪个类的实例对象,该引用变量发出的方法调用到底是哪个类中实现的方法,必须在由程序运行期间才能决定。因为在程序运行时才确定具体的类,这样,不用修改源程序代码,就可以让引用变量绑定到各种不同的类实现上,从而导致该引用调用的具体方法随之改变,即不修改程序代码就可以改变程序运行时所绑定的具体代码,让程序可以选择多个运行状态,这就是多态性。

        多态也可以分为向上转型和向下转型,根据具体的需要来转变状态,装为父对象可以作为形参直接调用父类中的方法,并把自己作为参数,JVM会根据实参来确定调用的子类方法,如果需要调用子类特有的private私有属性和方法,需要强制转型成子类对象,实参与某子类对象不符时不能强制转型,需要用instanceof方法来判断是类型是否一致在强制转型。

      二、封装:

       封装是 JAVA 面向对象的特点的表现,封装是一种信息隐蔽技术。它有两个含义:即把对象的全部属性和全部服务结合在一起,形成一个不可分割的独立单位;以及尽可能隐藏对象的内部结构。也就是说,如果我们使用了封装技术的话,别人就只能用我们做出来的东西而看不见我们做的这个东西的内部结构了。

        三、继承:

        继承是java面向对象编程技术的一块基石,因为它允许创建分等级层次的类。继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。

        

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值