撸代码之前我们应该想些什么-编程思维

接手一个新项目,实现一个新功能,你是不是经常立马开干,建库、建表,撸代码呢?如果是,请停下来,慢慢看完这篇文章,如果不是,也请踩下,或许你也能学到一点东西。   (一)         了解业务   首先要了解业务,如果业务需求都不清楚,哪怎么开发,了解业务不仅仅是了解从产品经理、或者销售获取需求,也可以根据自己的经历经验,提出合适的建议。同时也要知道业务场景、及项目周边环境,比如需要的开发的

如何避免重复的开发-编程思维

在进行团队的review code时,经常发些大量的重复代码,或者几乎一样的代码,这个文件有,另外一个文件也有,看着让人很不舒服,也为日后的修改带来不确定性,哪如何避免它们呢? (一)         从代码上避免   在撸代码的时候,我们尽量抽取公共功能,把业务逻辑抽象化,多运用设计模式指引我们实现功能,这些都是前辈们的经验沉淀。 可以经常使用的功能,抽象成通用模块,这样不仅仅本项目使用,

【架构设计】保持简单轻量设计的三个原则——dry,kiss, yagni-编程思维

前言 一个软件轻量简单的软件架构是非常重要的,它可以让我们花最小的代价就能满足业务上的需求。那如何保证轻量简单呢?那今天就和大家分享下这其中的秘密,也就是3个重要的指导原则,KISS原则,YAGNI原则和DRY原则,你们都知道并且理解吗? 欢迎关注微信公众号「JAVA旭阳」交流和学习 KISS原则 KISS原则, 英文全称Keep it simple and stupid。核心思想就是尽量保

国外程序员陋习,写在农历狗年前-编程思维

为了呼应下面以前写的文章,今天来写写国外程序员的陋习(当然不是所有人都是这样,但是也应该是我碰到比较多的) “国产程序员陋习,写在农历猴年前” http://www.cnblogs.com/michael703/p/5183902.html   从毕业以来工作10几年中和各种老外(美国,瑞士,丹麦,澳大利亚,阿根廷,希腊,德国,日本)都合作过,有开心,有痛苦,有学习,有吵架~~ 当然老外们有很多

隐私集合求交(psi)协议研究综述-编程思维

摘要 隐私集合求交(PSI)是安全多方计算(MPC)中的一种密码学技术,它允许参与计算的双方,在不获取对方额外信息(除交集外的其它信息)的基础上,计算出双方数据的交集。隐私集合求交在数据共享,广告转化率,联系人发现等领域有着广泛的应用空间。本文对隐私集合求交的各项实现技术做了介绍和对比,对隐私集合求交的原理进行了分析,并进一步阐述了隐私集合求交目前面临的挑战和发展前景。 【关键词】:隐私集合求交

图计算引擎分析——gemini-编程思维

前言 Gemini 是目前 state-of-art 的分布式内存图计算引擎,由清华陈文光团队的朱晓伟博士于 2016 年发表的分布式静态数据分析引擎。Gemini 使用以计算为中心的共享内存图分布式 HPC 引擎。通过自适应选择双模式更新(pull/push),实现通信与计算负载均衡 [‎1]。图计算研究的图是数据结构中的图,非图片。 实际应用中遇到的图,如社交网络中的好友关系、蛋白质结构、电

【架构设计】你的类足够“专一”吗-编程思维

前言 软件设计SOLID原则中有一个最基础的原则就是单一职责原则,我想绝大部分的程序员都知道,而且都理解它的意思,甚至觉得很简单。但是往往“看懂”和“会用”是两回事,而“用好”更是难上加难。好比我们项目,一开始一直和大家强调类的单一职责,随着业务不断发展,不同的同事都往这个类“添砖加瓦”,最终导致一个类5000多行,如下图所示,连IDE都受不了,变得卡顿,可想后面维护成本有多大了,究竟为什么会这

为什么更推荐使用组合而非继承关系?-编程思维

前言 最近在看公司项目的代码,看到了大量的继承体系,而且还是继承了多层,维护、阅读都十分的困难。在查阅了一些资料以后,包括《Effective Java》一书中的第16条提到“组合优先于继承”。那继承到底会暴露什么问题呢?为什么更推荐优先使用组合呢? 欢迎关注微信公众号「JAVA旭阳」交流和学习 继承带来的问题 老实讲,项目中为什么大量使用继承,估计初版设计的人是想实现代码的复用,但是的确带

软件设计中最关键的“开闭原则”,究竟指什么呢?-编程思维

前言 软件设计原则中有一条很关键的原则是开闭原则,就是所谓的对扩展开放,对修改关闭。个人觉得这条原则是非常重要的,直接关系到你的设计是否具备良好的扩展性,但也是相对比较难以理解和掌握的,究竟怎样的代码改动才被定义为“扩展”?怎样的代码改动才被定义为“修改”?怎么才算满足或违反“开闭原则”?别急,本文将展开详细阐述。 欢迎关注微信公众号「JAVA旭阳」交流和学习 举个例子好理解 为了更好的解释

go语言性能剖析利器--pprof实战-编程思维

作者:耿宗杰 前言 关于pprof的文章在网上已是汗牛充栋,却是千篇一律的命令介绍,鲜有真正实操的,本文将参考Go社区资料,结合自己的经验,实战Go程序的性能分析与优化过程。 优化思路 首先说一下性能优化的一般思路。系统性能的分析优化,一定是从大到小的步骤来进行的,即从业务架构的优化,到系统架构的优化,再到系统模块间的优化,最后到代码编写层面的优化。业务架构的优化是最具性价比的,技术难度相对较小

