自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(143)
  • 收藏
  • 关注

原创 Java多线程基础面试总结(六)

Condition是在JDK1.5中才出现的,它用来替代传统的Object的wait()、notify()实现线程间的协作,相比使用Object的wait()、notify(),使用Condition的await()、signal()这种方式实现线程间协作更加安全和高效。同步队列是一个FIFO(先进先出)的队列,线程按照获取锁的顺序排队等待锁的释放。notifyAll()中All的含义是所有的线程,而不是所有的锁,只能唤醒等待(调用wait()方法等待)同一个锁的所有线程,这一点一定要注意。

2023-05-29 07:51:24 86

原创 项目中遇到的一些问题总结(十三)

比如,当我们需要在Web页面上展示一张图片时,我们可以先获取到图片的类型(比如是png或jpeg等),然后在页面中设置正确的MIME类型和文件扩展名,浏览器就可以正确地展示图片了。当然,在实际应用中,如果有明确的需求,需要设置一个特殊的媒体类型,或针对不同类型的文件进行不同的处理,可以使用其他具体媒体类型值来替代该默认值。二者的区别在于,文件格式是指文件内容的组织形式,而文件编码是指将文件内容中的字符按照某种方式编码以便计算机能够处理的方式。等,通过该扩展名可以判断文件类型。而当仅仅需要获得文件时,使用。

2023-05-28 09:25:26 184

原创 Java多线程基础面试总结(五)

这里只是初步介绍,在后续文章中我会详细介绍,后续文章完成后我会将连接更新到这里。synchronized 翻译成中文是同步的的意思,主要解决的是多个线程之间访问资源的同步性,可以保证被它修饰的方法或者代码块在任意时刻只能有一个线程执行。

2023-05-27 08:12:25 176

原创 项目中遇到的一些问题总结(十二)

不过,在一些情况下,例如 JWT 被存储在浏览器的 cookie 中,可能有被恶意 JavaScript 或 XSS 攻击获取的风险,此时应考虑到 CSRF 的风险,可以结合其他防御措施进行综合防范。然后,攻击者伪造一个请求,在用户的浏览器中执行该请求,从而利用被授权的身份进行欺骗、篡改或者删除网站上的数据,危害用户的账号信息和应用程序等。因此,在使用 JWT 令牌作为授权令牌时,需要将 JWT 令牌转换为 OAuth2 令牌,才能嵌入到 OAuth2 的授权流程中,并且在资源服务器进行解析和验证。

2023-05-26 08:05:39 270

原创 项目中遇到的一些问题总结(十一)

是 Spring Security OAuth2 中的一个配置类,用于配置 OAuth2 认证服务器的终端点。具体来讲,OAuth2 认证服务器包含许多终端点用于处理认证和授权请求,例如获取 access token、refresh token、授权码、校验 token 等,而类就提供了一系列方法来对这些终端点进行配置,使得 OAuth2 认证服务器在处理这些请求时能够按照我们的需要进行处理。:设置认证管理器。设置后,将支持password授权类型,并验证来自客户端的用户名和密码。

2023-05-25 08:09:00 140

原创 项目中遇到的一些问题总结(十)

但是,如果移除的实例过多,会导致服务的可用性降低,因此 Nacos 引入了保护阈值机制来避免这种情况的发生。保护阈值的作用是当服务实例的健康状态低于指定的阈值时,Nacos 将不再将其从服务列表中移除。需要注意的是,保护阈值并不能解决服务实例的故障或异常问题,它只是一种机制来避免过度移除服务实例的问题。3.认证成功后,AuthenticationManager身份管理器返回一个被填充满了信息的(包括上面提到的权限信息,身份信息,细节信息,但密码通常会被移除)Authentication实例。

2023-05-24 08:41:02 342

原创 项目中遇到的一些问题总结(九)—— Spring Security 集成JWT、OAuth2完整验证流程

如果Token不合法,则拒绝该请求。服务器将Authentication对象中保存的信息转换为JWT Token的Payload部分,使用JwtAccessTokenConverter对象进行转换,同时生成Header和Signature,组成一个完整的JWT Token,返回给客户端。服务器对客户端进行身份认证,并将生成的Access Token保存在JWT Token的Payload部分中,并使用JwtAccessTokenConverter对象进行转换,最终生成一个JWT Token,返回给客户端。

