自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 初识微服务

微服务项目是一种将应用程序拆分为小型、独立且可独立部署的服务单元的架构模式。与传统的单体式应用相比,微服务项目可以更加灵活、可扩展和易于维护。每个微服务都有自己的业务逻辑和数据库,并通过API接口与其他微服务进行通信。微服务项目通常使用轻量级的通信机制(如HTTP)进行服务之间的交互,并使用容器化技术(如Docker)实现部署和管理。与Spring Cloud的关系或区别是,Spring Cloud是一个用于构建和管理微服务项目的开发框架。它提供了一系列的库和工具,以简化微服务的开发、部署和管理过程。

2023-09-20 15:46:10 96 1

原创 Redis缓存有哪些问题,如何解决?

缓存污染会随着数据的持续增加而逐渐显露,随着服务的不断运行,缓存中会存在大量的永远不会再次被访问的数据。缓存空间是有限的,如果缓存空间满了,再往缓存里写数据时就会有额外开销,影响Redis性能。这部分额外开销主要是指写的时候判断淘汰策略,根据淘汰策略去选择要淘汰的数据,然后进行删除操作。缓存污染问题说的是缓存中一些只会被访问一次或者几次的的数据,被访问完后,再也不会被访问到,但这部分数据依然留存在缓存中,消耗缓存空间。

2023-09-17 17:26:01 114 1

原创 单元测试面试问题

比较推荐单元测试与具体实现代码同步进行这个方案的。只有对需求有一定的理解后才能知道什么是代码的正确性,才能写出有效的单元测试来验证正确性,而能写出一些功能代码则说明对需求有一定理解了。使用单元测试可以有效地降低程序出错的机率,提供准确的文档,并帮助我们改进设计方案等等。单元测试(unit testing),是指对软件中的最小可测试单元进行检查和验证。单元测试不是越多越好,而是越有效越好!

2023-09-15 20:13:51 347 1

原创 多线程的出现是要解决什么问题的? 本质什么?

另外可以通过synchronized和Lock来保证有序性,很显然,synchronized和Lock保证每个时刻是有一个线程执行同步代码,相当于是让线程顺序执行同步代码,自然就保证了有序性。而普通的共享变量不能保证可见性,因为普通共享变量被修改之后,什么时候被写入主存是不确定的,当其他线程去读取时,此时内存中可能还是原来的旧值,因此无法保证可见性。在Java中,对基本数据类型的变量的读取和赋值操作是原子性操作,即这些操作是不可被中断的,要么执行,要么不执行。要保证线程安全,并不是一定就要进行同步。

2023-09-08 19:57:42 270 1

原创 SpringBoot入门 - 添加Logback日志

著作权归@pdai所有 原文链接:https://pdai.tech/md/spring/springboot/springboot-x-hello-logback.html。在配置日志时需要考虑哪些因素?

2023-09-06 21:23:34 108 1

原创 Java是怎么解决并发问题的?

JMM本质上可以理解为,Java 内存模型规范了 JVM 如何提供按需禁用缓存和编译优化的方法。在Java中,对基本数据类型的变量的读取和赋值操作是原子性操作,即这些操作是不可被中断的,要么执行,要么不执行。上面4个语句只有语句1的操作具备原子性。也就是说,只有简单的读取、赋值(而且必须是将数字赋值给某个变量,变量之间的相互赋值不是原子操作)才是原子操作。从上面可以看出,Java内存模型只保证了基本读取和赋值是原子性操作,如果要实现更大范围操作的原子性,可以通过synchronized和Lock来实现。

2023-09-05 21:02:05 159 1

原创 Linux基础

sudo 允许一般用户使用 root 可执行的命令,不过只有在 /etc/sudoers 配置文件中添加的用户才能使用该指令。著作权归@pdai所有 原文链接:https://pdai.tech/md/devops/linux/linux.htm。为了加快对磁盘文件的读写速度,位于内存中的文件数据不会立即同步到磁盘上,因此关机之前需要先进行 sync 同步操作。YUM 基于 RPM,具有依赖管理功能,并具有软件升级的功能。man 是 manual 的缩写,将指令的具体信息显示出来。

2023-09-03 19:42:58 82

原创 Spring的特性和优势

著作权归@pdai所有 原文链接:https://pdai.tech/md/spring/spring-x-framework-introduce.html。从使用Spring 框架的。从Spring 框架的。

2023-08-29 21:36:15 96 1

原创 创建型 - 单例模式

考虑以下单例模式的实现,该 Singleton 在每次序列化的时候都会创建一个新的实例,为了保证只创建一个实例,必须声明所有字段都是 transient,并且提供一个 readResolve() 方法。加锁操作只需要对实例化那部分的代码进行,只有当 uniqueInstance 没有被实例化时,才需要进行加锁。以下实现中,私有静态变量 uniqueInstance 被延迟实例化,这样做的好处是,如果没有用到该类,那么就不会实例化 uniqueInstance,从而节约资源。

2023-08-28 21:43:03 91 1

原创 理解Redis缓存问题

