软件开发
文章平均质量分 86
软件开发随心记
这个作者很懒,什么都没留下…
展开
-
MVP+敏捷开发
敏捷开发是一种软件开发方法论,旨在通过迭代、自组织的团队和持续反馈,快速响应需求变化并交付高质量的软件。相较于传统的瀑布模型,敏捷开发强调灵活性、适应性和与客户的紧密合作。敏捷开发方法适用于各种规模和类型的项目,能够提高团队的生产力、客户满意度和项目成功率。软件开发过程中,最不可控,最常发生问题之处,在于沟通。限于认知,技术栈,专业领域知识等等的差异,从客户,到产品经理,到开发,测试,对相同问题的认知,理解,侧重都会有差异。产品力求一个大而全的,能解决所有问题的方案。原创 2024-04-22 09:28:45 · 1568 阅读 · 0 评论 -
insert 语句编辑小工具
sql insert语句编辑工具的介绍原创 2024-04-21 18:13:02 · 497 阅读 · 0 评论 -
状态机应用
状态机(state machine)是一种抽象的模型,用来描述一个对象或系统在不同状态下的行为和状态转换。支持的高阶功能有:状态的嵌套(substate),状态的并行(parallel,fork,join)、子状态机等等。状态(State):表示对象或系统的不同状态。当某个事件发生时,状态机根据当前的状态和事件,执行相应的动作,并转移到下一个状态。事件(Event):表示导致状态转换的事件。实现状态机可以帮助我们更好地管理对象的状态变化,提高代码的可读性和可维护性。S 代表实现的状态类型。原创 2024-04-14 15:00:57 · 303 阅读 · 0 评论 -
事务传播行为Propagation
ClassA更新user1.年龄=11(事务,默认的Propagation.REQUIRED),ClassB更新user1.年龄=12(事务,测试不同的Propagation);ClassA和ClassB构成嵌套事务。通过2个测试程序,回到最开始的问题,项目里的那个方法不存在嵌套事务,因此指定为Propagation.REQUIRES_NEW其实是与Propagation.REQUIRED的效果一致,所以这里可删除掉Propagation.REQUIRES_NEW,避免歧义。原创 2024-04-01 02:00:00 · 1770 阅读 · 0 评论 -
尝试通过俄罗斯方块解释程序员这个职业
通过“俄罗斯方块”向众人解释程序员这个职业原创 2023-05-08 07:22:51 · 610 阅读 · 0 评论 -
全栈工程师-产品经理篇
本章主要以一个研发人的主观视角述诉,希望可以给一些正在做研发,但还没有做过产品的同学一些参考。做为一个全栈工程师的我,在工程实践中,在实践了一年多的产品经理的工作,此篇文章,就以全栈工程+产品经理为标题。在实践了一年多的产品线的产品经理岗位(此产品线的研发、运维也是我),我感觉我现在勉强可以算是一个初级产品经理水准关于产品经理的,就不再这补充了,但标题前面有写着“全栈工程师”开头,补充一下全栈工程师我认为非常重要,当你能够打通所有环节,任何的墙都不存在,但墙不存在时。原创 2023-05-04 00:18:56 · 1134 阅读 · 2 评论 -
日常项目技术方案脉络
适合日常项目的技术方案书写脉络推荐原创 2023-04-19 21:26:46 · 781 阅读 · 0 评论 -
使用Apache Commons Pool2创建Java对象池
相比于其他实现对象池的技术,使用 Commons Pool2 实现对象池的优点是:它提供了完整的对象池管理功能,包括对象的创建、初始化、借用、归还、清理和销毁等操作,并且支持多线程环境下的并发访问和线程安全。此外,Commons Pool2 还具有灵活的配置选项,可以根据具体场景对对象池的性能和资源消耗进行优化。缺点是,使用 Commons Pool2 实现对象池需要引入额外的依赖,增加了项目的复杂性。原创 2023-04-02 19:24:50 · 2207 阅读 · 0 评论 -
MOCK远程API调用的简单实现
MOCK远程API调用的简单实现原创 2022-11-14 00:00:00 · 1168 阅读 · 0 评论 -
JUnit 5 初探
相信很多软件开发对于单元测试和Junit都不会感到陌生。JUnit 是由两位编程大师Kent Back 和 Erich Gamma 在1997年编写的Java开源单元测试框架,它通过大量的注解(Annotation)和约定(Convention) 运行和管理单元测试用例。JUnit 的作者 Kent Back 曾经说过,软件开发如果没有单元测试就像人走在钢丝上,没有任何的保障。原创 2022-11-03 20:15:04 · 720 阅读 · 0 评论 -
反射方法比较:Mehod vs FastMethod vs Javassist
在很多业务场景中,会对拥有相同属性名称的不同对象进行大量的Get、Set方法调用。通常为了能内聚相关的通用业务方法,我们都会创建一些入参为某些相同属性的方法,此时使用反射方式实现是最容易想到的解决方案。本文将对如下几种实现进行比较:java原生的Method、cglib的FastMethod、javassist实现的Invoker。由性能比较最明显可以看出以下几个结论:性能由高到低排列是:原生>Invoker>FastMethod>Method。原创 2022-10-08 00:10:17 · 535 阅读 · 0 评论 -
一个简单的文件预览组件封装
一个简单的文件预览组件的封装原创 2022-09-26 01:50:17 · 683 阅读 · 0 评论 -
快速使用java8 的Optional减少if else
Optional的常见用法原创 2022-07-01 18:14:31 · 1213 阅读 · 0 评论 -
@Transational踩坑
踩坑1:@Transational里代码太长@Transational最简单粗暴的使用方法就是在一个public方法上加上该注解,然后开始洋洋洒洒写上几百上千行代码,其中除了DB操作部分代码,也可能包含了接口/方法入参校验、外部系统接口调用、业务逻辑、数据计算、集合转换等逻辑。如此写,理论上是没什么大问题的,但绝大部分情况是到了最后部分才真正执行写DB的操作,此时才需用上@Transational,而在方法一开始就开启事务,很可能存在以下2种情况:程序还未执行到写DB逻辑,就return了,此时@T原创 2021-12-13 09:00:00 · 888 阅读 · 0 评论 -
离线数仓和bi开发的实践和思考
离线数仓的实践和思考背景什么是数据仓库分层设计维度建模数仓实践中踩坑以及思考背景笔者在来唯品之前主要的工作内容主要是依托于公司自研的bi低代码平台进行报表、图表开发工作,在此基础上做产品化的探索。因此在离线数仓建模和开发有过一些实践,也有一些思考,在此尝试做一点梳理。什么是数据仓库数据仓库是一个数据存储的集合,其创建目的是为了企业经营数据分析以及决策支持。数据仓库的输入是企业各个应用系统产生的数据,通过特定的范式的模型对企业数据进行筛选,整合和存储,再提供给数据应用消费。可以为企业提供bi能力,目的原创 2021-11-14 22:21:34 · 2367 阅读 · 0 评论 -
一个简单的AOP实例
第一个AOP的练习欢迎使用Markdown编辑器你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。新的改变我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客:全新的界面设计 ,将会带来全新的写作体验;在创作中心设置你喜爱的代码高亮样式,Markdown 将代码片显示选择的高亮样式 进行原创 2021-11-12 20:08:27 · 691 阅读 · 1 评论 -
谈谈vue-router的实现原理
前言相信不少伙伴都听过SPA(单页面应用),SPA指的是在一个应用中只有一个主的index.html页面,区别于多页面应用(多个index.html页面)。SPA的优点如下:1、交互体验良好单页应用的内容的改变不需要重新加载整个页面,获取数据也是通过Ajax异步获取,没有页面之间的切换,就不会出现“白屏现象”,也不会出现假死并有“闪烁”现象,页面显示流畅,用户的交互体验得到了提升和改善。2、前后端分离良好的前后端分离机制,后段无需负责模板渲染、输出页面工作,后端API通用化,即同一套后端程序代码原创 2021-09-27 08:00:04 · 1208 阅读 · 0 评论 -
三种ThreadLocal,玩转线程变量保存与传递
ThreadLocalThreadLocal是jdk中自带的类,用于保存本线程专有的数据,从下面的代码大家可以很直接的看到它的作用 private static ThreadLocal<String> sThreadLocal=new ThreadLocal<>(); @Test void testThreadlocal() { //主线程 sThreadLocal.set("这是在主线程中"); System.o原创 2021-09-22 18:13:46 · 1199 阅读 · 0 评论 -
去IOE-EBS何去何从
去IOE的思考去IOE热潮这几年去IOE热潮再涌,这次的热潮相对以前时机更加成熟了。随着国产服务器、数据的发展,软件开发能力的提升,各种开源组件的如雨后春笋,让国内的企业开始真正走上去IOE之路。IOE中的OO指Oracle,更多是指Oracle数据库。Oracle的产品很多,有些是收购的。1. Oracle数据库。2. 企业软件:主要是企业的ERP软件,包括EBS, Peoplesoft, Sieble等。3. 中间件:Oracle Application Server, Web原创 2021-09-15 09:23:04 · 407 阅读 · 0 评论 -
spring事件驱动分析
文章目录前言spring事件编程-实践观察者模式和发布-订阅模式spring事件驱动源码分析publishEvent()源码跟踪:@EventListener注解实现源码分析结语前言众所周知,在领域驱动设计中聚合根的设计有一个很重要的原则:每个事务应该只更新一个聚合根。然而,在我们的实际业务中,经常会出现涉及到多个聚合根同时更新的场景。这无疑对于系统设计提出了不小的挑战,设计一个粒度适中,又能符合业务要求的聚合根并不是一件容易的事情。领域事件为我们提供了一种非常简单的解决方案:在聚合根完成更新后产原创 2021-09-05 16:12:49 · 665 阅读 · 0 评论 -
Netty入门及实现简单通信框架
1. Netty是什么Netty 是一个利用 Java 的高级网络的能力,隐藏其背后的复杂性而提供一个易于使用的 API 的客户端/服务器框架。它活跃和成长于用户社区,像大型公司 Facebook 和 Instagram 以及流行 开源项目如 Infinispan, HornetQ, Vert.x, Apache Cassandra 和 Elasticsearch 等,都利用其强大的对于网络抽象的核心代码。说白了,Netty就是一个java高性能的网络通信框架,它运用了操作系统底层提供的NIO通信模型,原创 2021-08-18 12:03:30 · 327 阅读 · 0 评论 -
简述SpringBoot Starter原理及自定义实现
简述SpringBoot Starter原理及自定义实现一、简述二、结合SpringBoot启动原理看容器如何实现自动装配三、解析mybatis-spring-boot-starter包看mybatis的集成四、自定义Spring Boot Starter一、简述SpringBoot Starter是一组方便的依赖描述符,一个启动器。可以看成一个入口,通过这个入口,整合其他的模块,使得我们开发中不需要到处写配置或者在基础模块中加各种依赖,让配置和依赖的处理变得更简单。Spring Boot Start原创 2021-08-17 22:08:56 · 4679 阅读 · 1 评论 -
koa和koa-router的使用及源码实现
1. 前言鉴于之前使用express和koa的经验,最近想尝试构建出一个koa精简版,利用最少的代码实现koa和koa-router,同时也梳理一下Node.js网络框架开发的核心内容。实现后的核心代码不超过300行,源代码将会放在文末,配有详细的注释。2. 核心设计2.1 API调用在mini-koa的API设计中,参考koa和koa-router的API调用方式。Node.js的网络框架封装其实并不复杂,其核心点在于http/https的createServer方法上,这个方法是http请求原创 2021-08-16 20:39:20 · 686 阅读 · 0 评论 -
G1与ZGC
前言Java发展至今,最新版本是JDK16,最新的LTS长期支持版本是JDK11,今年9月即将推出JDK17,将是最新一代LTS。但是,包括笔者在内,绝大多数Java程序猿依然奋战在JDK8一线。GC(Garbage Collection)垃圾回收作为Java的重要部分,JDK7和JDK8使用的是传统的年轻代与老年代物理空间区分的方式,JDK9将G1作为了默认GC器,JDK11推出了ZGC。JDK7和JDK8的GCJDK7将堆空间分为年轻代、老年代、永久代,JDK8删除了永久代,取而代之的是堆外原创 2021-08-15 23:41:10 · 1712 阅读 · 1 评论 -
谈一谈SaaS产品的架构设计
1. SaaS 是什么从字面中理解SaaS的全称是Software as a service, 即软件即服务。从服务模式来看,SaaS是一种软件授权和交付模式,以订阅模式代替传统授权模式,以集中式部署代替用户环境部署,通常被认为是按需付费软件。目前SaaS被广泛的认为是云计算的一部分,跟Infrastructure as a service, platform as a service, xxx as a service等并列。从用户访问方式来看,用户一般使用像浏览器这样的瘦客户端访问SaaS应用,原创 2021-07-07 21:21:44 · 4455 阅读 · 2 评论 -
springboot-plugin极简实践(一)
前言网上看到一句这样的描述:Spring Boot可以说是至少近5年来Spring乃至整个Java社区最有影响力的项目之一,也被人看作是:Java EE开发的颠覆者本人深表同意使用springBoot是一个很容易的事但要基于springBoot的简单理论去搭建自己的整体框架,就需要学习和理解springBoot-Plugin,以它的方式来构建,让自己也能够享受到springBoot的简单和优雅sprintBoot-plugin极简实践实践的价值,一定要简单,且突然核心目标,我这边使用三个工程原创 2021-06-27 23:46:09 · 1781 阅读 · 0 评论 -
spock 2.0 使用指南
1.spock是什么Spock是一个测试框架,它是JUnit的超集。Spock是相对新的框架,使用Groovy语法,Groovy语法简洁,Spock测试贴近自然语言,有更高可读性.目前spock最新版本是2.0,对应的groovy版本为3.0spock2.0是基于Junit5,当前Junit5与power mock存在兼容问题,所以spock2.0暂时不支持mock静态方法!如果项目中需要使用到 静态方法的mock,可使用spock1.x .spock2.0与spock1.x在功能使用上没有太大差原创 2021-06-15 01:44:13 · 2588 阅读 · 1 评论 -
JOOQ登堂未入室
1. JOOQ简介JOOQ,(Java Object Oriented Querying)Java面向对象查询,是一种对象关系映射(Object Relational Mapping)的处理数据库的框架。它是一套基于Java访问关系型数据库的工具包,能够将SQL语言集成到Java中,它具有轻量、简单、并且足够灵活的特点,通过JOOQ我们可以轻松的使用Java面向对象的语法来实现各种复杂的SQL。但它并非完全免费,只是对MySql之类的开源数据库免费。2. 入门实践2.1 准备工作MyS...原创 2021-06-14 23:53:51 · 1926 阅读 · 8 评论 -
Maven基础配置小结
Maven是现时在开发过程中比较流行的项目管理工具,它在处理依赖包较复杂的场景时(例如上百个互相依赖的包)相对比较方便和直观。它包含了一个项目对象模型 (Project Object Model),一组标准集合,一个项目生命周期(Project Lifecycle),一个依赖管理系统(Dependency Management System),和用来运行定义在生命周期阶段(phase)中插件(plugin)目标(goal)的逻辑。 本文主要罗列一些比较好用和常用的功能,方便大家快速上手。原创 2021-06-10 22:19:33 · 454 阅读 · 3 评论 -
离线数据应用层建设简单介绍
本文主要是对日常工作的简单总结,不过会抛开实际业务单纯从产品设计上聊下数据应用层的实现,希望能对大家的数据可视化建设有所帮助。一、整体架构数据系统整体架构,通常包含数据源层、数据处理层、数据服务层以及数据应用层。二、数据应用层本次主要谈下数据应用层,应用层主要包含了报表、看板、邮件以及之前文章提及的图表配置工具等等。总体来说,是数据流量的出口以及为出口服务工具组合。应用层作为数据与用户间最直接的接触点,其呈现方式涵盖了表格式报表,图表式看板,还有邮件。为了满足用户更加个性化的分.原创 2021-05-26 13:24:01 · 2666 阅读 · 1 评论 -
扁平数据转树形结构探究
扁平数据转树形结构探究背景前段时间,由于业务需求,需要把后端返回的扁平化的数组结构,转换成树形结构,以适应于前端多级菜单栏的渲染,一开始查阅了一些资料,但发现并不是自己想要的答案。为了得到自己最想要的结果,特地花了时间对该问题进行了一些探究性尝试,并对探究过程和结果进行记录。希望能给遇到相同问题的人提供一些参考。原始的数据结构如下:// id为当前菜单的唯一标识// parentId 为上级父类菜单标识// name为菜单名// 后端返回的数据级数具有不确定性,即可能有1/2/3/4级等,da原创 2021-05-07 09:38:50 · 464 阅读 · 4 评论 -
思考面向对象中的开发模型贫血和充血
论java技术栈的基础建设和标准化的实践分享文章目录论java技术栈的基础建设和标准化的实践分享前言一、为何要做基础建设2.总结前言本人有过许多新项目和旧项目的项目经验,且每个项目都是非常用心对待,积累了不少宝贵的经验及实用的方法。本篇文章主要是将工作中遇到共性的事情抽出来给大家一个参考和启发,分为二个点展开,为何要做基础建设和标准化制定和执行一、为何要做基础建设# 二、标准化制定和执行## 1.代码如下(示例):2.代码如下(示例):该处使用的url网络请求的数据。总结提原创 2021-04-25 22:49:22 · 452 阅读 · 0 评论 -
Flutter 篇:小白入手 Flutter Plugin
由于业务需要,要做蓝牙打印机的适配,内部有类似的插件,但不适用于业务所要求的蓝牙打印机,所以就自己下手尝试了一下 Flutter Plugin 的开发。Flutter Plugin 有什么用?类似我们 node 的 npm,Flutter 也有自己的 packages 库,Flutter 的 package分两种,一种是纯 dart 的包,一种是与原生交互的插件,我们这里说的是与原生交互的 plugin 的开发,plugin 的开发与复用,能提高开发效率以及降低工程耦合度,为项目快速集成对应的能...原创 2021-04-06 20:47:02 · 2262 阅读 · 0 评论 -
数据可视化图表工具建设论述
图表是数据可视化最常用的一种表现形式,图表可以让人们更直观的了解数据。在数据建设过程中,图表工具的建设也成为必不可少的环节。本篇主要分享下个人在这方面的一些思考和实际的应用实践。不过,正所谓道可道也,非恒道也,其中的理论可以参考,但不一定都能照搬,或者说仅仅只是一个总结,供大家一些启发。首先,我们思考一个问题,图表工具的建设属于基础架构层面的建设范畴还是业务层面的工具建设?为什么需要考虑这样子的问题呢?因为如果是基础架构层面的建设,那我们应该做一个通用性的工具,能满足绝大部分的应用场景。如果是业务层面的原创 2021-03-22 00:37:23 · 200 阅读 · 0 评论 -
ddd新车上路
ddd新车上路年前领导力荐ddd,认为是很不错的架构思路。笔者学习了一段时间,尝试重构了部分代码,折腾出了几个线上bug,终于换回了宝贵的经验,这里和大家分享一下。传统开发常见的设计思路常规接口,一般简单分成查询和执行两种,查询接口正常无副作用,pass。我们谈谈有副作用的。比方说,创建订单,更新状态这两个场景,开发接到这个需求接下来的动作大概是这样:1 分析有多少表要建,多少字段,字段的业务含义是啥。2 工具反向生成代码3 定一下完成服务从到到位大致的业务主流程,写几个空方法4 填充,调试原创 2021-03-20 11:24:03 · 204 阅读 · 0 评论 -
云原生时代应用开发之12-Factor的理解与实践
云原生时代应用开发方法论 12-Factor 的理解与实践原创 2021-03-08 20:48:26 · 659 阅读 · 3 评论 -
电子发票中数字签名的提取解析教程
随着电子信息技术的发展与成熟,加上国家的大力推广,电子发票已经开始慢慢取代纸质发票。相比传统的纸质发票,电子发票除了绿色环保,节约成本之外,更重要的是电子发票采取电子签章实现发票签名、电子盖章,具有唯一性、不可抵赖性、防篡改等优点,而且更加容易税务管理。那么,我们平常拿到一张电子发票,应该如何验证它的真伪呢?如何保证它是合法且没有被别人篡改呢?这就需要对电子发票的原理有所了解了。下文将慢慢分析电子发票文件的内部结构,并尝试对电子发票中数字证书及签名进行解析。原创 2021-03-01 00:15:26 · 7240 阅读 · 4 评论 -
Python机器学习环境搭建
随着AI技术的发展和成熟,Python语言凭借其万能胶的能力成为了机器学习编程语言的首选。特别是随着Tensorflow等优秀库类的出现,大大降低了机器学习入门的门槛,本文旨在给各位码友提供一个迅速进入编写机器学习程序的正确姿势。原创 2021-02-11 08:44:54 · 3525 阅读 · 1 评论 -
浅谈字节码增强技术
ASM字节码处理框架是用Java开发的而且使用基于访问者模式生成字节码及驱动类到字节码的转换,通俗的讲,它就是对class文件的CRUD,经过CRUD后的字节码可以转换为类。ASM的解析方式类似于SAX解析XML文件,它综合运用了访问者模式、职责链模式、桥接模式等多种设计模式,相对于其他类似工具如BCEL、SERP、Javassist、CGLIB,它的最大的优势就在于其性能更高,其jar包仅30K。原创 2021-01-28 19:40:40 · 5083 阅读 · 0 评论 -
同事安利的前端抓包软件真香
这些天在协助一个微信公众号项目,因为公众号自己本身没有像chrome一样的F12控制台,导致在调试的时候真的感觉十分吃力。这时候我就能深深感觉得到前端抓包软件的重要性了。因为我的电脑是macbook,所以fiddle是不支持的,只能用Charles来抓包,这里会造成什么问题呢?其一,是两个软件的学习成本! 在win和mac之间用着不同的软件去调试的时候,就会明白期间的辛酸。 其二,Charles是收费软件,50美金=300+人民币这时候,我想起了另外一位同事之前提过的一个代理软件,免费,跨.原创 2021-01-18 11:45:02 · 653 阅读 · 1 评论