2023-05-23 08:39:45 375

原创 项目中遇到的一些问题总结(八)

为了保证授权过程的安全性,需要验证客户端的身份和合法性,因此客户端需要在微信开放平台中注册。通俗的理解是当我们往一个容器添加元素的时候,不直接往当前容器添加,而是先将当前容器进行Copy,复制出一个新的容器,然后新的容器里添加元素,添加完元素之后,再将原容器的引用指向新的容器。Token是Web开发中的一种身份验证机制,它是一种基于令牌的方式,客户端请求发送给服务器时,会带上Token,服务器根据Token来识别和验证用户的身份,并根据结果给用户提供相应的服务。copyOnWriter机制。

2023-05-22 08:31:26 412

原创 项目中遇到的一些问题总结(七)

乐观锁是一种并发控制机制,它基于假设同时执行的线程之间不会产生冲突,因此不会使用显式的锁机制来进行同步控制或阻塞线程。相反,它使用一种标记机制,即在对共享资源进行修改之前,会对资源的版本标记进行检查,确保当前的版本与线程开始执行时的版本匹配。我们可以使用乐观锁来解决并发修改数据时的问题,其中既包括在多线程环境下的数据库修改,也包括在类似于集合、数组和其他共享数据结构的应用程序层上的修改问题。

2023-05-21 07:55:16 480

原创 项目中遇到的一些问题总结(六)

第二种机制是MySQL在可重复读隔离级别下使用的多版本并发控制(Multiversion Concurrency Control,MVCC)机制。该机制允许多个事务在不同的版本上并发读取和修改同一个数据行,以保证事务的隔离性,并发性和一致性。MVCC实现的核心思想是:对于每个事务,不直接读取数据库中的数据,而是创建一个“事务版本”,在事务版本集(Transaction Version Set)中记录该事务读取的所有数据行的版本号。

2023-05-20 08:24:25 461

原创 项目中遇到的一些问题总结(五)

在上面的配置中,我们定义了一个名为my-service的路由,将请求转发到http://localhost:8080这个服务中,同时指定了一个Path谓词,用于匹配请求路径中以/my-service/开头的请求。这段代码使用了Reactor框架中的Flux类,将整数列表看作是一个数据流,然后通过filter函数将其中的偶数筛选出来,再通过map函数将偶数平方,最后通过sort函数进行排序,并通过subscribe函数将结果打印到控制台。这些过滤器会对所有路由生效,可以在整个网关中实现全局的过滤和处理。

2023-05-19 08:03:48 383

原创 项目中遇到的一些问题总结(四)

I/O多路复用指的是一种通过单个线程管理多个I/O请求的机制。具体来说,它允许一个线程监视多个Socket通道,并且只有在至少一个通道准备好进行I/O操作时,该线程才会开始执行实际的I/O操作。因此,I/O多路复用能够大幅度减少线程数量,提高系统的并发性能,也能够更有效地使用系统资源。常见的I/O多路复用技术有三种:select、poll和epoll。这些技术都使用同一个系统调用来注册一组文件描述符,并在其中一个描述符上发生I/O事件时通知应用程序。它们之间的区别在于在高负载情况下的性能表现不同。

2023-05-18 08:08:41 269

原创 Service Unavailable, status=503

因为我的 order-service 服务在 test-project 分组,所以导致路由失败,真是离谱到家了,我又查了一些资料,都说网关可以路由到不同分组的服务,但是我的失败了,具体原因未知,如果大家也遇到类似的情况,可以试一试是不是这个问题,如果有大佬知道为什么,麻烦告诉我一下。大多数人都是这个错误,但我的更离谱,我加上这个依赖也没有用,后来发现是因为我的网关服务和要路由的服务不在一个 nacos 分组中。

2023-05-17 15:08:42 52

原创 项目中遇到的一些问题总结(三)

