• Spring AOP为什么能够成为Spring的基石?

    Spring AOP是Spring的三大基石之一它究竟解决了什么痛点能获如此殊荣?Java在面向对象的世界里无限风光,oop成就了无数经典的软件,它让我们的软件更健壮,更易于维护,但是程序猿对软件的质量追求是永无止境的,oop对于业务的抽象和封装完美的无懈可击然而对于系统层面的一些需求比如系统日志,性能统计等,分散在软件的各个角落,维护起来很是不爽,这种问题的解决确是oop力所...

    Java 2020年04月26日 1543 0
  • Java 性能问题如何排查?教你几招快速定位的方法

    概述性能优化一向是后端服务优化的重点,但是线上性能故障问题不是经常出现,或者受限于业务产品,根本就没办法出现性能问题,包括笔者自己遇到的性能问题也不多,所以为了提前储备知识,当出现问题的时候不会手忙脚乱,我们本篇文章来模拟下常见的几个Java性能故障,来学习怎么去分析和定位。预备知识既然是定位问题,肯定是需要借助工具,我们先了解下需要哪些工具可以帮忙定位问题。top命令top命...

    Java 2020年04月26日 1489 0
  • 一个非常适合IT团队的在线API文档、技术文档工具——Showdoc

    介绍每当我们接管其他人开发的模块或项目时,我们总是会疯狂地看着那些没有注释的代码。程序员经常希望其他人写技术文档,而不希望自己写技术文档。因为编写技术文档需要花费大量时间来处理格式和布局,所以编写该文档的人必须考虑各种非技术细节,例如在新建的Word文档中应放入哪个目录,各种文档由不同的人分散地保存在一个团队中。然后通过IM或电子邮件从其他人那里接收文件。这种通信还不错,但是效...

    Java 2020年04月25日 2456 0
  • 反爬虫、接口防盗刷 spring boot stater 组件 kk-anti-reptile

    kk-anti-reptile是,适用于基于spring-boot开发的分布式系统的反爬虫组件。系统要求基于spring-boot开发(spring-boot1.x, spring-boot2.x均可)需要使用redis工作流程kk-anti-reptile使用基于Servlet规范的的Filter对请求进行过滤,在其内部通过spring-boot的扩展点机制,实例化一个Fil...

    Java 2020年04月24日 1568 0
  • idea2020.1无法启动项目,报错Error:(3, 28) java: 程序包org.springframework.boot不存在

    之前安装的是idea 2019版本,一直没有问题。今天突然升级了一下,安装了idea2020.1最新版本,启动springboot项目的时候,竟然无法启动,而且提示的错误信息也很奇怪: Error:(3, 28) java: 程序包org.springframework.boot不存在而我检查了bootorg.springframework.boot包,明明是存在的。于是找了...

    Java 2020年04月24日 7798 0
  • HTTP客户端连接,选择HttpClient还是OkHttp?

    写在前面为什么会写这篇文章,起因于和朋友的聊天这又触及到我的知识盲区了,首先来一波面向百度学习,直接根据关键字httpclient和okhttp的区别、性能比较进行搜索,没有找到想要的答案,于是就去overstackflow上看看是不是有人问过这个问题,果然不会让你失望的所以从使用、性能、超时配置方面进行比较使用HttpClient和OkHttp一般用于调用其它服务,一般服务暴...

    Java 2020年04月22日 1641 0
  • 熬了两个通宵写的!终于把多线程和多进程彻底讲明白了!

    我们知道,在一台计算机中,我们可以同时打开许多软件,比如同时浏览网页、听音乐、打字等等,看似非常正常。但仔细想想,为什么计算机可以做到这么多软件同时运行呢?这就涉及到计算机中的两个重要概念:多进程和多线程了。(PS:万字长文,讲得很详细,建议先收藏再好好看!)同样,在编写爬虫程序的时候,为了提高爬取效率,我们可能想同时运行多个爬虫任务。这里同样需要涉及多进程和多线程的知识。本文...

    Java 2020年04月22日 1765 0
  • 程序员写接口参数校验,总是太多if else?一招让你避免体力活

    对于写Java的程序员来说,不管是写单纯的接口、还是页面后台一把梭,后端参数校验的功能都是整个代码不可或缺的一部分,它可以从系统入口过滤掉一些不合法的数据,以确保我们的系统稳定。还记得我刚入行Java写后端那会儿,因为刚从Android端转后端开发,对对端开发还不是很熟悉。有天我们架构师老大给了我一个需求、要写一个接口给客户端调用,功能其实挺简单:就是根据客户端传过来的一些参数...

    Java 2020年04月22日 2298 0
  • JDK1.8新特性Stream和Collectors19个常用示例总结

    关于Stream和Collectors的用法,这应该是总结的最全的文章了,大家可以收藏一下。一:简介java.util.Stream 表示能应用在一组元素上一次执行的操作序列。Stream 操作分为中间操作或者最终操作两种,最终操作返回一特定类型的计算结果,而中间操作返回Stream本身,这样就可以将多个操作依次串起来。Stream 的创建需要指定一个数据源,比如 java.u...

    Java 2020年04月21日 1355 0
  • 5 分钟搞懂布隆过滤器,过滤亿级数据

    在程序的世界中,布隆过滤器是程序员的一把利器,利用它可以快速地解决项目中一些比较棘手的问题。如网页 URL 去重、垃圾邮件识别、大集合中重复元素的判断和缓存穿透等问题。布隆过滤器(Bloom Filter)是 1970 年由布隆提出的。它实际上是一个很长的二进制向量和一系列随机映射函数。布隆过滤器可以用于检索一个元素是否在一个集合中。它的优点是空间效率和查询时间都比一般的算法要...

    Java 2020年04月20日 1614 0
  • JAVA 线上故障排查全套路

    线上故障主要会包括 CPU、磁盘、内存以及网络问题,而大多数故障可能会包含不止一个层面的问题,所以进行排查时候尽量四个方面依次排查一遍。同时例如 jstack、jmap 等工具也是不囿于一个方面的问题的,基本上出问题就是 df、free、top 三连,然后依次 jstack、jmap 伺候,具体问题具体分析即可。CPU一般来讲我们首先会排查 CPU 方面的问题。CPU 异常往往...

    Java 2020年04月20日 1397 0
  • 我们为什么需要图数据库?

    01 图数据库具有天然可解释性图数据库是基于图模型,对图数据进行存储、操作和访问的一项技术,即使没有专业的图论知识储备,也能轻松理解。它可以接受比实时查询更为复杂的分析需求,来挖掘图数据中的潜在价值。从分类上来说,图数据库属于 NoSQL 的一种。图模型是图数据库中的重要概念。图模型由两个要素组成:节点和边。每个节点代表一个实体(一个人,地方,事物或其他数据),每条边代表两个节...

    Java 2020年04月20日 1749 0
  • (三)SpringBoot项目的日志配置

    SLF4j+Logback的组合一、SpringBoot的日志框架选用的什么技术?SpringBoot的日志框架选用的是目前市面上最流行的SLF4j+Logback的组合,SLF4j负责日志门面,Logback负责日志实现。日志门面SLF4j框架图谱视频解释上面的图谱:二、如何统一项目中所有的日志到SLF4j?项目中别的框架使用了各种日志,并非SLF4j,那么就需要统一日志,最...

    Java 2020年04月20日 1712 0
  • Springboot 2.0打包与自定义launch.script

    今天和首架聊到springboot的配置参数问题。他说,这些配置的参数,开发人员拷贝来拷贝去的,很容易出错,不如我们屏蔽一下吧。确实,经过工程师的ctrl+c和ctrl+v,大多数重要的参数已经面目全非,完全不是当初的模样。我见过太多这样的案例,所以我表示赞同。为什么复制粘贴也会出问题?有两个原因:因为提供者善变;因为使用者骄傲。我摸着首架的手说:可以开工了。需求和思考随着我们...

    Java 2020年04月19日 1640 0
  • 全方位解析Java的序列化

    前言相信大家日常开发中,经常看到Java对象“implements Serializable”。那么,它到底有什么用呢?本文从以下几个角度来解析序列这一块知识点~什么是Java序列化?为什么需要序列化?序列化用途Java序列化常用API序列化的使用序列化底层日常开发序列化的注意点序列化常见面试题一、什么是Java序列化?序列化:把Java对象转换为字节序列的过程反序列:把字节序...

    Java 2020年04月19日 1205 0
  • MyBatis 3.5.4 新特性

    MyBatis 3.5.4 发布于 2020年2月3日,其中最大的特点是:摒弃了繁琐的@Results和@ConstructorArgs注解。MyBatis官网的说明是这样的:看似轻描淡写的一句话,却是对程序员双手的极大解放。不妨看下面的例子:@Results在MyBatis < 3.5.4版本的写法是这样的:@Results在MyBatis == 3.5.4版本已被取消...

    Java 2020年04月19日 2285 0
  • Mybatis中动态SQL中常用标签的通用写法示例

    1.用来循环容器的标签forEach,查看例子foreach元素的属性主要有item,index,collection,open,separator,close。item:集合中元素迭代时的别名,index:集合中元素迭代时的索引open:常用语where语句中,表示以什么开始,比如以'('开始separator:表示在每次进行迭代时的分隔符,close 常用语where语句中...

    Java 2020年04月19日 1277 0
  • 绝了!Dataway让SpringBoot不在需要Controller、Service、DAO等了

    Dataway介绍Dataway 是基于 DataQL 服务聚合能力,为应用提供的一个接口配置工具。使得使用者无需开发任何代码就配置一个满足需求的接口。整个接口配置、测试、冒烟、发布。一站式都通过 Dataway 提供的 UI 界面完成。UI 会以 Jar 包方式提供并集成到应用中并和应用共享同一个 http 端口,应用无需单独为 Dataway 开辟新的管理端口。这种内嵌集成...

    Java 2020年04月19日 2520 0
  • Java如何在运行时动态加载Jar

    导读:在实际项目开发中,有时会遇到需动态加载jar包的应用场景。如将Flink的UDF自定义方法制作成方法库(既打成一个Jar),在提交给Flink集群的Job中动态加载jar便可使用。下面将举一个简单实现Java动态加载Jar的例子。环境准备动态加载Jar实现解析与拓展环境准备为了便于实现Demo,这里构建一个模块化Maven项目dynamicloading,项目包含:dyn...

    Java 2020年04月19日 10676 0
  • JVM性能调优的6大步骤,及关键调优参数详解

    一、JVM内存调优对JVM内存的系统级的调优主要的目的是减少GC的频率和Full GC的次数。1.Full GC会对整个堆进行整理,包括Young、Tenured和Perm。Full GC因为需要对整个堆进行回收,所以比较慢,因此应该尽可能减少Full GC的次数。2.导致Full GC的原因1)年老代(Tenured)被写满调优时尽量让对象在新生代GC时被回收、让对象在新生代...

    Java 2020年04月17日 1373 0
  • 你是否听说过 HashMap 在多线程环境下操作可能会导致程序死循环

    关于 HashMap,以前只知道它是非线程安全,在多线程环境下操作可能会导致程序死循环,CPU直接飙到100%的线上故障,还真是第一次听说……01、问题描述经常有些面试官会问,是否了解过 HashMap 在多线程环境下使用时可能会发生死循环,导致服务器 cpu 100% 的线上故障?关于这个问题,很多年前,在淘宝内网里就有很多的程序员发过这种帖子说一个CPU 被100%了,原因...

    Java 2020年04月17日 1339 0
  • 全新IDEA 2020.1体验!Java开发首席生产力担当

    就在前几天,Java软件开发神器 IDEA 2020.1 新版发布了:我第一时间在机子上更新并体验了几天,感觉还是有点香的!怎么硕呢,体验完新特性之后,不由的感叹一句:IDEA现在真的是越来越智能,越来越懂开发者了。UI/界面升级1、界面支持中文了汉化后的效果就是这个憨样子:各花入各眼,好坏就不做评判了,可以根据自己的喜好来调节。必须要说的是,这个中文汉化不是软件原生支持,而是...

    Java 2020年04月17日 1480 0
  • 发现 Mybatis plus的牛逼,解决单表操作!

    mybatis plusMyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。以前我们使用mybatis的时候,我们会使用MyBatis Generator优先生成单表的增删改查操作,但当修改字段删除字段的时候,是个痛苦的事情,要修改xml的很多地方。为了解决这个问题,开源市场上出现了很...

    Java 2020年04月17日 3142 0
  • Java Spring: 解决Failed to configure a DataSource问题

    问题现在我们有一个Spring Boot项目,然后在`build.gradle`中加入了`spring-boot-starter-jdbc`依赖。dependencies { implementation 'org.springframework.boot:spring-boot-starter-jdbc'}但是,当我们运行程序的会遇到这个错误:Description:F...

    Java 2020年04月17日 1405 0
  • 各种分布式ID生成方式,涨知识了

    一、为什么要用分布式ID?在说分布式ID的具体实现之前,我们来简单分析一下为什么用分布式ID?分布式ID应该满足哪些特征?1、什么是分布式ID?拿MySQL数据库举个栗子:在我们业务数据量不大的时候,单库单表完全可以支撑现有业务,数据再大一点搞个MySQL主从同步读写分离也能对付。但随着数据日渐增长,主从同步也扛不住了,就需要对数据库进行分库分表,但分库分表后需要有一个唯一ID...

    Java 2020年04月14日 1478 0
  • 防重复提交解决方案!史上最全原理解析!

    传统方式(不推荐)首先我们介绍下之前传统的防重复提交方式:1:前端处理:思路如下:function dosubmit(){ //第一步,我们需要获取表单的提交按钮。 var btnSubmit = document.getElementById("submit"); //第二步,需要将表单提交按钮设置为不可用(或则直接隐藏,但是隐藏的话会被认为是BUG),这样就可以避免用户再次...

    Java 2020年04月14日 2453 1
  • 没想到!springboot 可以这样做全局日期格式化!

    说在前边最近部门几位同事受了一些委屈相继离职,共事三年临别之际颇有不舍,待一切手续办妥帖,寒暄过后送他们出公司,几个老哥临别时冲我鬼魅一笑,我顿时心里一紧有种不好的预感,这事绝对没有这么简单。等我接手这几个大佬的项目后,应验了我的预感,此刻我居然有点后悔,为啥送别之时没揍他们一顿!哈哈哈~ 而这种打人的冲动,在我开始优化几位老哥的项目时候,变得越来越强烈。有个坑技术部每个月都会...

    Java 2020年04月14日 1282 0
  • log4j:WARN No appenders could be found for logger

    今天从别的项目拷贝了一些代码到新的项目,启动的时候出现下面警告提示:2020-04-14 09:51:17.570 INFO 16612 --- [ main] c.d.c.ChatserverdemoApplication : Starting ChatserverdemoApplication on qxwu with PID 16...

    Java 2020年04月14日 1589 0
  • Jenkins 批量创建任务的三种方法

    最近,要搭建多套测试环境,需要把 Jenkins 中 dev 视图下的所有任务批量复制到 sit 等视图下。说明Jenkins 任务名称规则为:[测试环境标识]-[工程名称],如:dev-daodaotest,sit-daodaotest。视图中显示任务的正则表达式: [测试环境标识]-. ,如:dev-.*,sit-.*第一种:目录下批量复制Jenkins 的任务都是以 xm...

    Java 2020年04月13日 2502 0
  • Mybatis中三种关联关系的实现,看这篇就够了

    三种关联关系:一对多,一对一,多对多两种查询方式:嵌套查询,连接查询(也可称作:多表单独查询,多表连接查询)每一种关联关系都可以通过嵌套查询和连接查询来实现。嵌套查询相当于进行了两次查询,而连接查询将两张表连接然后再进行查询,这样只进行了一次查询由于数据表要对实体类进行映射,所以每一种关联关系中都需要在java类中定义属性来进行关联,可以通过如图关联:一对一查询数据表实现:通过...

    Java 2020年04月13日 2075 0