
职业心情
李福春
开朗 勤奋 幽默 正义
展开
-
0308 软件系统的非功能需求
故事开始。小李是一个一线的java程序员,做软件开发多年,有一天,被邀请去参加一个大厂的面试,面试前他做了各种准备,有软件原理方面的,软件设计方面的,还有软件架构方面的知识。并不断总结提炼成了一张知识图谱。想着即使不成功,也是一次不错的技术交流,至少可以知道目前大厂需要的程序员具备的技能深度和广度,给自己定定位。下面是技术一面。小李:你好,我是李x,今年y岁,做一线开发z年,我来面试...原创 2020-03-06 09:40:53 · 489 阅读 · 0 评论 -
0308 软件系统的非功能需求
故事开始。小李是一个一线的java程序员,做软件开发多年,有一天,被邀请去参加一个大厂的面试,面试前他做了各种准备,有软件原理方面的,软件设计方面的,还有软件架构方面的知识。并不断总结提炼成了一张知识图谱。想着即使不成功,也是一次不错的技术交流,至少可以知道目前大厂需要的程序员具备的技能深度和广度,给自己定定位。下面是技术一面。小李:你好,我是李x,今年y岁,做一线开发z年,我来面试...原创 2020-03-05 23:26:57 · 2144 阅读 · 0 评论 -
0219 springmvc-拦截器和响应增强
拦截器拦截器分同步拦截器和异步拦截器;HandlerInterceptor方法和执行时机可以看DispathcerServlet的原来确定它的三个方法的执行时机;AsynHandlerInterceptor看注释,主要用来清理在并发环境加清理ThreadLocal的数据;ResponseBodyAdvice对返回值备注了@ResponseBody或者返回ResponseEn...原创 2020-03-03 09:26:26 · 1141 阅读 · 0 评论 -
0302 中台落地前概念和思考
从前有一个java工程师,梦想技术不断突破,设计理念不断创新,于是开始关注中台,对于中台一无所知的他,最快的方式找一个相关领域的专家,快速的累积起基础知识,形成完整的知识体系,然后结合工作中的实际问题,不断的应用进去,一下是经过一段时间的学习形成的中台的理论知识体系,输出来,先尝试使用自述的方式讲清楚,形式采用问答的方式。java工程师是我,简称小李,中台专家架构师,简称台长。希望对中台感兴趣的其...原创 2020-03-03 09:25:48 · 918 阅读 · 0 评论 -
0228 我的潘多拉
我的潘多拉从一个故事说起。从前,有个Java程序员非常喜欢写程序,喜欢研究源码,读英文文档。但是它在一家小公司里工作,公司的技术栈很陈旧。单个系统代码中含有很多的xml配置,配置各种中间件的入口适配器,而不同的业务系统中都是类似的配置。启动单个系统很慢。启动依赖web组件,无法快速部署。公共组件的依赖复杂,容易依赖冲突,版本陈旧。在springcloud流行的时代,无法快速集成新的优秀组件...原创 2020-03-03 09:25:05 · 833 阅读 · 0 评论 -
0302 中台落地前概念和思考
从前有一个java工程师,梦想技术不断突破,设计理念不断创新,于是开始关注中台,对于中台一无所知的他,最快的方式找一个相关领域的专家,快速的累积起基础知识,形成完整的知识体系,然后结合工作中的实际问题,不断的应用进去,一下是经过一段时间的学习形成的中台的理论知识体系,输出来,先尝试使用自述的方式讲清楚,形式采用问答的方式。java工程师是我,简称小李,中台专家架构师,简称台长。希望对中台感兴趣的其...原创 2020-03-02 23:44:07 · 250 阅读 · 0 评论 -
0228 我的潘多拉
我的潘多拉从一个故事说起。从前,有个Java程序员非常喜欢写程序,喜欢研究源码,读英文文档。但是它在一家小公司里工作,公司的技术栈很陈旧。单个系统代码中含有很多的xml配置,配置各种中间件的入口适配器,而不同的业务系统中都是类似的配置。启动单个系统很慢。启动依赖web组件,无法快速部署。公共组件的依赖复杂,容易依赖冲突,版本陈旧。在springcloud流行的时代,无法快速集成新的优秀组件...原创 2020-02-29 01:15:37 · 264 阅读 · 0 评论 -
0226 rest接口设计
align=left&display=inline&height=322&name=image.png&originHeight=322&originWidth=338&size=154389&status=done&style=none&width=338)背景为了更方便的书写和阐述问题,文章中按照第一人称的角度书写。作为一个以java为主要开发语言的工程师,我所描述的都是java相关的编...原创 2020-02-27 12:05:02 · 875 阅读 · 0 评论 -
0224 如何面对高并发?缓存?中台为什么会火?
场景的变化场景特点变化点老复杂的业务逻辑新大量用户高并发访问软件开发方法,过程管理,组织架构变化垂直伸缩提高服务器的硬件配置来支撑;两个问题:物理服务器的硬件性能上限;投入的成本跟性能提升不成线性关系;水平伸缩使用更多的服务器形成集群来支撑分布式架构的演进22 缓存背景分布式架构中,使用缓存可以优化...原创 2020-02-24 18:53:41 · 845 阅读 · 0 评论 -
0223 研发工程师如何提高接口质量?
背景最近团队中把只会做功能测试的测试岗位去掉了,那么软件质量的保证就落到了开发人员和产品人员的工作职责中了,不说这完全是一件坏事,这为开发岗位提出了更高的要求。为了适应团队的变化,找了一门小课程补充了一下关于接口测试的知识和思维。本文是学习完毕之后的一个小结。当成是学完之后的一个收货的输出,希望可以帮到相关的研发同学。主要内容软件测试的主要内容是:测试工程师做的最多是界面测试...原创 2020-02-23 12:57:35 · 936 阅读 · 0 评论 -
0219 springmvc-拦截器和响应增强
拦截器拦截器分同步拦截器和异步拦截器;HandlerInterceptor方法和执行时机可以看DispathcerServlet的原来确定它的三个方法的执行时机;AsynHandlerInterceptor看注释,主要用来清理在并发环境加清理ThreadLocal的数据;ResponseBodyAdvice对返回值备注了@ResponseBody或者返回ResponseEn...原创 2020-02-19 23:44:07 · 188 阅读 · 0 评论 -
0216 aop和打印数据库执行日志
需求maven依赖 <dependency> <groupId>p6spy</groupId> <artifactId>p6spy</artifactId> <version>3.8.7</version> ...原创 2020-02-16 23:25:53 · 232 阅读 · 0 评论 -
0215 docker环境
docker的下载安装和基本使用我使用的mac,直接安装desktop。 然后命令行使用docker,关于desktop的使用,可以看官方文档。安装好之后,确认一下是否可以运行,输入docker version指令试试。docker versiondocker的基本指令docker info : 查看docker服务端的信息,比如有多少容器,有多少镜像在本地;do...原创 2020-02-16 13:04:46 · 794 阅读 · 0 评论 -
0203 生成mysql的数据库的数据字典
原理项目的数据库字典表是一个很重要的文档。通过此文档可以清晰的了解数据表结构及开发者的设计意图。通常为了方便我都是直接在数据库中建表,然后通过工具导出数据字典。在Mysql数据库中有一个information_schema库,它提供了访问数据库元数据的方式。什么是元数据呢?就是关于数据的数据,如数据库名、表名、列的数据类型、访问权限等。SCHEMATA表:提供了当前mysql实例中所有...原创 2020-02-07 12:30:01 · 267 阅读 · 0 评论 -
0207 软件是如何运行和崩溃的?
背景程序员的任务是写代码【软件】,代码【软件】本身无价值,代码【软件】运行起来才能实现价值。运行以java程序为例:首先把代码通过编译器编译成可执行代码。运行过程:冯洛伊曼模型1. 操作系统从磁盘中加载 程序(代码)到内存,程序变成了进程;2. 操作系统调度cpu给到进程,完成计算任务;3. 操作系统协调io设备,输出计算结果;内存模型:1. 程序代码2...原创 2020-02-07 12:23:28 · 313 阅读 · 0 评论 -
0203 生成mysql的数据库的数据字典
原理项目的数据库字典表是一个很重要的文档。通过此文档可以清晰的了解数据表结构及开发者的设计意图。通常为了方便我都是直接在数据库中建表,然后通过工具导出数据字典。在Mysql数据库中有一个information_schema库,它提供了访问数据库元数据的方式。什么是元数据呢?就是关于数据的数据,如数据库名、表名、列的数据类型、访问权限等。SCHEMATA表:提供了当前mysql实例中所有...原创 2020-02-03 23:20:41 · 255 阅读 · 0 评论 -
0121 spring-boot-redis的使用
redis是什么呢?redis,属于NoSQL的一种,在互联网时代,起到加速系统的作用。redis是一种内存数据库,支持7种数据类型的存储,性能1S 10w次读写;redis提供的简单的事务保证了高并发场景下数的一致性。redis在2.6版本之后增加了lua支持,命令是原子性的;本篇文章主要基于springboot的redis-starter。HELLO, 性能利器Redis....原创 2020-01-21 19:19:19 · 1040 阅读 · 0 评论 -
0120 springboot集成Mybatis和代码生成器
在日常开发中,数据持久技术使用的架子使用频率最高的有3个,即spring-jdbc , spring-jpa, spring-mybatis.详情可以看我之前的一篇文章spring操作数据库的3个架子.spring-jdbc封装的比较少,需要在代码中拼接sql,不太适合大规模的企业级别的开发。spring-jpa封装略多,适合开发后台管理类的系统,可以减少大量重复工作。但是在当下的互联网大环...原创 2020-01-20 17:27:47 · 946 阅读 · 0 评论 -
0116 spring的webFlux
背景场景要求编程方法电商和金融行业数据一致性要求非常高高并发的时候需要锁或者其它机制来保证一些重要数据的一致性;但是性能也下降的很快;游戏,新闻,视频,广告不需要很高的数据一致性对并发数和响应速度要求比较高这种场景下,出现了响应式编程。依赖的基础技术点如下:技术点说明servlet3.1支持响应式编程java8语法丰富支持响应...原创 2020-01-16 10:37:56 · 914 阅读 · 0 评论 -
0115 springboot template方式操作mongodb
前言redis性能基准是10w次读写/秒;但是不适用于下面的场景:需要缓存,但是经常需要统计,分析和查询。这种场景适合使用Mongodb;他是最接近关系数据库的NOSQL;mongodb介绍:::infoC 语言编写,基于分布式文件存储的开源数据库系统,在负载高的时候,可以添加更多的节点,保证服务器性能。可扩展高性能的数据存储方案。mongodb把数据存储为一个文档,数据...原创 2020-01-15 16:26:32 · 1022 阅读 · 0 评论 -
0104 代码方式动态刷新logback日志配置
0104 代码方式刷新logback日志配置背景日志是一个系统或者说一个产品技术架构中重要组成部分。常见的日志框架如下:日志框架说明跟slf4j集成所需依赖slf4j日志门面,具体实现由程序决定jclcommons-loggingjcl-over-slf4jjuljdk-loggingslf4j-apijul-to-slf4jslf4j-jd...原创 2020-01-14 19:53:12 · 1390 阅读 · 0 评论 -
0113 spring定时任务和异步线程池
0113 spring的异步方法和定时任务背景spring的内容比较多,常规的知识必须进行系统化的学习,但是一些边缘的技术点,在实际工作中也是非常适用的;下面一一介绍和实践一次。异步线程池场景:下发任务跟执行任务分开。比如我需要做一个数据统计。场景常规做法改进做法计算每天的统计数据,比如日新增,日活跃,日留存等实时计算,计算和获取结果在同一个线程里完...原创 2020-01-13 14:09:24 · 731 阅读 · 0 评论 -
0109 springboot的部署测试监控
springboot的部署测试监控部署基于maven打包JAR打包方式一般采用的jar包,使用springboot的默认方式即可;使用maven命令:mvn clean package -Dmaven.test.skip=true执行成功之后,可以在对应的target目录下找到对应的包,比如: eg-zuul-0.0.1-SNAPSHOT.jarWAR...原创 2020-01-12 22:10:30 · 181 阅读 · 0 评论 -
ej3-1优先使用静态工厂方法而非构造函数来创建对象
背景 很早之前就已经自己翻译了,先简单的贴出来,并做一下回顾。 条款1 优先使用静态工厂方法而非构造函数来创建对象允许客户端创建一个实例的传统方法是:提供一个公共构造函数;有另外一个必须成为每个程序员的编程技巧:优先使用类提供的只简单返回实例的公共静态工厂方法来创建对象。这有一个简单的Boolean类的例子:这个方法转换一个原生的boolean类型的值为一个Boolea...原创 2020-01-09 14:31:15 · 921 阅读 · 0 评论 -
0108 spring的申明式事务
背景互联网的金融和电商行业,最关注数据库事务。业务核心说明金融行业-金融产品金额不允许发生错误电商行业-商品交易金额,商品库存不允许发生错误面临的难点:高并发下保证: 数据一致性,高性能;spring对事物的处理:采用AOP技术提供事务支持,申明式事务,去除了代码中重复的try-catch-finally代码;两个场景的解决方案:...原创 2020-01-08 19:51:55 · 859 阅读 · 0 评论 -
0107 spring操作数据库的3个架子
背景数据库开发是java的核心内容之一,基础就是jdbc了;然而直接使用jdbc,需要写大量的try-catch-finally模板代码;管理系统使用hibernate作为orm框架比较方便,遵循jpa规范;互联网时代使用Mybatis,因为灵活,方便进行sql优化;此外spring也提供了jdbcTemplate的访问数据库的模式,不过没有被大量的企业使用;使用这些ORM框架之前,...原创 2020-01-07 18:38:29 · 919 阅读 · 0 评论 -
0106 springMVC REST风格
markdown xx笔记语法练习带快捷键的加粗 快捷键 cmd b斜体 cmd i分割线 cmd u 编号列表: cmd shift o无编号列表 cmd shift u待办事项 cmd shift T代码块 cmd shift P编号列表项目1编号项目列表2无编号列表项目1;无编号列表项目2;[ ] 待办事项1[ ] 待办事项2...原创 2020-01-06 18:37:45 · 890 阅读 · 0 评论 -
0105 springMVC开发基础
背景已经明确了MVC的思想和SpringMVC的基本流程,下面就都具体的mvc开发细节知识了。@RequestMappingspringMVC核心流程中,启动阶段会把注解@RequeestMapping注解所配置的内容保存到HandlerMapping中,然后等待请求到达。看一下源码:简单分一下类:方法说明name,value,path标识控制器方法的访问...原创 2020-01-05 21:48:13 · 910 阅读 · 0 评论 -
0104 gradle入门
背景gradle的官网是 www.gradle.org,标题介绍是: accelerate developer productivity,翻译过来:提高开发者的生产率;简要介绍:从手机app到微服务,从小的创业公司到大型企业,gradle帮助团队构建,自动化,交付更好更快的软件。三大特征Build Anything(构建一切)你可以选择使用Java,C ,Python语...原创 2020-01-04 17:39:36 · 944 阅读 · 0 评论 -
面试-PA和XSYX面试小结
XSYX1.自我介绍2. 最近一个项目的业务和技术栈3. 分布式锁解决库存问题4. spring的IOC和AOP讲解5. 类加载器层级6.线程池核心参数和问题7. 期待的团队是怎样的?8.反向提问(对docker和k8s的应用以及技术栈的升级的态度和规划)PA1. 自我介绍我是x,y年毕业于z大学a专业,现在已经工作了b年,先后在c,d,e等领域做研发...原创 2020-01-03 19:29:16 · 1024 阅读 · 0 评论 -
0103-springmvc的基本流程
背景现在的it研发,已经从管理系统时代迈入了互联网系统时代。页面开发已经从基于JSP struts转变为为前后端分离的方式(springMVC JS);思想MVCmvc框架不仅适用于java的开发,也适用于其他系统的开发,也包括前端,它的巨大成功在于它的理念。核心流程和组件如下:springMVC基本流程springMVC的核心是DispatherSe...原创 2020-01-03 19:17:15 · 975 阅读 · 0 评论 -
0102-aop
背景aop的概念很多,比如切点,通知,连接点,引入,织入等;实际上这是一种约定的流程;约定编程https://github.com/carterbrother/springbootpractice/tree/master/demo-aopaop编程也是按照一定规则,按照一定 流程来约定编程的;典型场景数据库事物提取固定 流程,把变化的部分织入到流程中即可;...原创 2020-01-02 11:35:24 · 323 阅读 · 0 评论 -
0101-ioc
背景ioc是spring的基础,即控制反转。springboot基于注解使用ioc.iocspring称所有被管理的对象为bean,spring ioc主要通过描述的方式完成3类bean的管理工作:基本功能说明发布对象包扫描业务bean,javaConfig或者xml的方式配置第三方bean获取对象BeanFactory或者ApplicationCo...原创 2020-01-01 23:20:03 · 864 阅读 · 0 评论 -
java并发编程-12个原子类
背景多线程更新变量的值,可能得不到预期的值,当然增加syncronized关键字可以解决线程并发的问题。这里提供另外一种解决问题的方案,即位于 java.util.concurrent.atomic包下的原子操作类,提供了一种用法简单,性能高效,线程安全的更新变量的方式。其它两个附带的类顺带看了一下:LongAddr 多线程先的sum操作LongAccomulator 多线程...原创 2019-12-06 19:59:44 · 961 阅读 · 0 评论 -
ej3-0开端
开始编码多年,总有一些最佳实践,Java也是,比如设计模式,比如Effective Java 3 (ej3) 。 设计模式先后看过《大话设计模式》,《HeadFirst 设计模式》。而EffectiveJava3我打算阅读英语原版的,翻译过来,提高一下自己的英文阅读能力,同时也思考一下大师总结的编程最佳实践,应用到日常编码工作中。 开端从ef3作者的[宣讲PPT](h...原创 2019-11-28 10:17:43 · 1028 阅读 · 0 评论 -
plantuml-绘制状态图和活动图和部署图
背景状态图:对象的所有状态,以及基于事件发生的状态改变的过程;活动图:用例的工作流程;部署图:系统的软硬件物理体系结构;状态图基本语法元素语法说明开始和结束状态[*]标识开始和结束状态箭头-->添加箭头隐藏描述区域hide empty description隐藏描述区域合成状态state 合成状态名字{ 增城的状态定义语法}可...原创 2019-11-26 16:24:15 · 2640 阅读 · 0 评论 -
软件文档写作-plantuml画用例图和时序图
背景当下的软件开发人员,不可避免的需要输出一些软件设计文档,作为一个软件工程专业毕业的工程师,最常用的设计工具就是UML,使用UML工具绘制一些软件相关的图,是必备技能,也是输出的技术文档中的重要组成部分。不关注逆向工程,这里只关注快速的绘制对应的图,plantuml是一款比较不错的工具。本节先初步熟悉用例图和时序图。plantuml介绍官网主页功能介绍:支持快速绘制时...原创 2019-11-25 16:27:36 · 1787 阅读 · 0 评论 -
java8-CompleableFuture的使用1
背景1. 硬件的极速发展,多核心CPU司空见惯;分布式的软件架构司空见惯;2. 功能API大多采用混聚的方式把基础服务的内容链接在一起,方便用户生活。抛出了两个问题:1. 如何发挥多核能力;2. 切分大型任务,让每个子任务并行运行;并发和并行的区别项目区别1实现技术并行每个任务跑在单独的cpu核心上分支合并框架,并行流并发不同任务共享cp...原创 2019-11-19 20:20:46 · 1414 阅读 · 0 评论 -
java8-Optional类
背景NPE问题,100%的Java程序员都碰到,并且曾经是心中的痛。1965年英国TonyHoare引入了Null引用,后续的设计语言包括Java都保持了这种设计。一个例子业务模型Person 有车一族, 有Car字段,Car 车,每个车都有购买保险, 有Insurance字段;Insurance 保险,每个保险都有名字 有name字段;需求:获取某个Person对象的...原创 2019-11-17 23:14:51 · 910 阅读 · 0 评论 -
java8-Optional的引入
背景NPE问题,100%的Java程序员都碰到,并且曾经是心中的痛。1965年英国TonyHoare引入了Null引用,后续的设计语言包括Java都保持了这种设计。一个例子业务模型Person 有车一族, 有Car字段,Car 车,每个车都有购买保险, 有Insurance字段;Insurance 保险,每个保险都有名字 有name字段;需求:获取某个Person对象的...原创 2019-11-17 23:07:43 · 966 阅读 · 0 评论