
业务
自驱
ALOHA HEJA HE
展开
-
【架构师】解决方案架构师常用的5种类型架构图
这种类型的图表往往是低层次的,因为它包含了比其他图表更多的细节。这些关系图还可以帮助那些刚刚接触某个领域的开发人员,并为他们将要构建的内容提供有洞察力的上下文。使用这个图来描述系统是如何工作的,展示主要应用程序之间的连接,没有什么比服务关系图更适合了。这种类型的图的目标是显示应用程序中的所有内容以及它们是如何连接的。此图的目的是显示已经构建的内容以及系统当前的工作方式。作为解决方案架构师,我们必须能够在向正确的人推销我们的想法时提供正确类型的图表。它是一个中到高层次的图表,显示了工作流的所有部分。原创 2022-11-06 21:30:52 · 2568 阅读 · 0 评论 -
软件工程师真的只是编码吗?不,他有10个隐蔽的工作
招聘是很困难的,面试官需要很高的情商。成为一个好的面试官只是伟大的工程师以隐蔽的方式为他们的团队做贡献的另一种方式。更重要的是,代码审查是指导其他开发人员和扩展他们的思维/技能的一个很好的机会。这是一个遗憾,但在这篇文章中,我将向你展示伟大的工程师们所做的所有“隐藏的”工作,以建立令人敬畏的产品和职业生涯!如果你想成为一个伟大的工程师(并在你的职业生涯中取得成功) ,了解所有的“隐藏”工作会让你的工作变得更好。也许是一个缺失的按钮,一个提示用户的对话,一封确认邮件,处理一个特定的错误... ... 当。原创 2022-09-04 10:09:27 · 1431 阅读 · 1 评论 -
【golang】why 消费者定义接口,生产者返回实体struct?
消费者负责定义接口,即消费者所依赖的是一个接口;消费者定义如下://user.go// 第一对外所依赖的接口}}store: s,}}//db.gopackage db// 生产者实现消费者所需的接口依赖,注意该生产者可以供给多个消费者使用,实现所有消费者所需要的方法;}消费者 user.go 需要存储依赖才能执行与用户相关的业务逻辑。它不关心存储是什么,只是它有 2 个方法,Insert() 和 Get(),因此它能够创建和检索用户。...原创 2022-08-14 11:05:41 · 302 阅读 · 2 评论 -
【技巧】将数组均匀拆分或者一行数据拆等分多行,如何计算最终分组数或者行数?
参考: redis 源码:refreshMultiLine line:563 // redis/deps/linenoise/linenoise.c计算行数容量: int rows = (plen+l->len+l->cols-1)/l->cols; /* rows used by current buf. */故: rows = (total_len + row_len -1) / row_len ;...原创 2021-12-03 13:41:47 · 311 阅读 · 0 评论 -
SSO 网易实现方案参考
https://ken.io/note/sso-design-implement原创 2021-08-20 14:59:22 · 102 阅读 · 0 评论 -
ES install
1 ES启动遇到问题下载地址wgethttps://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.5.1-linux-x86_64.tar.gz集群模式运行在一台机器#打开第68行注释,ip替换host1等,多节点请添加多个ip地址,单节点可写按默认来#配置以下三者,最少其一#[discovery.seed_hosts, discovery.seed_providers, cluster.initial_...原创 2021-08-20 07:39:04 · 156 阅读 · 0 评论 -
http-filter -- 透传traceId
1 拦截器public class OkHttpTraceIdInterceptor implements Interceptor { @Override public Response intercept(Chain chain) throws IOException { String traceId = MDC.get(Constants.TRACE_ID); Request request = null; if (traceId != null) { .原创 2021-08-28 21:22:45 · 398 阅读 · 0 评论 -
Redis高性能问题---缓存热点---解决方案
1 缓存热点 对一些特别热点的数据大量请求访问,但是缓存只有一份,导致缓存个别分片压力升高;2 解决方案 复制多份缓存副本,将请求分散到多个缓存服务器上,减轻缓存热点导致的单台缓存服务器压力,并且打散每个副本的失效时间。 ...原创 2021-08-08 15:34:29 · 167 阅读 · 0 评论 -
Redis高性能问题---缓存雪崩--解决方案
1. 什么是缓存雪崩缓存雪崩是指当缓存失效(过期)后引起系统性能急剧下降的情况。当缓存过期被清除后,业务系统需要重新生成缓存,因此需要再次访问业务底层存储系统,再次进行运算,这个处理步骤耗时一般都会几十毫秒甚至上百毫秒。对于一个高并发的业务系统来说,几百毫秒内可能会接到几百上千个请求。由于旧的缓存已经被清除,新的缓存还未生成,并且处理这些请求的线程都不知道有其他线程正在生成缓存,因此所有的请求都会去重新生成缓存,都会去访问存储系统,从而对存储系统造成巨大的性能压力。这...原创 2021-08-08 15:22:58 · 315 阅读 · 0 评论 -
redis高性能问题--缓存穿透---解决方案
1. 什么是缓存穿透 是指缓存没有发挥作用,缓存并无业务数据,进而穿透到DB层进行查询。2. 那些情况导致的呢? 2.1 业务数据压根不存在 业务中没有数据,查询redis--->DB 都没有数据,缓存并没有起到分压作用。极有可能被黑客攻击或者故意访问不存在的业务数据,最终将存储系统拖垮。 2.1 -->解决方案 简单处理,不存在时redis缓存空值即可。保护底层存储系...原创 2021-08-06 18:47:57 · 168 阅读 · 0 评论 -
全栈监控--是什么样的?怎么用?
1 没有监控怎么样? 将无法进行自动化运维和资源调度;全栈系统监控,它就像是我们的眼睛,没有它,我们就不知道系统到底发生了什么,我们会无法管理或是运维整个分布式系统。2 监控系统完成的功能全栈监控; 关联分析; 跨系统调用的串联; 实时报警和自动处置; 系统性能分析;3全栈监控(三层监控)基础层:监控主机和底层资源。比如:CPU、内存、网络吞吐、硬盘 I/O、硬盘使用等。 中间层:就是中间件层的监控。比如:Nginx、Redis、ActiveM...原创 2021-08-01 16:34:56 · 540 阅读 · 0 评论 -
分布式架构--问题小结
0. 采用分布式系统架构后会出现很多的问题 一个线上故障的工单会在不同的服务和不同的团队中转过来转过去 每个团队都可能成为一个潜在的 DDoS 攻击者,除非每个服务都要做好配额和限流。 监控和查错变得更为复杂。除非有非常强大的监控手段。 服务发现和服务治理也变得非常复杂。 1.系统架构中的服务依赖性问题 1.1 如果非关键业务被关键业务所依赖,会导致非关键业务变成一个关键业务。(非关键业务不能阻塞关键业务) 1.2 服务依赖链中,出现“木...原创 2021-08-01 09:55:07 · 399 阅读 · 0 评论 -
全局ID -- 雪花算法
雪花算法(Snowflake)是一种生成分布式全局唯一ID的算法,生成的ID称为Snowflake IDs或snowflakes。这种算法由Twitter创建,并用于推文的ID。Discord和Instagram等其他公司采用了修改后的版本。一个Snowflake ID有64位元。前41位是时间戳,表示了自选定的时期以来的毫秒数。 接下来的10位代表计算机ID,防止冲突。 其余12位代表每台机器上生成ID的序列号,这允许在同一毫秒内创建多个Snowflake ID。SnowflakeID基于时间生成,故原创 2021-07-15 10:20:19 · 426 阅读 · 0 评论 -
系统设计思考
1 主要是向记录下业务扩展对设计的考验。 上层业务发生变化时,底层系统需不需要做迁移变更?重构变更?还是默认支持业务变更? y原创 2021-06-18 09:58:36 · 85 阅读 · 0 评论 -
【mysql】和阿里云db团队一起探讨20亿量级大表迁移变更方案纪要
1 一体化---单机数据化(全局二级索引) 2.0 超级mysql 读写分离一致性 (由mysql的最终一致性--->会话一致 全局一致) IO 分部存储 共享存储 物理复制---binlog消除 20-30%提升 polx/poldb 分离式的。 使用方式改变。 rds私有化 完全不能控制,polx团队的,重启mysql都是由阿里云团队辅助,诊断功能都不能用;dass 服务数据库自治服务,穿透drds,批量运维,优化的平台;2 rds实现能力部分---意淫---迁移到drds;...原创 2021-03-10 11:53:22 · 259 阅读 · 0 评论 -
【2020】年终总结-佩奇OFFER
1 收获: 较为完整的搭建了推荐系统,增强了业务sense,对关键的技术挑战有沉淀,并针对系统性能进行了持续优化,思路清晰,对用的基础技术原理也有一定的学习和理解。2 不足:对于一些服务的基础技术原理了解还不是很深。------待更新-------...原创 2021-02-09 19:33:13 · 177 阅读 · 0 评论 -
动吧旅游项目 首页菜单动态化实现 part8
背景用户希望在登陆以后基于权限的不同,在首页左侧呈现不同的菜单,如何实现呢?(可以采用同步或者异步请求)初步分析基于登陆用户id,查询用户对应的菜单信息然后进行呈现原理应用分析方案实现上可以基于同步或异步查询然后进行菜单数据呈现。最终解决方案用户登陆以后,基于用户登陆id查询用户对应的一级菜单,二级菜单然后存储到指定作用域,当进入系统首页后基于thymeleaf呈现用户菜单。Vo类的定义基于用户需求将查询到的一级菜单以及一级菜单对应的二级菜单查询出来,并进行封装。package com.原创 2020-08-24 18:02:08 · 277 阅读 · 1 评论 -
Shiro(动吧旅游项目) part7
官网:http://shiro.apache.org/Shiro安全框架简介Shiro概述Shiro是apache旗下一个开源安全框架,它将软件系统的安全认证相关的功能抽取出来,实现用户身份认证,权限授权、加密、会话管理等功能,组成了一个通用的安全认证框架。使用shiro就可以非常快速的完成认证、授权等功能的开发,降低系统成本。用户在进行资源访问时,要求系统要对用户进行权限控制,其具体流程如图-1所示:Shiro概要架构在概念层面,Shiro 架构包含三个主要的理念,如图其中:1)Sub原创 2020-08-24 18:01:57 · 473 阅读 · 0 评论 -
AOP切面编程(动吧旅游项目) part6
Spring AOP简介AOP 是什么?AOP(Aspect Orient Programming)是一种设计思想,是软件设计领域中的面向切面编程,它是面向对象编程(OOP)的一种补充和完善。它以通过预编译方式和运行期动态代理方式,实现在不修改源代码的情况下给程序动态统一添加额外功能的一种技术。如图AOP与OOP字面意思相近,但其实两者完全是面向不同领域的设计思想。实际项目中我们通常将面向对象理解为一个静态过程(例如一个系统有多少个模块,一个模块有哪些对象,对象有哪些属性),面向切面的运行期代理方式原创 2020-08-24 18:01:46 · 592 阅读 · 0 评论 -
动吧旅游项目 用户模块的实现 part5
知识点:pagehelper的使用:1.引入坐标<dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper-spring-boot-starter</artifactId> <version>1.2.3</version> </de原创 2020-08-24 18:01:37 · 354 阅读 · 0 评论 -
动吧旅游项目 角色管理模块 part4
角色管理设计说明业务设计说明本模块主要实现的是企业内部角色(岗位)的管理,可以在添加角色时,为角色分配资源访问权限,最后将角色再分配给用户原型设计说明基于用户需求,通过静态页面为用户呈现角色模块的基本需求。当在主页点击角色管理时,呈现角色列表页面在列表页面点击添加按钮时,呈现角色编辑页面,在列表页面点击编辑按钮时,呈现角色编辑页面,如图说明:假如客户对此原型进行了确认,后续则可以基于此原型进行研发。API设计说明角色管理业务后台API分层架构及调用关系如图角色管理列表页面呈原创 2020-08-24 18:01:21 · 381 阅读 · 0 评论 -
动吧旅游项目 菜单管理模块 part 3
业务设计说明菜单管理又称为资源管理,是系统资源对外的表现形式。本模块主要是实现对菜单进行添加、修改、查询、删除等操作。菜单表与角色表是多对多的关系,在表设计时,多对多关系通常由中间表(关系表)进行维护,如图:基于角色菜单表的设计,其角色和菜单对应的关系数据要存储到关系表中,其具体存储形式,如图:原型设计说明基于用户需求,实现菜单静态页面(html/css/js),通过静态页面为用户呈现菜单模块的基本需求实现。当在主页左侧菜单栏,点击菜单管理时,在主页内容呈现区,呈现菜单列表页面,如图:原创 2020-08-24 18:01:10 · 500 阅读 · 0 评论 -
动吧旅游项目 日志模块 part2
功能简介:基于用户名查询信息:在log_list中$(".input-group-btn").on("click",".btn-search",doQueryObjects) 添加方法://处理查询按钮事件 function doQueryObjects(){ //1.定义参数 $("#pageId").data("pageCurrent",1);//设置当前页码值 doGetObjects();//注意log_list和page里面doGetObjects()是原创 2020-08-24 18:00:53 · 294 阅读 · 0 评论 -
动吧旅游 生态系统项目 part 1
产品功能的实现:1.首先实现软件的功能;2.学会控制;3.运维(项目运行时日志的分析,项目的布署,项目的拓展)1. 项目简介1.1概述动吧旅游生态系统,应市场高端用户需求,公司决定开发这样的一套旅游系统,此系统包含旅游电商系统(广告子系统,推荐子系统,评价子系统,商品子系统,订单子系统,…),旅游分销系统(分销商的管理),旅游业务系统(产品研发,计调服务,系统管理,…),,。。。1.2原型分析基于用户需求,进行原型设计(基于html+css+js进行静态页面实现)。例如系统登录页面:(boo原创 2020-08-24 17:59:55 · 735 阅读 · 0 评论 -
京淘项目day14
1.Redis分片机制1.1分片即使说明前提说明:redis可以通过修改内存的大小,实现数据的存储,但是内存的资源不宜设置的过大,因为很多的时间都浪费在内存的寻址上需求: 如果有海量的数据,需要redis存储 问:应该如何处理?解决方案:采用Redis分片机制 实现内存数据的扩容知识点: 采用分片机制 主要的目的就是为了实现内存扩容.从而解决海量数据存储的问题用户在使用分片机制时,将多台redis当做1台使用.redis储存的是不同的数据1.2 Redis分片搭建步骤1.2.1分片节点说原创 2020-08-23 16:21:59 · 200 阅读 · 0 评论 -
京淘项目day13
1.利用Redis实现商品分类的缓存业务当用户点击商品分类按钮时,应该实现缓存查询.思路:1).准备key=“ITEM_CAT::”+parentID2).准备value="JSON"串3).首先查询redis缓存有: 直接获取缓存数据返回给用户.没有: 直接查询数据库,之后将返回值结果保存到redis中,方便下次使用.1.1 编辑ItemCatController@RequestMapping("/list") public List<EasyUITree> find原创 2020-08-23 16:21:38 · 156 阅读 · 0 评论 -
京淘项目day12
1. Redis 缓存机制1.1准备工作1).还原端口号信息2).修改图片上传地址3).修改HOSTS文件4).修改nginx.conf文件修改完成之后,重启nginx服务器.1.2为什么要引入缓存说明:提供用户查询数据的速度.1.3 缓存设计的因素缓存的存储的数据结构应该 K-V结构. key是唯一标识符.缓存的运行环境 应该让缓存运行在内存中.缓存的开发语言 C语言开发缓存中的内存优化策略 LRU算法/LFU算法缓存数据有效性的设定 多久超时如何防止内存数据丢失原创 2020-08-23 16:21:15 · 174 阅读 · 0 评论 -
京淘项目day08
1.实现图片的回显1.1准备虚拟路径@Servicepublic class FileServiceImpl implements FileService { private static Set<String> imageTypeSet = new HashSet<>(); private String localDirPath = "D:/tena/images"; private String urlPath="http://image.jt.c原创 2020-08-23 16:20:53 · 276 阅读 · 0 评论 -
京淘项目Day11
数据库高可用实现:1.搭建数据库主从2.实现数据库读写分离原创 2020-08-23 16:19:45 · 132 阅读 · 0 评论 -
京淘项目day10
远程连接虚拟机失败1.检查双方IP地址是否正常1.检查windows IP地址2.检查Linux的ip时,没有发现IP地址:则重启网卡即可.解决办法1;service NetworkManager stop chkconfig NetworkManager off 永久关闭 Manager网卡service network restart解决办法2://命令1:systemctl restart network //命令2:sudo service networ原创 2020-08-23 16:19:25 · 222 阅读 · 0 评论 -
京淘项目day07
1. 商品得上架/下架操作1.1业务分析当用户点击商品上架/下架的操作时,应该修改数据库中的状态信息status.上架 status = 1, 下架 status = 21.2 页面URL分析1.3 页面JS分析1.4 实现RestFul调用1.4.1 重构页面url地址1.4.2 编辑ItemController/** * 利用restFul方式实现状态修改. * 1./item/1 status=1 * 2./item/2 status=2 */ @Re原创 2020-08-23 16:17:31 · 170 阅读 · 0 评论 -
京淘项目day06
1.商品的CRUD操作1.1关于JS的数据校验说明1.1.1.必填项<td><input class="easyui-textbox" type="text" name="title" data-options="required:true" style="width: 280px;"></input></td>1.1.2价格校验<input class="easyui-numberbox" type="text" name="priceVi原创 2020-08-23 16:17:08 · 142 阅读 · 0 评论 -
京淘项目day04
1.关于项目打包/发布问题说明1.1利用maven工具项目打包说明: 父级JT 其中包含了2个子级项目jt-manager 依赖于jt-common.所以项目打包是有顺序的.打包删除:打包选项:打包完成页面:打包位置a)本地仓库中:b)target目录中:1.3SpringBoot项目发布说明: springBoot项目中,内置了tomcat服务器. 所以发布项目时,只需要通过java命令让程序执行即可.JAVA命令: java -jar xxxxx.jar/war发原创 2020-08-23 16:16:43 · 205 阅读 · 0 评论 -
【jemter】安装
1 Mac 下载https://mirrors.tuna.tsinghua.edu.cn/apache//jmeter/binaries/apache-jmeter-5.2.1.tgz2 解压配置tar zxvf apache-jmeter-5.0.tgz配置:~/.bash_profileexport JMETER_HOME=/Users/stefan/MyProjects/apache-jmeter-5.0 export PATH=$JAVA_HOME/bin:$PATH:..原创 2020-05-24 15:59:36 · 273 阅读 · 0 评论 -
【规则引擎】多种规则引擎(处理复杂业务逻辑)整理
1 规则引擎:(低耦合)2 全面介绍所有的规则引擎:https://www.jianshu.com/p/41ea7a43093c 包含了 业界常用的4-5种https://www.ibm.com/support/knowledgecenter/SSGHJR_5.1.0/com.ibm.isig.doc_5.1.0/CrossIdeas_Topics/RULES_ENGINE/RUD_I...原创 2019-12-15 10:26:13 · 1362 阅读 · 0 评论