各开发语言dns缓存配置建议_京东云开发者-编程思维

作者:翟贺龙 一、背景 在计算机领域,涉及性能优化动作时首先应被考虑的原则之一便是使用缓存,合理的数据缓存机制能够带来以下收益: 1.缩短数据获取路径,热点数据就近缓存以便后续快速读取,从而明显提升处理效率; 2.降低数据远程获取频次,缓解后端数据服务压力、减少前端和后端之间的网络带宽成本; 从 CPU 硬件的多级缓存设计,到浏览器快速展示页面,再到大行其道的 CDN、云存储网关等商业产品,处处

【分布式技术专题】「架构设计方案」盘点和总结秒杀服务的功能设计及注意事项技术体系_洛神灬殇-编程思维

秒杀应该考虑哪些问题 超卖问题 分析秒杀的业务场景,最重要的有一点就是超卖问题,假如备货只有100个,但是最终超卖了200,一般来讲秒杀系统的价格都比较低,如果超卖将严重影响公司的财产利益,因此首当其冲的就是解决商品的超卖问题。 高并发 秒杀具有时间短、并发量大的特点,秒杀持续时间只有几分钟,而一般公司都为了制造轰动效应,会以极低的价格来吸引用户,因此参与抢购的用户会非常的多。短时间内会有大量请

服务端架构演进史_只会一点java-编程思维

一、引子 当我们入行成为一名后端程序员时,就很羡慕架构师这个岗位的人,视同神一样的存在。而要成为一名后端架构师,必会技能就是分布式架构。今天我们不讲各种组件怎么去实现分布式细节,而是从分布式服务的这一角度来看历史的发展。 目的就一个:构建并丰富自己的架构知识体系。(普通人差大神多少?选对方向,持之以恒而已。) 注:本文是笔者最近读了周志明大神(《深入理解Java虚拟机》的作者)的凤凰架构,才有了

乐高系统 - 编程思维

前言你是否为项目核心页面缺少标准化的开发规范和流程、代码冗余耦合严重而无从下手?你是否为项目中多人或多个团队跨团队协同开发一个页面功能而烦恼?你是否为项目复杂页面缺少端到端动态化编排配置运营的手段、开发/发布周期和流程过长而耗时耗力?你是否为项目中多团队高频迭代开发核心页面的质量和稳定性后知后觉而焦虑?背景在哈啰的快速发展和业务演进过程中,从两轮出行到四轮出行再到基于出行的普惠生活服务平台,APP

单体分层应用架构剖析 - 编程思维

分层单体架构风格是分层思想在单体架构中的应用,其关注于技术视角的职责分层。同时,基于不同层变化速率的不同,在一定程度上控制变化在系统内的传播,有助于提升系统的稳定性。但这种技术视角而非业务视角的关注点隔离,导致了问题域与工程实现之间的Gap,这种割裂会导致系统认知复杂度的提升。作者:倪新明1 经典单体分层架构1.1 四层单体架构风格经典的四层单体分层架构如下图所示,应用在逻辑上划分为展现层、业务层

适用场景全新升级!扩展 dragonfly2 作为分布式缓存系统架构 | 龙蜥技术 - 编程思维

文/龙蜥社区开发者Dragonfly2 简介Dragonfly 作为龙蜥社区的镜像加速标准解决方案,是一款基于 P2P 的智能镜像和文件分发工具。它旨在提高大规模文件传输的效率和速率,最大限度地利用网络带宽。在应用分发、缓存分发、日志分发和镜像分发等领域被大规模使用。现阶段 Dragonfly 基于 Dragonfly1.x 演进而来,在保持 Dragonfly1.x 原有核心能力的基础上,Dra

system design 学习路径 - 编程思维

前言2022年尾比较热门的话题莫过于Elon Musk收购推特后大刀阔斧的改革,加速下滑还是涅槃重生大家一起拭目以待,做时间的朋友。借这个机会我们也可以通过Alex Xu分享的《Twitter Architecture 2022 vs 2012》来一探究竟,了解下互联网公司系统设计上的迭代更新,希望对大家复习System Design时有所帮助。更新历史2022年11月24日 - 初稿阅读原文 -

好消息 突破:im开源项目openim采用wasm技术实现jssdk - 编程思维

客户端sdk用golang实现,同时采用sqlite存储本地聊天记录,通过gomobile生成sdk,供iOS Android 调用,达到了了一套代码多端复用的效果。最近融合wasm技术,让浏览器具备存储能力,本地聊天记录存储在浏览器,彻底放弃了之前jssdk server服务端。WebAssembly 是一种运行在现代网络浏览器中的新型代码,并且提供新的性能特性和效果。它设计的目的不是为了手写代

流程编排、如此简单-通用流程编排组件jdeasyflow介绍 - 编程思维

作者:李玉亮JDEasyFlow是企业金融研发部自研的通用流程编排技术组件,适用于服务编排、工作流、审批流等场景,该组件已开源(https://github.com/JDEasyFlow/jd-easyflow),目前在部门的内部业务系统和科技输出系统中广泛应用,其他部门也有使用。它的特点是简单、灵活、易扩展,开发人员一般30分钟可入门上手,半天可掌握其原理。它分为一个核心模块和若干扩展模块,模块