java
文章平均质量分 81
方丈的寺院
这个作者很懒,什么都没留下…
展开
-
技术管理入门-目标设定
新晋管理者总是手忙脚乱的。领导管你要技术规划;一堆业务需求提过来了,如何判断做不做,任务应该分配给谁;原来和组里同事都是平级,现在我是领导了,好像有几个人不太服,我该怎么处理呢。千头万绪,第一件该干的事就是设定团队目标。原创 2022-05-26 08:40:02 · 549 阅读 · 1 评论 -
guava缓存批量获取的一个坑
摘要Guava Cache是Google开源的Java工具集库Guava里的一款缓存工具,一直觉得使用起来比较简单,没想到这次居然还踩了一个坑背景功能需求抽象出来很简单,就是将数据库的查询sthMapper.findById(Long id)的结果缓存起来。但同时还有批量请求,为了提高效率,肯定要批量查询数据库,sthMapper.findByIds(Collection ids)对于的...原创 2019-10-14 21:45:19 · 2169 阅读 · 3 评论 -
Java Web开发常用工具
摘要本篇是工具类总结文章,不包含深度分析,仅个人从业数年的一些总结,希望能够对你有帮助。本文不定期更新,如果你有好的工具也可以推荐给我系统相关everything :window平台非常快捷的搜索工具pushbullet 跨平台,PC浏览器,APP直接的一个同步APP,可以多人协作。不过有可能因为是国外的软件,有时候同步比较慢,比较着急google docs : 非常方便写...原创 2018-04-19 22:22:12 · 1365 阅读 · 0 评论 -
Springboot 配置多数据源Mybatis的UnderScore不生效
摘要本文是一篇问题解决经验分享的文章。因为在网上没有搜到相关的介绍文章,而在遇到这个问题的解决过程中,犯过一些想当然的错误,所以记录在此,希望能够对后面遇到此问题的朋友有所帮助问题参考官方文档进行了相关配置。https://github.com/mybatis/spring-boot-starter/blob/master/mybatis-spring-boot-autocon...原创 2018-04-27 22:09:50 · 9076 阅读 · 0 评论 -
领域模型驱动开发(1)
摘要习惯了MVC模式,习惯了敏捷开发,习惯了了小步快跑,还适合谈论领域驱动开发吗。领域开发是否就是慢节奏的开发, 本文结合自己的开发经历,和大家聊聊这个话题。一.业务代码是如何写烂的java web开发通常都是mvc模式,从早期的ssh主键到Spring+ Mybatis。所以通常一个工程的项目结构图就是controllerservicemanagerdao问题1:...原创 2018-06-17 20:47:18 · 2580 阅读 · 0 评论 -
代码重构-业务中台化
摘要本文主要介绍当随着业务的不断发展,原本一个服务的内容需要抽象出另外的服务,作为中台服务,提供给各个业务前台,提高前台业务开发效率。业务架构随着业务的扩展,一个服务的代码越来越多,启动越来越慢,开发的人数越来越多,不得不进行代码拆分,早期有些拆分是按分层拆分,将data,dao层拆分成公共jar,然后很多服务调用,结果导致的就是后期无法维护,业务增长了,分属于不同的开发组了,本来每个...原创 2018-07-08 17:45:01 · 8600 阅读 · 0 评论 -
JVM堆外内存问题排查
摘要JVM 堆内存一般分析的比较多,本篇谈谈堆外内存问题排查,通常我们需要排查堆外内存的原因是系统整个内存使用飙高,但是堆内内存使用正常。这时候就需要分析堆外内存了堆外内存组成通常JVM的参数我们会配置-Xms 堆初始内存 -Xmx 堆最大内存 -XX:+UseG1GC/CMS 垃圾回收器 -XX:+DisableExplicitGC 禁止显示GC -XX:MaxDirec...原创 2018-07-15 11:35:07 · 13149 阅读 · 2 评论 -
领域模型驱动开发(2)-工程结构的调整
一. 背景目前很多的业务代码存在以下问题bean的创建太随意,基本就是一个需求一些对应的dto,vo,query bean。不同开发者对于同一个领域的东西有不同的bean,同一个开发者对于相同逻辑的bean,在经过2月+的时间,自己又定义出了一个差不多的bean -> 职责分散 不同开发者对于某块相同业务的逻辑校验放在了不同的service中 ->代码逻辑重复不同的后...原创 2018-08-04 20:35:16 · 3844 阅读 · 2 评论 -
com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Cannot construct (no Creators)
摘要记录下使用lombok遇到的反序列问题,一开始在lombok1.16.18中并没有发现,然后应用中没有指定lombok全局版本,引入的其他二方包将lombok版本提升到了1.16.20,然后报错。因为这个问题需要允许时才能发现,很可能会造成线上故障,所以不能等到出现问题时才发现,需要提前知晓。错误栈com.fasterxml.jackson.databind.exc.InvalidDef...原创 2019-04-14 12:33:18 · 18152 阅读 · 0 评论 -
微服务间的调用和应用内调用有啥区别
目前大部分的系统架构都是微服务架构,就算没有注册中心、服务管理,也肯定是多个服务,单体服务比较少了。大家平时写rpc接口也比较多,那么有没有思考过微服务之间的调用和应用内直接调用有什么区别呢?原创 2019-04-17 23:50:11 · 1396 阅读 · 0 评论 -
线程池管理(1)-为什么需要线程池
摘要为什么需要线程池呢,没想明白这个问题,看再多线程池的源码都没有用,先要知道线程池技术解决了什么问题,才能看的懂源码。因为所有的代码都是为了解决问题问题抛几个问题,看看你是否知道,不知道的话,可能你对线程池的理解还不够深入,还是一知半解。...原创 2019-05-04 15:51:46 · 1635 阅读 · 10 评论 -
微服务化后缓存怎么做
摘要最近接手的代码中遇到几个缓存的问题,存在一些设计原则的问题,这里总结一下,希望可以对你有帮助问题问题1: 店铺数据的获取,将用户关注的数据放在店铺信息一起返回对外提供的接口List<Shop> getPageShop(final Query query,final Boolean cache);返回的店铺信息public class Shop { publ...原创 2019-05-06 21:59:08 · 3021 阅读 · 0 评论 -
一次和前端的相互甩锅的问题记录
背景我们在APP上有个功能,需要获取用户当前定位,然后当用户关闭了GPS后,没有获取到用户定位,会触发一个bug,弹窗内容如下。问题分析这个问题的直接原因就是移动端的值取不到,导致没有给变量赋值,就将"undefined"传给了后端,后端的这个值定义的Integer,类型转换失败,报错。深层原因是异常处理机制有问题,于是后端和前端开始撕逼了前端观点: 后端代码太不健壮了, 就算前端传错...原创 2019-06-07 10:21:16 · 6713 阅读 · 30 评论 -
几种获取类的扩展方式
摘要在日常开发过程中经常需要获取类的扩展集。即获取类的子类集(抽象类),或者接口实现类。比如说状态模式中,状态构建类,策略模式中的,策略构造方式。本文介绍几种获取方式。实现以策略模式为例定义了2种策略@Getter@AllArgsConstructorpublic enum StrategyEnum { APPROVE(1), REFUSE(2); priva...原创 2019-06-27 20:51:08 · 856 阅读 · 4 评论 -
以Spring Cache扩展为例介绍如何进行高效的源码的阅读
摘要SpringCache的介绍扩展点功能的实现扩展,如何实现metric监控http://ylzheng.com/2018/01/24/use-prometheus-monitor-your-spring-boot-application/原创 2019-07-16 21:50:19 · 1066 阅读 · 0 评论 -
微服务API通过ip可访问,域名不可访问问题分析
摘要经常会有同学遇到api通过ip可以访问,但是通过域名却不可以访问。本篇文章总结了造成这种情况可能的原因。因为与具体技术的选型、规则配置有关,所以没有深入讨论,只是列出可能性,仅供参考。分析问题通过域名访问不到的请求表现的现象有接口返回404一个错误页面提示method type不支持提示接口缺乏必要的参数这些都是接口访问不到,2是配置了错误页面;3,4则发出的POST/...原创 2019-08-26 20:46:40 · 1402 阅读 · 0 评论 -
Mongo连接分析
摘要在前面的文章中有分析过关系型数据库的连接,以及连接池的原理。在mongo数据库同样存在,经常看到有网友在问mongo 连接了数据库要不要关,怎么关。内置的数据库连接池是单线程还是多线程,mongo服务器为什么会杀游标,杀连接诸如此类的问题,其实这类问题基本上就是连接池的问题,而很多和关系型数据库是类似的,并不是mongo独有的。 本文旨在梳理这些问题,进行一个全面的分析。Client...原创 2018-04-22 10:59:38 · 2806 阅读 · 5 评论 -
数据库连接(2) - 为什么C3P0连接池那么慢
摘要承接上篇数据库连接(1)从jdbc到mybatis,介绍下数据库连接池技术为什么需要连接池在上一篇中我们介绍说客户端建立一次连接耗时太长(建立连接,设置字符集,autocommit等),如果在每个sql操作都需要经历建立连接,关闭连接。不仅应用程序响应慢,而且会产生很多临时对象,应用服务器GC压力大。另外数据库server端对连接也有限制,比如MySQL默认151个连接(实际环...原创 2018-04-15 21:15:48 · 6286 阅读 · 0 评论 -
基于Struts+Hibernate开发过程中遇到的错误
1.import javax.servlet.http.HttpServletRequest 导入包出错导入包出错,通常是包未引入,HttpServletRequest包是浏览器通过http发出的请求, 需要将tomcat/lib 目录下的 servlet-api.jar导入。但是导入后仍然不行,重启eclipse也无法让他生效最后通过 project -clean来生效的。原创 2014-05-18 13:22:09 · 1440 阅读 · 0 评论 -
java 运行环境
1.jre和jdk的区别原创 2014-08-10 11:16:17 · 1036 阅读 · 0 评论 -
Java读取properties文件
1.jsp页面展示代码<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><% User user=(User)request.getAttribute("user");%>读取property文件读取proper原创 2015-01-31 18:09:43 · 1300 阅读 · 0 评论 -
ajax post请求request.getParameter("")取值为null
写一个简单的ajax 请求,发现通过request.getParamter(“”)取到的值为null 前台代码:$(document).ready(function(){ $("#ajax").click(function(){ var depart="depart"; $.ajax({ url :path+ "/AjaxR原创 2015-03-29 15:34:39 · 16469 阅读 · 0 评论 -
JDK 源码学习——ByteBuffer
ByteBuffer 在NIO的作用Java SE4 开始引入Java NIO,相比较于老的IO,更加依赖底层实现。引入通道(Channels),选择器(selector),缓冲(Buffers).都更加接近操作系统执行I/O的方式.所以速度更快。NIO 是非阻塞IO,非阻塞IO的实现是基于事件的,选择器定义了一个IO通道,程序继续运行。选择器上发生事件时,会唤醒选择器并执行相应动作。IO...原创 2016-08-07 13:33:50 · 2147 阅读 · 0 评论 -
Spring Boot 中应用Spring data mongdb
摘要本文主要简单介绍下如何在Spring Boot 项目中使用Spring data mongdb.没有深入探究,仅供入门参考。 文末有代码链接准备安装mongodb 需要连接mongodb,所以需要提前安装mongodb.在本地安装安装文档见官网 install mongodb安装完mongodb后配置环境变量。创建目录“C:\data\db”作为mongo 数据存储的默认文件 注意本篇文章原创 2016-09-10 12:48:45 · 1309 阅读 · 0 评论 -
cassandra读源码---Streaming
前言cassandra的很多过程需要网络传输模块,需要在各个节点直接发送文件。包括加入节点,删除节点引起的不同节点的负责ring环的key值发生了变化,导致sstable需要在各个节点中移动。整体过程两个节点会创建一个相似的对称的StreamSession。主要是下面四个阶段。一个stream会话包含了多个文件,每个节点既有发送task,也会有接收task.涉及到的可参看的java知识有 1. 如原创 2017-03-12 21:39:58 · 1108 阅读 · 0 评论 -
读Cassandra源码之并发
java 并发与线程池java并发包使用Executor框架来进行线程的管理,Executor将任务的提交与执行过程分开,直接使用Runnable表示任务。future获取返回值。ExecutorService 继承了Executor接口,提供生命周器的管理,包括运行,关闭,终止三种状态。ThreadPoolExecutor ThreadPoolExecutor 是ExecutorService的原创 2017-03-05 15:09:32 · 1916 阅读 · 0 评论 -
gradle 入门介绍
gradle ????Groovy??????????,?maven????????????xml?????script????gradle ???????build.gradle ????,build.gradle ????maven?pom.xmlbuildscript { repositories { mavenCentral() maven {原创 2016-07-22 17:40:26 · 1811 阅读 · 0 评论 -
Warning maven relocated xml-apis to 1.0.b
maven 依赖在maven项目中,一些基础的jar包被引用多次是很常见的事情。maven选择jar的版本是基于 - 依赖深度浅的 比如C项目依赖xml.jar。C依赖的B也引入了xml.jar。那么优先选择C中指定的 - 如果依赖深度一样,第一次依赖的jar被选中实际项目开发,一般是exclude掉B项目中的xml.jar,在C项目中显示指定xml.jar的版本。<dependency>原创 2017-07-01 11:29:35 · 2884 阅读 · 0 评论 -
plantuml 编程式画图
摘要画时序图,类图等各种UML图时,对于部分程序员是一件比较痛苦的活,1个原因是缺乏美感,画出来的图太难看,另外一个是拖拽式的迁移性不好,不能灵活变更。所以如果能够使用编程模式,然后通过第三方工具渲染出图片方式就大大解放了生产力。前言之前也有用过https://www.websequencediagrams.com/来画时序图,这个和plantuml画时序图的语法是一样的,不过websequence原创 2017-12-31 20:10:58 · 2239 阅读 · 0 评论 -
ERROR [com.alibaba.druid.pool.DruidDataSource] - abandon connection
摘要本文描述了如何解决一个Druid connection 泄露的问题,因为过程有些曲折,就详细记录下解决步骤与思路,如果对你有所帮助与启发,请留言项目结构MyBatis+TDDL问题https://github.com/FS1360472174/javaweb/issues/58 ERROR [com.alibaba.druid.pool.DruidDataS原创 2018-01-28 20:38:45 · 48644 阅读 · 0 评论 -
SpringBoot 加载不出来application.yml文件
摘要记录一次SpringBoot加载不出来application.yml文件的问题解决过程问题配置了application.yml文件,但是映射到properties bean的时候失败@ConfigurationProperties( prefix = "com.fs")public class DemoProperties { private Str原创 2018-02-01 22:43:34 · 78737 阅读 · 3 评论 -
解决一个远程主机强迫关闭连接的bug
摘要本文描述了如何解决一个rpc调用发生的问题,旨在提供一种解决思路,而不是一个具体的问题解决方案问题描述通过dubbo调用一个API时,间歇性的出现远程主机强迫关闭连接的问题 java.io.IOException: 远程主机强迫关闭了一个现有的连接。 at sun.nio.ch.SocketDispatcher.read0(Native Method)原创 2018-01-20 16:13:47 · 10121 阅读 · 0 评论 -
数据库连接(1)-从JDBC到MyBatis
摘要因为有持久层框架,和Spring的存在,越来越多的人对数据库连接这块不甚了解,只知使用方便,不知其原理。所以写一个数据库连接的系列文章,总结下本人在数据库连接方面遇到的问题,和对数据库连接的理解。JDBCjdbc:Java DataBase Connectivity,Java 数据库连接,一套标准的Java API,用来执行SQL语句。这套命名应该是很老了,毕竟将Data Ba...原创 2018-03-18 22:02:29 · 2265 阅读 · 0 评论 -
MyEclipse 报错:Errors running builder 'DeploymentBuilder' on project '工程名'
并没有更换MyEclipse版本,只是重新卸载了下,然后jiu转载 2014-05-17 15:17:01 · 951 阅读 · 0 评论