在高并发的业务场景下,数据库大多数情况都是用户并发访问最薄弱的环节。所以,就需要使用redis做一个缓冲操作,让请求先访问到redis,而不是直接访问Mysql等数据库。这样可以大大缓解数据库的压力。

2023-08-26 21:43:17 76

原创 统一封装接口

著作权归@pdai所有 原文链接:https://pdai.tech/md/spring/springboot/springboot-x-interface-response.html。现在大多数项目采用前后分离的模式进行开发,统一返回方便前端进行开发和封装,以及出现时给出响应编码和信息。包含公共的接口返回时间,状态status, 消息message, 以及数据data。以查询某个用户接口而言,如果没有封装, 返回结果如下。如果还有其它业务状态码,也可以放到这个类中。在接口返回时调用, 以用户接口为例。

2023-08-25 22:10:41 150 1

原创 常见面试基础面试题

第一点: 可变和适用范围。每次对String的操作相当于生成一个新的String对象,而对StringBuffer和StringBuilder的操作是对对象本身的操作,而不会生成新的对象,所以对于频繁改变内容的字符串避免使用String,因为频繁的生成对象将会对系统性能产生影响。有可能,两个不相等的对象可能会有相同的 hashcode 值,这就是为什么在 hashmap 中会有冲突。相等 hashcode 值的规定只是说如果两个对象相等,必须有相同的hashcode 值,但是没有关于不相等对象的任何规定。

2023-08-24 22:36:36 77 1

原创 JDK代理

JDK动态代理是有JDK提供的工具类Proxy实现的,动态代理类是在运行时生成指定接口的代理类,每个代理实例(实现需要代理的接口)都有一个关联的调用处理程序对象,此对象实现了InvocationHandler,最终的业务逻辑是在InvocationHandler实现类的invoke方法上。

2023-08-23 20:55:15 83 1

原创 Redis入门 - 数据类型:5种基础数据类型详解

Redis所有的key(键)都是字符串。我们在谈基础数据结构时,讨论的是存储值的数据类型,主要包括。

2023-08-21 21:03:30 75 1

原创 lambda表达式

lambda表达式仅能放入如下代码: 预定义使用了 @Functional 注释的函数式接口,自带一个抽象函数的方法,或者SAM(Single Abstract Method 单个抽象方法)类型。这些称为lambda表达式的目标类型,可以用作返回类型,或lambda目标代码的参数。类似的,如果一个方法接受声明于 java.util.function 包内的接口,例如 Predicate、Function、Consumer 或 Supplier,那么可以向其传lambda表达式。

2023-08-20 19:02:53 77 1

原创 ThreadLocal造成内存泄露的问题

的强引用, 因为final static 修饰的 ThreadLocal 并不会释放, 而ThreadLocalMap 对于 Key 虽然是弱引用, 但是强引用不会释放, 弱引用当然也会一直有值, 同时创建的LocalVariable对象也不会释放, 就造成了内存泄露;如果LocalVariable对象不是一个大对象的话, 其实泄露的并不严重,找到Key对应的Entry, 并且清除Entry的Key(ThreadLocal)置空, 随后清除过期的Entry即可避免内存泄露。

2023-08-18 21:27:49 106 1

原创 Synchronized的使用

示例1@Override// 同步代码块形式——锁为this,两个线程使用的锁是一样的,线程1必须要等到线程0释放了该锁后,才能执行System.out.println("我是线程" + Thread.currentThread().getName());try {System.out.println(Thread.currentThread().getName() + "结束");t1.start();t2.start();我是线程Thread-0Thread-0结束。

2023-08-17 15:48:52 76 1

原创 代码质量 - 统一风格:统一命名规范详解

一般地,包命名常采用顶级域名作为前缀,例如com,net,org,edu,gov,cn,io等,随后紧跟公司/组织/个人名称以及功能模块名称。简单来说,接口也是类(不太严谨),所以,接口的名称的书写也应该符合类名书写规范,首字母应该大写,与普通类名不同的是,接口命名时通常采用形容词或动词来描述接口的动作行为。​ 为了便于阅读,在通常情况下,建议接口实现类使用“Impl作为后缀”,不建议使用大写的“I”作为接口前缀(PS:当然也有很多代码是用I开头的),下面是接口和接口实现类的书写示例。

2023-08-15 21:11:09 332 1

原创 数据库基础新手必看

优先处理 AND,当一个过滤表达式涉及到多个 AND 和 OR 时,可以使用 () 来决定优先级,使得优先级关系更清晰。为结束符,而存储过程中也包含了分号,因此会错误把这部分分号当成是结束符,造成语法错误。UPDATE 触发器包含一个名为 NEW 和一个名为 OLD 的虚拟表,其中 NEW 是可以被修改的,而 OLD 是只读的。来组合两个查询,如果第一个查询返回 M 行,第二个查询返回 N 行,那么组合查询的结果一般为 M+N 行。分为左外连接,右外连接以及全外连接,左外连接就是保留左表没有关联的行。

2023-08-14 21:24:55 79

空空如也

空空如也

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

TA关注的人

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