CSRF(Cross-Site Request Forgery,跨站请求伪造)是一种网络攻击方式,攻击者通过伪造用户请求的方式来执行非法操作,从而获取用户的敏感信息或进行恶意操作。攻击者通常会针对某个具体的网站或应用程序进行攻击,攻击方式比较隐蔽,用户难以察觉,常见的攻击方式包括:钓鱼攻击:攻击者通过伪装成信任的网站或应用程序,引诱用户点击链接或下载文件,从而在用户的设备上植入恶意代码。CSRF攻击:攻击者通过伪造用户请求的方式来执行非法操作,例如在用户未授权的情况下转账、修改密码等操作。

2023-05-17 08:26:30 183

原创 SQL 常用函数总结(三)

函数计算 100 的以 10 为底的对数,并将结果存储在名为。函数将所有得分向下取整到最接近的整数,并将结果存储在名为。函数将所有成绩向上取整到最接近的整数,并将结果存储在名为。函数将所有价格四舍五入到两个小数位,并将结果存储在名为。函数计算所有学生成绩的平均值,并将结果存储在名为。函数计算所有销售金额的总和,并将结果存储在名为。函数计算所有温度值的绝对值,并将结果存储在名为。函数计算 e 的 2 次幂,并将结果存储在名为。函数计算 e 的自然对数,并将结果存储在名为。

2023-05-16 07:55:58 607

原创 SQL 常用函数总结(二)

会匹配长度为至少三个字符且以“a”作为第三个字符的任何字符串,如“lava”、“wava”、“mamma”、“papa”等。运算符,以“car%”作为模式筛选出产品名称以“car”开头的记录,以及一个布尔条件筛选出没有缺货的产品。” 会匹配以“s”结尾的任何字符串,例如“dogs”、“cats”、“bats”等。函数用于在指定字符串中查找子字符串,并返回它在字符串中的起始位置。函数替换每个句子中的单词“the”,并将替换后的新句子存储在名为。等的数量可以是零个或多个,分别表示需要合并的字符串。

2023-05-15 07:57:48 270

原创 SQL 常用函数总结(一)

在此例中,NOW() 表示当前日期时间,logged_in 是用于存储用户登录时间的字段,user_id = 123 是查询某一特定用户的登录信息。函数计算时,如果两个输入日期的顺序颠倒,最终的计算结果将会是负数,也就是第一个日期减去第二个日期的结果,即。同样的,如果方法的参数颠倒,则返回一个负数,表示第二个日期比第一个日期早了多少天。是 SQL 中的一个日期函数,用于计算两个日期之间的天数差或日期时间差。函数用于计算一个表格或查询结果集合中某一列的数值平均值。

2023-05-14 07:39:22 416

原创 项目中遇到的一些问题总结(二)

比如在 Web 应用程序中,Session 状态就是一种有状态处理机制,当用户通过浏览器访问服务器后,服务器会创建一个 Session 对象来持久化记录该用户的登录状态等信息,在后续的请求中,服务器可以利用 Session ID 检索对应的 Session 对象,从而实现更加智能的处理。Token机制与Session机制的主要区别在于,Token机制是基于无状态协议的,客户端与服务端的通信是通过请求头部携带Token信息实现的,服务端会验证Token的有效性,而不是存储和管理客户端状态。

2023-05-13 08:06:57 573

原创 算法练习随记(七)

相反,[1, 4, 7, 2, 5] 和 [1, 7, 4, 5, 5] 不是摆动序列,第一个序列是因为它的前两个差值都是正数,第二个序列是因为它的最后一个差值为零。然而,两个 相同种类 的任务之间必须有长度为整数 n 的冷却时间,因此至少有连续 n 个单位时间内 CPU 在执行不同的任务,或者在待命状态。例如, [1, 7, 4, 9, 2, 5] 是一个 摆动序列 ,因为差值 (6, -3, 5, -7, 3) 是正负交替出现的。假设你是一位很棒的家长,想要给你的孩子们一些小饼干。

2023-05-12 08:05:02 394

原创 项目中遇到的一些问题总结(一)

