八股文面试day6

什么是代理?为什么要用动态代理?

代理模式大概意思是:为其他对象提供一个代理项或者是占位符,以控制对这个对象的访问

代理模式核心思想:创建一个代理对象,在客户端和目标对象之间的一个中介,主要作用就是保护目标对象以及增强目标对象

静态代理:相当于是这个代理对象我们需要手动去创建,而且一个代理对象只能服务于一种业务类型对象,那么当我们有n个业务目标对象的时候,就需要n个静态代理对象,这样的话就不利于我们业务的扩展

举例:有一个程序员张三,他平时加班比较多,并且加上公司的异性同事又比较少,然后又不善于与其沟通,那自己又缺少人脉和资源,所以一直没有找对象,这时张三的父亲张老三就比较着急了,他就利用自己的人脉然后经常给张三安排相亲,那张老三就是张三的代理的相亲对象,那么问题来了,一般情况下,张老三是不会给李四去安排相亲的,因为张老三是不会关心李四有没有对象这个事情,李四有没有对象只有李老四才会关心,那么这个时候呢,就出现了一个新的职业叫媒婆,媒婆就会关心张三李四王五赵六等这些有没有对象,**媒婆就成了所有相亲需求的代理对象,**那么这样的代理对象就可以服务于所有相关业务对象,这就相当于动态代理对象

减少代理对象的个数,从而去降低程序的复杂度,易于复杂业务的动态扩展

jdk proxy的基本实现原理

  1. 拿到目标对象的引用,并且通过反射去获取目标对象所有的接口
  2. 要重新去生成一个新的代理类,实现目标类所有的接口方法
  3. 把增强的逻辑代码加入到新生成的代理类的源代码中
  4. 动态去编译代理类的源代码并且生成字节码即class文件,这个部分是内存中完成的
  5. 去加载并执行新生成的代理对象

CGLib和JDK动态代理的对比

  • JDK动态代理是实现目标对象的接口,而CGLib是继承目标对象
  • JDK和CGLib都是在运行期生成字节码
  • JDK通过反射来调用目标方法,而CGLib是通过FastClass机制调用目标方法

目标对象即被代理对象

为什么不用UUID来做主键?

  1. 无序不是趋势递增,而是会导致树的分裂与合并,树的问题虽然查询快,但是修改比链表慢,增加数据的时候会很慢 联想hashmap1.8以后他加了一个红黑树,他在链表和红黑树之间转来转去,如果数据小于6了,就把它转为链表了
  2. 内存 页放的数据越少,同样的数据我需要的页数越多 层级可能越高 磁盘io次数越多(int -> String)

SpringBoot和传统的Spring有什么区别

首先,springboot采用了约定大于配置 这样一个理念,大大简化了spring应用的初期搭建以及后期的维护工作,它提供大量的自动配置,开发者不需要进行繁琐的XML配置就可以专注于核心业务的开发

其次,springboot内置了Tomcat等应用服务器,让项目的部署也变得更加方便,同时springboot还提供了许多starters组件,方便集成各种常用的框架和中间件,比如Redis,JPA,MQ等,相比之下,传统的Spring配置更加灵活,可以适应各种复杂项目的需求,但是相应的配置更加复杂,对于我个人而言,我更加倾向于使用SpringBoot,因为它能让我更加专注与业务代码的编写,而不需要花费大量的时间在配置和环境搭建上,以上就是我对这个问题的理解

项目举例描述

比如说我先拿到这个文件,然后去遍历这个文件里面的词组,然后我给他建立一个正排的索引和一个倒排的索引,通过一个ID,也就是集合的下标,他们建立关系,然后查询的话就是用倒排获得这种ID,再通过正牌去拿到文章的内容,然后再展示出来,然后这边就会涉及到权重的问题和排序的问题

反射

反射是指在运行时检查和操作类、接口、字段、方法等程序结构的能力。通过反射,可以在运行时获取类的信息,创建类的实例,调用类的方法,访问和修改类的字段等。通过反射可以提高程序的灵活性和可扩展性,可以实现更多的功能。但在使用反射时需要考虑性能问题以及安全等问题。

克隆

线程安全

如何查看端口80有没有被占用

netstat -anp | grep 80

相关推荐
夜流冰30 分钟前
工具方法 - 面试中回答问题的技巧
面试·职场和发展
penguin_bark1 小时前
LCR 068. 搜索插入位置
算法·leetcode·职场和发展
杰哥在此7 小时前
Python知识点:如何使用Multiprocessing进行并行任务管理
linux·开发语言·python·面试·编程
GISer_Jing13 小时前
【React】增量传输与渲染
前端·javascript·面试
Neituijunsir18 小时前
2024.09.22 校招 实习 内推 面经
大数据·人工智能·算法·面试·自动驾驶·汽车·求职招聘
希望有朝一日能如愿以偿19 小时前
力扣题解(飞机座位分配概率)
算法·leetcode·职场和发展
小飞猪Jay19 小时前
面试速通宝典——10
linux·服务器·c++·面试
猿java20 小时前
Cookie和Session的区别
java·后端·面试
数据分析螺丝钉20 小时前
力扣第240题“搜索二维矩阵 II”
经验分享·python·算法·leetcode·面试
无理 Java20 小时前
【技术详解】SpringMVC框架全面解析:从入门到精通(SpringMVC)
java·后端·spring·面试·mvc·框架·springmvc