首页
学习
活动
专区
工具
TVP
发布

Linyb极客之路

专栏作者
1062
文章
1796384
阅读量
128
订阅数
领域驱动设计简介(上篇)
今天的企业应用程序无疑是复杂的,需要依靠一些专门技术(持久性,AJAX,Web服务等)来完成他们的工作。作为开发人员,我们倾向于关注这些技术细节,这是可以理解的。但事实是,一个不能解决业务需求的系统对任何人都没用,无论它看起来多么漂亮或者如何很好地构建其基础设施。
lyb-geek
2022-03-10
3770
微服务之间如何进行数据共享
有些静态数据库表,比如国家,可能会被很多程序使用,而且程序内部需要对国家表进行连接(join),以生成最终用户显示的数据,这样用微服务调用的方式效率不高,影响性能。一种方法是在每一项微服务中配置一个这样的表格,它只读,这样就可以进行数据库连接。您必须确保数据同步。大多数情况下,这种方案都是可接受的,因为有以下两点:
lyb-geek
2021-11-17
2.4K0
实战篇:Binlog 的三个业务应用场景
binlog是mysql的一种二进制日志文件,用来记录数据的变化。mysql使用binlog进行主从复制,如图:
lyb-geek
2019-09-08
8120
Spring Cloud集中环境中开发如何避免服务冲突
使用中央环境开发Spring Cloud微服务,同时避免服务冲突。开发人员如何在同一个中央弹簧云环境中同时工作并且仍然不会互相干扰?
lyb-geek
2019-05-07
1.2K0
测试微服务的4个最佳实践
随着微服务架构的出现,应用程序堆栈发生了根本性的变化,这对软件测试产生了连锁反应。每天多次发布微型版本,软件测试更加精细,它与开发同时发生,并且与测试单体应用程序有根本的不同。
lyb-geek
2018-12-28
6560
6种办法实现精益软件
最近,我浏览了公司的代码库,发现它有三个版本的仪表板,都是用于分析页面,我很确定客户不需要那样做。这引发了我幼稚脑中的一些事情,我开始在互联网上寻找相关的想法。就在那时,我发现了这篇古老的论文:“为精益软件辩护”。 这篇文章提出的观点很大程度上与我共鸣。 介绍 与10年前的类似功能软件相比,我们今天写的软件很大,运行任何现代软件所需的内存和资源都非常高,增强的用户体验和功能只是增加的大小的一部分,原因还有更多。 所有现代设计模式、代码架构等都是教会我们如何应对这种复杂性,而不可能从根本上消灭它。 两条法则非常准确地反映了软件的状态: 1. 内存越来愈大,软件扩展了才能填充可用内存。 2. 硬件却变得越来越快,但是软件变得慢更多。 简化软件的方法在于用训练有素的方法将其返回本质。 “FAT软件”的原因 导致复杂性的一个主要原因是软件拥有的功能太多,这些不一定都是使用时所必需的功能,我们不断添加新功能和扩展,并且与原始系统的任何不兼容性将被忽略或传递无法识别。 当系统的强大到通过功能数量来衡量时, 数量变得比质量更重要 ,每个新版本都必须添加功能,即使它真的不需要添加任何功能。 1.所有功能,所有时间 软件的单体设计是使软件复杂化的主要原因之一,每个可以想象得到的功能都是系统设计的一部分,随着时间的推移,大多数功能都变得无关紧要,但会继续对系统产生影响。 2.对某些人来说,复杂性就是力量。 当我建议将去除一些不必要的灵活性并使事情标准化以降低复杂性和提高可维护性时,PM当时的反应至今记忆犹新。 不可理解性应引起人们的怀疑,而不是钦佩。 3.没有足够的时间 时间压力是笨重软件的首要原因。我们没有足够的时间从代码中删除已弃用的功能并改进我们认为可接受的解决方案。 六种办法帮助保持软件“精益” 1. 强类型语言 使用强类型语言有助于以更简单的方式设计复杂系统,它允许编译器精确定位错误和接口,并且可以更自信地使用和更改抽象。 2.找到适当的分解 系统应该被分解成模块,模块应该被分解成组件,组件应该有单一的责任,整个系统应该在层次结构中进行分解,同时最小化复杂性并且去除重复代码。 3.可扩展性 可扩展性是保持系统从一开始就简化的先决条件。它还允许定制系统以适应新的更改和删除已弃用的扩展。 4.永远不应该构建复杂的软件 认为复杂系统需要设计师和程序员的纪律是不正确的,完全无法理解的系统,至少在单个个体的重要程度上,应该永远不会建立起来。 5.沟通是关键 随着时间的增长,沟通问题变得占主导地位,复杂的团队结构促成复杂的软件。 6.降低复杂性应该是目标 降低软件的复杂性和规模应该是每个开发步骤的目标,在系统规范中,对于详细的编程设计 - 每个步骤都必须有意地消除系统中任何不必要的复杂性。 结论 本主题确实触及了软件团队的敏感神经,当我和我的团队讨论这个时,他们的回答就是“不同意,这是销售需要的功能。“,”现在没有必要保持软件小。我们拥有更大的机器和更好的工具“等借口。 我明白了。我在某种程度上也不会同意,但不是因为保持软件精益是错误的,而是因为它很难,尽管如此,我希望在设计系统时牢记这些想法应该可以减少软件的复杂性。
lyb-geek
2018-12-21
5050
Web安全漏洞之CSRF
在了解 CSRF 之前我们需要科普两个前提。首先是登录权限验证的方式有很多种,目前绝大多数网站采用的还是 session 会话任务的方式。session 机制简单的来说就是服务端使用一个键值对记录登录信息,同时在 cookie 中将 session id(即刚才说的键)存储到 cookie 中。另外我们又知道浏览器中 HTTP(s) 请求是会自动帮我们把 cookie 带上传给服务端的。这样在每次请求的时候通过 cookie 获取 session id,然后通过它在服务端获取登录信息即可完成用户权限的校验。
lyb-geek
2018-12-20
5190
MySQL索引设计不可忽视的知识点
本文主要讨论MySQL索引的部分知识。将会从MySQL索引基础、索引优化实战和数据库索引背后的数据结构三部分相关内容,下面一一展开。
lyb-geek
2018-12-20
4340
Java程序性能优化之编程技巧总结
程序的性能受代码质量的直接影响。在本文中,主要介绍一些代码编写的小技巧和惯例,这些技巧有助于在代码级别上提升系统性能。
lyb-geek
2018-12-20
4900
唯品会架构师是如何实现架构重构的
随着唯品会业务的快速发展,订单量的不断增长,原有的订单存储架构已经不能满足公司的发展了,特别是在大促高峰期,原订单库已经成为抢购瓶颈,已经严重制约公司的发展。
lyb-geek
2018-12-19
9450
软件设计美学的几个要点
软件的总体设计美学: 1)简单:为了每个人的利益,找到最简单的问题形式。这适用于所有级别。简单意味着专注于一件事。这种关注于一件事的自然结果是紧凑性。您可以通过询问“这个问题的哪些陈述包括我们关心的所有内容并排除我们不关心的所有内容?”来找到问题的简单形式。然后“总结该声明中包含的所有数据的简洁方法是什么?”。如果您的问题有任何“复杂性”,那么我们将要将其缩减为许多可以很好地协同工作的简单部分。 2)模块化:将简单的问题陈述划分为一组广义的子问题,这些子问题最容易自然地表达完整的图像。每个子问题由程序逻辑的一个“模块”解决。这有很多好处,但最突出的是它允许您一次关注问题的一个方面。这使得解决复杂问题成为可能,并且可能是普遍“分而治之”战略的基础。 3)正交性:分离是简单性在问题分解中表达的方式。当两个东西是正交的时,它的字面意思是它们是“平行的”,因此可以独立地改变。软件模块的独立性是以最小的努力产生最大杠杆的手段。这些正交模块也应该简单,再一次意味着集中在一件事上。如果这种关注成功,那么模块应该获得表达,可测试性和可重用性的自然清晰度。 4)可组合性:为正交的简单模块设计干净的接口,使它们可以相互配合,也可以与任何其他系统配合使用。在设计接口时,支持简单和通用的i / o格式,旨在为将来调用模块的程序员提供最不令人惊讶的用户体验。使用简洁描述模块的单一焦点的命名约定。
lyb-geek
2018-12-19
8110
Spring Boot配置特定属性spring.profiles
SpringBoot能使用application- {你的自定义profile名称myProfileName} .properties模式添加任何你指定配置文件到其属性文件。 要加载特定的配置文件属性文件,我们可以使用命令行选项-Dspring.profiles.active = myProfileName。 缺省默认SpringBoot是加载application.properties,无需任何-Dspring.profile.active选项,或使用-Dspring.profiles.active =
lyb-geek
2018-12-19
1.8K0
使用Spirng Boot Admin监控Spring Cloud应用项目
Spring Boot Admin 是一个管理和监控Spring Boot 应用程序的开源软件。每个应用都认为是一个客户端,通过HTTP或者使用 Eureka注册到admin server中进行展示,Spring Boot Admin UI部分使用AngularJs将数据展示在前端。
lyb-geek
2018-12-14
1.5K0
不要这样写SQL 改掉这些坏习惯
SQL是作为一个程序员接触得非常多的一种语言,但是,很多时候,我们会发现,有些SQL的执行效率异常的差,造成了数据库的负担。我们通过分析这些有问题的SQL,就可以发现很多我们平时在写SQL的时候忽略的问题。
lyb-geek
2018-12-14
4080
Spring Boot DevTools使用教程
DevTools通过提供自动重启和LiveReload功能,使您更快、更轻松地开发Spring Boot应用程序。除此之外,它还将各种属性设置为更适合本地开发的值。此外,它允许您远程连接到您的应用程序,并仍然使用其大部分功能。在生产中运行时,不要使用DevTools。 如何使用DevTools进一步加快Spring Boot开发速度?你需要做的就是添加正确的依赖关系,与Spring Boot一样,设置非常简单。 如果您使用Maven:
lyb-geek
2018-12-13
11.1K0
MySQL锁
  MySQL的锁机制,就是数据库为了保证数据的一致性而设计的面对并发场景的一种规则。