自定义密码校验流程需要实现Spring Security提供的PasswordEncoder接口,并将其注册到Spring容器中。然后在Spring Security的配置中指定使用自定义的PasswordEncoder即可。具体步骤如下:实现PasswordEncoder接口,实现encode()和matches()方法,用于加密和验证密码。将自定义的PasswordEncoder实例注入到Spring容器中,可以使用@Component或@Bean注解。} }

2023-05-11 08:20:00 614

原创 缓存穿透、缓存雪崩和缓存击穿

只有当缓存命中失败时,应用程序才会向后台线程发送请求,请求后台线程异步地从数据库中加载数据,并将数据存储到缓存中,这样可以避免缓存击穿的风险。例如,可以将热点数据缓存到CDN中,将相对冷门的数据缓存到本地缓存或者分布式缓存中,将最不常用的数据缓存到数据库中。缓存雪崩是指缓存中大量的数据同时失效,导致大量的请求直接打到数据库上,从而使得数据库承受不了巨大的压力,最终导致整个系统崩溃的现象。它的作用是提高系统的响应速度,并避免缓存失效时大量请求直接打到数据库上,导致数据库负载过高的情况,从而保证系统的稳定性。

2023-05-10 08:22:59 506

原创 SpringSecurity 认证流程源码详细解读

如果这些校验都通过,就会将 result 返回。没错,他就是在套娃!点进入去之后,我们来到了 AuthenticationManager 接口,但这只是一个接口,显然不是我们要的,具体的实现代码应该在实现类中,所以我们继续选择 ProviderManager ,他是 AuthenticationManager 接口的一个实现类。点进去,发现这是 AbstractUserDetailsAuthenticationProvider 接口中的方法,而且只有一个实现,那我们继续进入实现类实现的方法。

2023-05-09 08:05:47 584

原创 CAP定理

相对于强一致性和ACID事务模型,BASE理论会放松对数据一致性和事务处理的要求,但在一定的系统容错能力、可用性和性能需求下,保证系统的一致性最终达到一定的时间性,是一种更加可行、实用和高效的分布式数据库设计方案。最终一致性的特点是系统能够处理分散的信息,并在不同的时间段内重整数据的一致性,从而保证系统的可用性和性能。强一致性是指对于系统中的每个数据更新操作,无论这个操作发生在任何一个节点上,都能保证在任何时间点上,任何一个节点读取到的数据都是最新的,即读到的数据和最后”正确的”写操作的结果是一致的。

2023-05-08 08:04:51 376

原创 synchronized 常见面试题总结

在多线程编程中,有时候需要保证多个线程对某个共享资源(如变量、方法或对象)的访问是互斥的,即同一时刻只能有一个线程访问该资源,其他线程需要等待。这种情况下,就需要使用同步机制来实现线程的同步和互斥。Synchronized是Java提供的一种同步机制,它能够保证在同一时刻只有一个线程能够进入synchronized代码块或方法,从而避免了多个线程同时访问共享资源的问题,保证了线程安全和程序的正确性。

2023-05-07 08:42:42 513

原创 synchronized 关键字基础总结

作用于非静态方法,锁住的是对象实例(this),每一个对象实例有一个锁。作用于静态方法,锁住的是类的 Class 对象,Class 对象全局只有一份,因此静态方法锁相当于类的一个全局锁,会锁所有调用该方法的线程。作用于 Lock.class,锁住的是 Lock 的 Class 对象,也是全局只有一个。作用于 this,锁住的是对象实例,每一个对象实例有一个锁。作用于静态成员变量,锁住的是该静态成员变量对象,由于是静态变量,因此全局只有一个。必须有“对象”来充当“锁”的角色。

2023-05-06 08:56:51 674

原创 LInux grep sed awk 命令详解

以上是sed命令的一些基本用法和常见命令的示例,通过对sed命令的学习,可以提高文本处理的效率。需要注意的是,由于sed命令的功能非常强大,使用不当可能会对文件造成不可逆的影响,因此在使用sed命令时一定要小心。如果你想只打印某一列的值,可以指定不同的列分隔符,使用$符号就可以打印出指定的列。其中,选项是用于设置搜索规则的参数,搜索内容是要搜索的文本,文件名是要进行搜索的文件名。上面的例子中,将匹配到的"apple"全部替换为"orange",将匹配到的"banana"全部替换为"grape"。

