java
文章平均质量分 66
andy.cao
这个作者很懒,什么都没留下…
展开
-
mybatisplus动态拼查询条件
mybatis plus 动态查询,多字段查询,通过反射拼接字段原创 2022-10-11 18:21:46 · 2916 阅读 · 0 评论 -
springboot 国际化乱码问题 IDEA配置
配置文件IDEA配置原创 2022-05-02 22:48:41 · 536 阅读 · 0 评论 -
布隆过滤器的使用
布隆过滤器1、单机版2、redis版本docker版本的布隆过滤器增加一个增加多个判断是否存在原创 2022-04-06 00:09:34 · 772 阅读 · 0 评论 -
DDD中的对象
“对象”这个词,对我们来说并不陌生。以最常见的面向对象为例,软件系统中的任何事物都被认为是一种对象。针对如何设计和实现这些对象,业内也有一些对应的开发模式。例如,一种传统的做法是从数据的角度来规划对象的组织形式,即先设计数据库模型,然后基于数据库模型设计对象,这些对象内部通常只包含数据属性的定义,也就是说整个开发过程是数据驱动(Data Driven)的。![在这里插入图片描述](https://img-blog.csdnimg.cn/19f8698645f34ec2b50edb3696629ff3.png原创 2022-04-05 23:49:46 · 714 阅读 · 0 评论 -
微服务架构最佳实践 - 方法篇
实施微服务需要避免踩的陷阱,简单提炼为:微服务拆分过细,过分强调“small”。微服务基础设施不健全,忽略了“automated”。微服务并不轻量级,规模大了后,“lightweight”不再适应。针对这些问题,今天我们看看微服务最佳实践应该如何去做。我会分两期介绍这部分内容,今天是微服务架构最佳实践的方法篇,下一期是基础设施篇。服务粒度针对微服务拆分过细导致的问题,我建议基于团队规模进行拆分,类似贝索斯在定义团队规模时提出的“两个披萨”理论(每个团队的人数不能多到两张披萨都不够吃的地步),分享一个我认为微原创 2022-04-05 15:59:36 · 291 阅读 · 0 评论 -
分层架构和SOA
高可用架构模式在最近几十年的迅猛发展来说,可扩展架构模式的发展可以说是步履蹒跚,最近几年火热的微服务模式算是可扩展模式发展历史中为数不多的亮点,但这也导致了现在谈可扩展的时候必谈微服务,甚至微服务架构都成了架构设计的银弹,高性能也用微服务、高可用也用微服务,很多时候这样的架构设计看起来高大上,实际上是大炮打蚊子,违背了架构设计的“合适原则”和“简单原则”。为了帮助你在实践中更好的进行可扩展架构设计,我将分别介绍几种可扩展架构模式,指出每种架构模式的关键点和优缺点。今天我来介绍传统的可扩展模式,包括分层架构和原创 2022-04-05 15:20:15 · 9567 阅读 · 0 评论 -
系统降级熔断限流和排队
这类问题的主要原因在于系统压力太大、负载太高,导致无法快速处理业务请求,由此引发更多的后续问题。最常见的情况就是,数据库慢查询将数据库的服务器资源耗尽,导致读写超时,业务读写数据库时要么无法连接数据库、要么超时,最终用户看到的现象就是访问很慢,一会儿访问抛出异常,一会儿访问又是正常结果。如果进一步探究,导致接口级故障的原因可以分为两大类:内部原因:包括程序 bug 导致死循环,某个接口导致数据库慢查询,程序逻辑不完善导致耗尽内存等。外部原因:包括黑客攻击,促销或者抢购引入了超出平时几倍甚至几十倍的用户,第三原创 2022-04-05 01:04:06 · 1479 阅读 · 1 评论 -
如何保证消息仅仅被消费一次?
你好,我是唐扬。通过上一节课,我们在电商系统中增加了消息队列对峰值写流量做削峰填谷,对次要的业务逻辑做异步处理,对不同的系统模块做解耦合。因为业务逻辑从同步代码中移除了,所以我们也要有相应的队列处理程序来处理消息、执行业务逻辑,这时你的系统架构变成了下面的样子:这是一个简化版的架构图,实际上,随着业务逻辑越来越复杂,会引入更多的外部系统和服务来解决业务上的问题。比如我们会引入 Elasticsearch 来解决商品和店铺搜索的问题,也会引入审核系统对售卖的商品、用户的评论做自动的和人工的审核,你会越来越多地原创 2022-03-31 00:21:07 · 690 阅读 · 0 评论 -
Snowflake算法
UUID 不能作为 ID 的另一个原因是它不具备业务含义,其实现实世界中使用的 ID 中都包含有一些有意义的数据,这些数据会出现在 ID 的固定的位置上。比如说我们使用的身份证的前六位是地区编号;7~14 位是身份证持有人的生日;不同城市电话号码的区号是不同的;你从手机号码的前三位就可以看出这个手机号隶属于哪一个运营商。而如果生成的 ID 可以被反解,那么从反解出来的信息中我们可以对 ID 来做验证,我们可以从中知道这个 ID 的生成时间,从哪个机房的发号器中生成的,为哪个业务服务的,对于问题的排查有一定的原创 2022-03-29 22:58:37 · 181 阅读 · 0 评论 -
写入数据量增加时,如何实现分库分表
我们学习了在高并发下数据库的一种优化方案:读写分离,它就是依靠主从复制的技术使得数据库实现了数据复制为多份,增强了抵抗大量并发读请求的能力,提升了数据库的查询性能的同时,也提升了数据的安全性。当某一个数据库节点,无论是主库还是从库发生故障时,我们还有其他的节点中存储着全量的数据,保证数据不会丢失。此时,你的电商系统的架构图变成了下面这样:这时,公司 CEO 突然传来一个好消息,运营推广持续带来了流量,你所设计的电商系统的订单量突破了五千万。订单数据都是单表存储的,你的压力倍增,因为无论是数据库的查询还是写入原创 2022-03-29 22:38:45 · 730 阅读 · 0 评论 -
数据库优化方案(一):查询请求增加时,如何做主从分离?
现在的架构图如下所示:此时,你的数据库还是单机部署,依据一些云厂商的 Benchmark 的结果,在 4 核 8G 的机器上运行 MySQL 5.7 时,大概可以支撑 500 的 TPS 和 10000 的 QPS。这时,运营负责人说正在准备双十一活动,并且公司层面会继续投入资金在全渠道进行推广,这无疑会引发查询量骤然增加的问题。那么今天,我们就一起来看看当查询请求增加时,应该如何做主从分离来解决问题。主从读写分离其实,大部分系统的访问模型是读多写少,读写请求量的差距可能达到几个数量级。这很好理解,刷朋友圈原创 2022-03-29 22:13:26 · 239 阅读 · 0 评论 -
如何让系统易于扩展
从架构设计上来说,高可扩展性是一个设计的指标,它表示可以通过增加机器的方式来线性提高系统的处理能力,从而承担更高的流量和并发。如何提升系统性能?峰值的流量不可控。一般来说,基于成本考虑,在业务平稳期,我们会预留 30%~50% 的冗余以应对运营活动或者推广可能带来的峰值流量,但是当有一个突发事件发生时,流量可能瞬间提升到 2~3 倍甚至更高,我们还是以微博为例。微博下面,或围观,或互动,微博的流量短时间内增长迅速,微博信息流也短暂出现无法刷出新的消息的情况。那我们要如何应对突发的流量呢?架构的改造已经来不原创 2022-03-29 00:04:01 · 1580 阅读 · 0 评论 -
系统怎样做到高可用
系统怎样做到高可用本节课,我会继续带你了解高并发系统设计的第二个目标——高可用性。你需要在本节课对提升系统可用性的思路和方法有一个直观的了解,这样,当后续对点讲解这些内容时,你能马上反应过来,你的系统在遇到可用性的问题时,也能参考这些方法进行优化。高可用性(High Availability,HA)是你在系统设计时经常会听到的一个名词,它指的是系统具备较高的无故障运行的能力。我们在很多开源组件的文档中看到的 HA 方案就是提升组件可用性,让系统免于宕机无法服务的方案。比如,你知道 Hadoop 1.0 中原创 2022-03-28 23:34:30 · 1789 阅读 · 0 评论 -
java内存模型
Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域。根据《Java虚拟机规范(第2版)》规定,Java虚拟机所管理的内存包括以下几个运行区域。如下图所示:这些区域有各自的用途,各自的创建和销毁时间(各自的生命周期)。程序记数器 (线程私有,内存区域唯一在Java虚拟机规范中没有规定任何OutOfMemoryError情况的区域)它可以看做是当前线程所执行的字节码的行号指示器。在虚拟机概念模型里(仅是概念模型),字节码解释器工作时就是通过改变这个计数器的值来选取下原创 2021-10-26 15:28:07 · 81 阅读 · 0 评论 -
java中抽象类可以实现接口吗
抽象类可以实现接口这是一种思想,当你自己的类中有共用的方法的时候,就可以在抽象类中先进行实现,然后再用你的类继承这个抽象类,如果你直接用类实现接口,那是所有方法都必须实现的...原创 2021-03-20 13:52:25 · 1998 阅读 · 0 评论 -
各个大厂面试题(附答案)
面试准备简历重点放在专业技能和项目经验两块1.你的简历就是你给面试官提供的考点,简历上的东西必须自己Hold住,万一自己写的东西被问住了,会很尴尬,给面试官留下的印象也不好,所以就是会啥写啥2.技术栈最好不要写精通,你敢写面试官就敢问,被问倒了很尴尬的,写熟悉,了解就行怎么投简历我这里强烈建议找人内推,这样简历通过的概率大些,如果找不到,可以试试脉脉,我就是从脉脉投的简历,把状态改成寻找机会就行,会有很多人找你的推荐一个简历制作模版,我一直用的,https://www.polebrief.co转载 2021-03-18 09:21:48 · 6959 阅读 · 0 评论 -
Mybatis plus 忽略表中映射的字段
Mybatis-plus忽略表中映射的字段:Mybatis-plus使用entity和数据库进行关联映射,有时候可能有些字段,在当前表中不存在,但是操作的时候,又需要进行使用,所以有时候就需要进行忽略。具体如何忽略如下:@TableField(exist = false):表示该属性不是表中字段,但又是必须使用的。@TableField(exist = true):表示该属性是表中字段。Mybatis-plus其他相关注解含义:@TableField(exist = false):表示该属原创 2021-03-16 14:22:43 · 11395 阅读 · 0 评论 -
Java面试
Java问题Java问题volatile关键字底层原理保证线程之间变量的可见性。内存屏障,防止指令重排序。什么叫指令重排序?就是执行程序时,为了提高性能,编译器和执行器会对指令做重排序。在并发线程下, 不能保证原子性。...原创 2021-03-08 10:52:58 · 71 阅读 · 0 评论 -
Mysql中的In和not exists
结论小表做外表的情况下对于主键来说, not exists 比 not in 快。对于普通索引来说, not in 和 not exists 差不了多少,甚至 not in 会稍快。大表做外表的情况下对于主键来说, not in 比 not exists 快。对于普通索引来说, not in 和 not exists 差不了多少,甚至 not in 会稍快。用法讲解为了方便,我们创建两张表 t1 和 t2 。并分别加入一些数据。(id为主键,name为普通索引)--t1..原创 2020-11-06 10:12:53 · 582 阅读 · 0 评论 -
SpringBoot项目接口规范-参数校验、异常处理
前言一个接口大致分为四个部分组成:接口地址(url)、接口请求方式(get、post等)、请求数据(request)、响应数据(response)所需依赖包这里用的是SpringBoot配置项目,本文讲解的重点是后端接口,所以只需要导入一个spring-boot-starter-web包就可以了:<!--web依赖包,web应用必备--><dependency><groupId>org.springframework.boot</g...原创 2020-11-04 10:29:57 · 1741 阅读 · 0 评论