lyb-geek
2018-12-12
1.8K0
springcloud hystrix dashboard使用
什么是hystrix dashboard hystrix dashboard是一款由netfilx提供的,基于hystrix Commond,并将hystrix commond收集到的服务健康信息以图
lyb-geek
2018-12-12
9290
springcloud turbine与hystrix dashboard集成使用
注:如果是使用新版的eureka客户端依赖,则无需加上@EnableDiscoveryClient注解
lyb-geek
2018-12-12
1.9K0
如何提高网站的可访问性?
关于可访问性的错误观念 可访问性影响所有用户,而不仅仅是那些有特定障碍的用户。接受这一点意味着实现可访问性就是建立压力案例。压力案例指的是影响任何一个人的任何医疗或任何情境状况,无论是什么场景时间点。一些常见的压力案例原因是:
lyb-geek
2018-12-11
1.4K0
Spring Boot命令行运行器
CommandLineRunner是一个带有run方法的简单spring引导接口。Spring Boot启动后将自动调用实现CommandLineRunner接口的所有bean的run方法。
lyb-geek
2018-12-11
1.2K0
点击加载更多
社区活动
腾讯技术创作狂欢月
“码”上创作 21 天,分 10000 元奖品池!
Python精品学习库
代码在线跑,知识轻松学
博客搬家 | 分享价值百万资源包
自行/邀约他人一键搬运博客,速成社区影响力并领取好礼
技术创作特训营·精选知识专栏
往期视频·千货材料·成员作品 最新动态
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档