- 博客(19)
- 收藏
- 关注
原创 Redis
使用布隆过滤器,即系统启动的时候吧目标数据全部缓存到布隆过滤器里面,当攻击者用不存在的Key来请求的时候,先到布隆过滤器里面查询,如果不存在,那意味着这个Key在数据库里面也不存在。可以在同一个服务器部署多个Redis的实例,并把它们当作不同的服务器来使用,在某些时候,无论如何一个服务器是不够的,所以,如果你想使用多个CPU,不可以考虑一下分片(shard)缓存穿透,是短时间内有大量的不存在的Key请求到应用里面,而这些不存在的Key在Redis缓存里面又找不到,从而全部穿透到了数据库,造成数据库压力。
2023-10-17 10:47:49
151
原创 消息中间件
这种模式,才是所谓的RabbitMQ的高可用模式,跟普通集群模式不一样的是,你创建的queue,无论元数据(元数据指RabbitMQ的配置数据)还是queue里的消息都会存在于多个实例上,然后每次你写消息到queue的时候,都会自动把消息到多个实例的queue里进行消息同步。因为要花更多的时间和资源处理“堆积”的消息,如此用来处理新流入的消息的能力就会降低,使得后流入的消息又被积压到很深的队列中,继续增大处理每个消息的平均开销,继而情况变得越来越恶化,使得系统的处理能力大大降低。传统意义的错误通知;
2023-10-17 10:47:08
208
原创 SpringCloud常见面试题
另外,应避免统一的,集中式的服务管理机制,对具体的一个服务而言,应根据业务上下文,选择合适的语言、工具对其进行构建,可以有一个非常轻量级的集中式管理来协调这些服务,可以使用不同的语言来编写服务,也可以使用不同的数据存储。当某个微服务不可用或者响应时间太长时, 会进行服务降级,进而熔断该节点微服务的调用,快速返回“错误”的响应信息。Nacos在更新实例列表时,会采用CopyOnWrite技术,首先将旧的实例列表拷贝一份,然后更新拷贝的实例列表,再用更新后的实例列表来覆盖旧的实例列表。
2023-10-17 10:35:05
163
原创 SpringBoot常见面试题
第三个是启动类,启动类@SpringBootApplication底层注解做了三件事,启动类本身是配置类,启动类加在当前类锁在包下的所有注解,启动类按照条件加载第三方场景启动配置类,例如很多都是有class文件就加载启动类,就意味着添加依赖,自动注入场景启动器的对象。因此,Swagger消除了调用服务时的猜测。CSRF代表跨站请求伪造,这是一种攻击,迫使最终用户在当前通过身份验证的web应用程序上执行不需要操作,CSRF攻击专门针对状态改变请求,而不是数据窃取,因为攻击者无法查看对伪造请求的响应。
2023-10-15 16:58:04
123
原创 Mysql常见面试题
左外连接,也称左连接,左表为主表,左表中的所有记录都会出现在结果集中,对于那些在右表中没有匹配的记录,仍然要显示,右边对应的那些字段值以NULL来填充。一般来说索引本身也很大,不可能全部存储在内存中,因此索引往往是存储在磁盘上的文件中的(可能存储在单独的索引文件中,也可以和数据一起存储在数据文件中)。我们通常所说的索引,包括聚集索引、覆盖索引、组合索引、前缀索引、唯一索引等,没有特别说明,默认都是使用B+树结构组织(多路搜索树,并不一定是二叉的)的索引。视图是一种虚拟的表,具有物理表相同的功能。
2023-09-19 11:06:02
144
原创 SSM框架常见面试题
分页插件的基本原理是使用Mybatis提供的插件插口,实现自定义插件,在插件的拦截方法内拦截待执行的sql,然后重写sql,根据dialect方言,添加对应的物理分页语句和物理分页参数。有了列名和属性名的映射关系后,Mybatis通过反射创建对象,同时使用反射给对象的属性逐一赋值并返回,那些找不到映射关系的属性,是无法完成赋值的。如果开启二级缓存,查询sql语句时,优先从二级缓存中查找结果,如果没有去一级缓存中查找,如果没有找到则去数据库查询,将查询结果先存入一级缓存,再存入二级缓存,再返回。
2023-09-17 22:14:30
446
原创 JavaWeb常见面试题
maven的依赖范围包含:compile(默认的依赖范围,在编译、测试、运行三种classpath都是有效的)、runtime(运行时的依赖范围,对测试和运行的classpath有效)、test(只对测试的classpath有效)、system(依赖范围与compile完全一致,区别在于需要使用systempath绑定本地的系统磁盘路径)、provided(对编译和测试的classpath是有效的,在运行时无效;三个生命周期是相互独立,并且每个周期中包含很多的阶段,每个阶段的现实都是由插件完成的。
2023-09-17 16:56:06
692
原创 Java常见面试题(JDK8新特性面试题)
Lambda是一个匿名函数,我们可以把Lambda表达式理解为是一段可以传递的代码(将代码像数据一样进行传递),它可以简化函数式接口编程。JDK8中主要新增了如下类,Instant、Duration、Period、LocalDate、LocalTime、LocalDateTime类、ZoneDateTime;接口新增静态方法、默认方法、新日期API、Lambda表达式、函数式接口、方法引用、StreamAPI、Optional类。常见的中间操作有:filter、limit、map、sorted等。
2023-09-17 14:05:08
750
原创 JavaSE常见面试题(并发编程 下)
当一个线程需要调用对象的wait()方法的时候,这个线程必须拥有对象的锁,接着它会释放这个对象锁并进入等待状态直到其他线程调用这个对象上的notify()方法。同样的,当一个线程需要调用对象的notify()的时候,它会释放这个对象的锁,以便其他在等待的线程就可以得到这个对象锁。每个线程都是有优先级的,一般来说,高优先级的线程在运行时会具有优先权,但这依赖于线程调度的实现,这个实现是和操作系统相关的(OS dependent)。当线程间是可以共享资源时,线程间通信是协调它们的重要的手段。
2023-09-12 23:18:55
73
原创 JavaSE常见面试题(并发编程 中)
在这种迭代方式中,当iterator被创建后集合再发生改变的就不再是抛出ConcurrentModificationException,取而代之的是在改变时new新的数据从而不影响原有的数据,iterator完成后将头指针替换为新的数据,这样iterator线程可以使用原来老的数据,而写线程也可以并发的完成改变。注意:线程中断仅仅是线程的中断状态位,不会停止线程。需要注意的是,这不会让线程终止,一旦从休眠中唤醒线程,线程的状态将会被改变为Runnable,并且根据线程调度,它将得到执行。
2023-09-11 15:54:47
109
原创 JavaSE常见面试题(并发编程 上)
比如JVM的垃圾回收线程是一个守护线程,当所有线程撤离,不再产生垃圾,守护线程自然就没有事干了,当垃圾回收线程是Java虚拟机上仅剩的线程时,Java虚拟机自动会离开。调用new Thread()创建的线程缺乏管理,被称为野线程,而且可以无限制的创建,线程之间的相互竞争会导致过多占用系统资源而导致系统瘫痪,还有线程之间的频繁交替也会消耗很多系统资源。ThreadGroup类,可以把线程归属到某一个线程组中,线程组中可以有线程对象,也可以有线程组,组中可以有线程,这样的组织结构有点像树的形式。
2023-09-10 16:23:07
112
原创 JavaSE常见面试题(反射与注解)
Override:限定重写父类,该注解只能用于方法@Deprecated:用于表示所修饰的元素(类、方法等)已过时。参数的类型有:八种基本数据类型、String类型、Class类型、enum类型、Annotation类型、以上所有类型的数组。类.class、对象.getClass()、Class.forName(全路径)、classLoader.loadClass(全路径)@Retention修饰注解的生命周期,通常设置为RetentionPolicy.RUNTIME:在运行时有效(即运行时保留)
2023-09-07 10:50:07
93
原创 JavaSE常见面试题(BIO、NIO、网络)
Java BIO:同步并阻塞,服务器实现模式为一个连接一个线程,即客户端有连接请求时服务器端就需要启动一个线程进行处理,如果这个连接不做任何事情会造成不必要的线程开销,当然可以通过线程池机制改善。Java NIO:同步非阻塞,服务器实现模式为一个请求一个线程,即客户端发送的连接请求都会注册到多路复用器上,多路复用器轮询到连接有I/O请求时才启动一个线程进行处理。网络通讯协议有两套参考模型,一套是OSI参考模型,一套是TCP/IP参考模型,OSI过于理想,实际开发都采用TCP/IP参考模型开发。
2023-09-07 09:59:44
159
原创 JavaSE常见面试题(集合)
ArrayList和Vector都是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素、它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以索引数据快而插入数据慢,Vector中的方法由于添加了sychronized修饰,因此Vector是线程安全的容器,但性能上较ArrayList差,因此已经是Java中的遗留容器。泛型是类型参数,可以定义在类、接口、方法中,在创建实例的时候类上或接口上的泛型的具体类型,在调用方法的时候指定定义在方法上泛型的具体类型。
2023-09-03 23:47:06
105
原创 JavaSE常见面试题(常用类)
当然,目前很多软件仍然使用XML来存储配置信息,我们在很多项目中通常也会将作为配置信息的硬代码写在XML文件中,Java的很多框架也是这么做的,而这些框架都选择了dom4j作为处理XML的工具,因为Sun公司的官方API实在是不怎么好用。如果a和b都是对象,则a==b事比较两个对象的引用,只有a和b指向的是堆中的同一个对象才会返回true,而a.equals(b)是进行逻辑比较,所以通常需要重写该方法来提供逻辑一致性的比较。浅拷贝是创建一个新对象,这个对象有着原始对象属性值的一份精确拷贝。
2023-09-03 16:29:05
149
原创 JavaSE常见面试题(基本语法&面向对象&JVM)
(java中支持带标签的break和continue语句,作用有点类似于C和C++中的goto语句,但是就像避免使用goto一样,应该避免使用带标签的break和continue,因为它不会让你的程序变得更优雅,很多时候甚至有相反的作用,所以这种语法其实不是很好)char类型可以存储一个中文汉字,因为Java中使用的编码是Unicode(不选择任何特定的编码,直接使用字符在字符集中的编号,这是统一的唯一方法),一个char类型占2个字节(16比特),所以放一个中文是没问题的。【11】谈谈你了解的编码。
2023-09-03 11:45:52
197
原创 变量、运算符
在java中,利用声明的方式将某个数据保存下来供程序使用,并且这个数据是可以根据自己需求发生改变的。现在初步了解了变量的作用,那接下来就利用变量完成数据的存储,但是这里面牵连出另一个问题,就是如何用变量存储数据呢?有没有规定的语法格式。变量的操作步骤第一步:声明变量声明变量的语法格式:数据类型 类型名称;比如:int a;第二步:赋值注意事项:1、java中,赋值使用 = 完成,并且将等号右侧的值赋给等号左侧的变量名称2、赋值语法格式:变量名称 = 值;3、比如: a = 18;
2023-01-01 16:51:07
778
原创 注释、关键字、标识符(建议收藏)
类似于现实生活中说明书,用于解释说明程序的。//说明:这是一个非常简单的程序,只是用来向外输出“欢迎大家来学习Java”//这是一个main方法,是程序执行的唯一入口,没有main方法程序就无法执行//输出语句,用来对外输出指定内容的System.out.println("欢迎大家来学习Java");}}被注释的内容,在程序中不运行,只是增加程序的可读性。
2022-12-30 12:00:00
389
原创 Java的开发环境搭建、JDK的安装、配置(傻瓜教学)
JDK(JavaDKit Java开发工具包)JDK是提供给Java开发人员使用的,其中包含了java的开发工具,也包括了 JRE。所以安装了JDK,就不用在单独安装JRE了。其中的开发工具:编译工具(javac.exe) 打包工具(jar.exe)等JRE(JavaRuntimeE运行环境)包括Java虚拟机(JVMJavaVirtualMachine)和Java程序所需的核心类库等, 如果想要运行一个开发好的Java程序,计算机中只需要安装JRE即可。
2022-12-29 19:48:37
420
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