2023-05-05 10:02:22 527

原创 Python趋势外推预测模型实验完整版

通过本次实验,我学习了趋势外推预测模型(佩尔预测模型)的基本原理和建立方法,了解了如何使用Python编程实现预测模型。同时,我们也使用了某省会全社会客运量预测实例,对趋势外推预测模型(佩尔预测模型)进行了实际应用和分析。在实验中,我掌握了数据预处理、模型训练和结果评估等关键技术,对于今后的数据分析和预测工作将有很大的帮助。同时在这个过程之中也出现了一些问题,但通过查阅相关资料最终这些问题都得以解决。

2023-05-04 09:53:43 442

原创 Python非线性回归预测模型实验完整版

通过本次实验,我学习了非线性回归预测模型的基本原理和建立方法,了解了如何使用Python编程实现预测模型。同时,我们也使用了某省会全社会客运量预测实例,对非线性回归模型进行了实际应用和分析。在实验中,我掌握了数据预处理、模型训练和结果评估等关键技术,对于今后的数据分析和预测工作将有很大的帮助。同时在这个过程之中也出现了一些问题,但通过查阅相关资料最终这些问题都得以解决。在这个过程中我的动手实践能力的到提升,也让我明白了实际动手操作的重要性,在实际操作中可以发现很多平时发现不了的问题,通过实践最终都得以解决。

2023-05-03 08:36:23 833

原创 Python多元线性回归预测模型实验完整版

通过本次实验,我学习了多元线性回归预测模型的基本原理和建立方法,了解了如何使用Python编程实现预测模型。同时,我们也使用水路客运量预测实例,对线性回归模型进行了实际应用和分析。在实验中,我掌握了数据预处理、模型训练和结果评估等关键技术,对于今后的数据分析和预测工作将有很大的帮助。同时在这个过程之中也出现了一些问题,但通过查阅相关资料最终这些问题都得以解决。在这个过程中我的动手实践能力的到提升,也让我明白了实际动手操作的重要性,在实际操作中可以发现很多平时发现不了的问题,通过实践最终都得以解决。

2023-05-02 08:51:59 1193

原创 类加载器和双亲委派模型面试总结

启动类加载器(Bootstrap ClassLoader),使用c++实现,是虚拟机的一部分。其他所有类加载器,使用Java实现,独立于虚拟机,且全部继承自抽象类 java.lang.ClassLoader。每一个类都有一个对应它的类加载器。系统中的 ClassLoader 在协同工作的时候会默认使用双亲委派模型。如果一个类加载器收到了类加载的请求,系统会首先判断当前类是否已经被加载过,已经被加载的类会直接返回,否则才会尝试加载。

2023-05-01 08:04:04 941

原创 Linux man 命令详解

f:显示命令或函数的简短描述。-k:使用关键字搜索所有与该关键字相关的手册页。-S:指定手册页的搜索路径。-a:显示所有与命令或函数相关的手册页。-w:显示命令或函数的手册页文件路径。-C:指定手册页的格式。-l:显示所有手册页的列表。-p:显示函数的原型。-s:显示指定节的手册页。-u:显示未压缩的手册页。-h:显示帮助信息-M:指定手册页的源路径。

2023-04-30 07:54:10 1257

原创 Java中几种常量池面试总结

运行时常量池是为了加速Java程序的运行和节省内存资源而设置的。运行时常量池相对于class文件的常量池的另外一个重要特征是具备动态性,Java语言并不要求常量一定只有编译期才能产生,也就是并非预置入class文件中常量池的内容才能进入方法区运行时常量池,运行期间也可能将新的常量放入池中。总结:运行时常量池是在类加载完成之后,将每个class常量池中的符号引用值转存到运行时常量池中,也就是说,每个class都有一个运行时常量池,类在解析之后,将符号引用替换成直接引用,与字符串常量池中的引用值保持一致。

2023-04-29 08:10:09 1467

原创 标准错误重定向

a:显示所有匹配的 man page。-f:显示与指定名称相关的命令或函数。-k:显示与指定关键字相关的 man page。-w:仅显示 man page 的路径名,不进行分页显示。-C:指定 man page 的缓存时间。-I:忽略大小写。-S:指定 man page 所在的软件包。-M:指定 man page 的搜索路径。-P:指定分页程序。-p:指定搜索路径。-t:将 man page 输出为 PostScript 格式文件。-h:显示帮助信息。1 :用户命令。2 :系统调用。

2023-04-28 09:56:56 632

原创 Python 一元线性回归模型预测实验完整版

线性回归模型属于经典的统计学模型,该模型的应用场景是根据已 知的变量(自变量)来预测某个连续的数值变量(因变量)。一元线性回归模型也被称为简单线性回归模型,是指模型中只含有一个自变量和一个因变量,用来建模的数据集可以表示成{(x1,y1),(x2,y2),……由于建模时的自变量值和因变量值都是已知的,因此求解误差平方和最小值的问题就是求解函数J(a,b)的最小值,而该函数的参数就是回归系数a和b。模型中的a和b统称为回归系数,误差项ε的存在主要是为了平衡等号两边的值,通常被称为模型无法解释的部分。

2023-04-27 10:05:03 518

原创 Java线程池常见面试题详解

CachedThreadPool 和上一种线程池 FixedThreadPool 的情况恰恰相反,FixedThreadPool 的情况是阻塞队列的容量是无限的,而这里 CachedThreadPool 是线程数可以无限扩展,所以 CachedThreadPool 线程池并不需要一个任务队列来存储任务,因为一旦有任务被提交就直接转发给线程或者创建新线程来执行,而不需要另外保存它们。每当提交一个任务就创建一个工作线程,如果工作线程数量达到线程池初始的最大数,则将提交的任务存入到池队列中。

2023-04-26 08:23:07 412

原创 SpringBoot自动配置原理详解

那如果面试官问,说说你对 SpringBoot 自动配置的理解,我们该怎么回答?

2023-04-24 08:01:46 1450 3

原创 垃圾收集器面试总结(二)

在以前的分代收集中,新生代的规模一般都比老年代要小许多,新生代的收集也比老年代要频繁许多,那回收新生代中的对象时也面临相同的问题,如果回收新生代时也不得不同时扫描老年代的话,那么Minor GC的效率可能下降不少。垃圾回收的并发标记阶段,gc线程和应用线程是并发执行的,所以一个对象被标记之后,应用线程可能篡改对象的引用关系,从而造成对象的漏标、误标,其实误标没什么关系,顶多造成浮动垃圾,在下次gc还是可以回收的,但是漏标的后果是致命的,把本应该存活的对象给回收了,从而影响的程序的正确性。

2023-04-22 07:35:35 436

原创 垃圾收集器面试总结(一)

空间碎片过多时,将会给大对象分配带来很大麻烦,往往会出现老年代还有很大空间剩余,但是无法找到足够大的连续空间来分配当前对象,不得不提前触发一次Full GC。为了解决这个问题,CMS收集器提供了一个-XX:+UseCMSCompactAtFullCollection开关参数(默认就是开启的),用于在CMS收集器顶不住要进行FullGC时开启内存碎片的合并整理过程,内存整理的过程是无法并发的,空间碎片问题没有了,但停顿时间不得不变长。

2023-04-21 07:35:40 535

原创 垃圾收集算法面试总结

后续的收集算法都是基于这种思路并对其不足进行改进而得到的。

2023-04-20 08:11:29 353

原创 垃圾回收面试总结

虚拟机栈(栈帧中的本地变量表)中引用的对象:每个线程在运行时都有一个虚拟机栈,其中包含了多个栈帧,每个栈帧代表了一次方法调用。栈帧中的本地变量表可以存储基本类型和对象引用,并且在方法执行过程中会动态变化。只要虚拟机栈中的某个栈帧还在执行,那么该栈帧中的本地变量表中引用的对象就是可达的。方法区中的类静态属性引用的对象:类的静态属性存放在方法区中,而且它们的生命周期与类的生命周期相同。如果某个类的静态属性引用了某个对象,那么这个对象就是可达的。

2023-04-19 08:31:29 647

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除