
spring
coder吹雪
这个作者很懒,什么都没留下…
展开
-
研究了一个月的「拓扑排序」,给大家说一说
前言Topological sort 又称 Topological order,这个名字有点迷惑性,因为拓扑排序并不是一个纯粹的排序算法,它只是针对某一类图,找到一个可以执行的线性顺序。这个算法听起来高大上,如今的面试也很爱考,比如当时我在面我司时有整整一轮是基于拓扑排序的设计。但它其实是一个很好理解的算法,跟着我的思路,让你再也不会忘记她。有向无环图刚刚我们提到,拓扑排序只是针对特定的一类图,那么是针对哪类图的呢?答:Directed acyclic graph (DAG),有向无环图。即:原创 2020-07-07 19:47:43 · 277 阅读 · 0 评论 -
2020年7月程序员工资统计,平均14357元,又跌了,扎心
平均工资2020年7月全国招收程序员288685人。2020年7月全国程序员平均工资14357元。上个月是14404,又跌了50元。一顿午饭跌没了。总结看到今年七月份程序员的工资,大家有什么想说的呢。欢迎在评论区讨论。...原创 2020-07-07 17:27:40 · 269 阅读 · 0 评论 -
给老弟讲解java8中的marge()方法,一顿骚操作
今天我弟弟在家里学习java的时候问我java8特性中的map.merge()方法,当时刚下班回来,准备洗个澡回来就睡的,但是我觉得这个还是很好用的,所以还是给他详细说了一下。毕竟学习这么努力,我也不好打击他嘛。merge() 怎么用?这么跟你说吧。假设我们有这么一段业务逻辑,我有一个学生成绩对象的列表,对象包含学生姓名、科目、科目分数三个属性,要求求得每个学生的总成绩。加入列表如下:private List<StudentScore> buildATestList() {原创 2020-07-06 20:28:52 · 276 阅读 · 0 评论 -
真会玩!竟然可以这样用IDEA通过数据库生成lombok版的POJO
前言最近写需求时需要新建许多新表,设计完表结构还要一一写成对应的 POJO,很麻烦,就 Google 了一下。网上相关资料不多,借鉴了一篇博客,并在其基础上进行了完善。前置步骤使用 IDEA 自带的插件 Database 连接数据库在数据库的表上右键 Scripted Extensions -> Go to Scripts Directory在打开的目录下放入脚本文件源码脚本用的 Groovy 语言,语法类似 Java,并能调用 Java 类库,自己修改也很方便。唯一的麻烦是执行入口原创 2020-07-04 17:00:25 · 403 阅读 · 0 评论 -
Java并发编程二:重排序问题
重点知识来了,建议收藏哦1. 重排序概念在执行程序时为了提高性能,编译器和处理器常常会对指令做重排序。从 java 源代码到最终实际执行的指令序列,会分别经历下面三种重排序:编译器优化的重排序。编译器在不改变单线程程序语义的前提下,可以重新安排语句的执行顺序。指令级并行的重排序。处理器将多条指令重叠执行。如果不存在数据依赖性,处理器可以改变语句对应机器指令的执行顺序。内存系统的重排序。处理器使用缓存和读/写缓冲区,使得加载和存储操作看上去可能是在乱序执行。举例:如下代码执行过程中,程序不一原创 2020-07-03 16:13:00 · 404 阅读 · 0 评论 -
Java并发一:Java并发编程三大核心
编写并发程序是比较困难的,因为并发程序极易出现Bug,这些Bug有都是比较诡异的,很多都是没办法追踪,而且难以复现。要快速准确的发现并解决这些问题,首先就是要弄清并发编程的本质,并发编程要解决的是什么问题。本文将带你深入理解并发编程要解决的三大问题:原子性、可见性、有序性。补充知识硬件的发展中,一直存在一个矛盾,CPU、内存、I/O设备的速度差异。速度排序:CPU >> 内存 >> I/O设备为了平衡这三者的速度差异,做了如下优化:CPU 增加了缓存,以均衡内存与CP原创 2020-07-03 16:00:11 · 310 阅读 · 0 评论 -
Spring Boot 2.3 中配置文件属性跟踪
背景当我们使用 spring boot 在多环境打包,配置属性在不同环境的值不同,如下:spring: profiles: active: @project.profile@ #根据maven 动态配置profile---spring: profiles: devdemo: lengleng_dev---spring: profiles: prddemo: lengleng_prd或者使用 spring cloud 配置中心 (nacos/config)等再有就原创 2020-07-03 15:34:40 · 320 阅读 · 0 评论 -
Mybatis Plus代码生成器是个好东西,时间管理器,你值得拥有!
1. 前言对于写Crud的老司机来说时间非常宝贵,一些样板代码写不但费时费力,而且枯燥无味。经常有小伙伴问我,胖哥你怎么天天那么有时间去搞新东西,透露一下秘诀呗。好吧,今天就把Mybatis-plus的代码生成器分享出来,让你也成为一个优秀的时间管理大师。2. 基本依赖以Spring Boot和MySQL为例,你需要下面这些依赖:<!-- lombok 如果不使用 需要修改代码生成器的相关配置 --><dependency> <groupId>org原创 2020-07-02 17:36:30 · 237 阅读 · 0 评论 -
策略模式、策略模式与Spring的碰撞
策略模式是GoF23种设计模式中比较简单的了,也是常用的设计模式之一,今天我们就来看看策略模式。实际案例我工作第三年的时候,重构旅游路线的机票查询模块,旅游路线分为四种情况:如果A地-B地往返都可以直达,那么查询两张机票(往返)如果A地-B地去程无法直达,需要中转,但是返程可以直达,那么查询三张机票(去程两张,返程一张)如果A地-B地去程可以直达,但是返程需要中转,那么查询三张机票(去程一张,返程两张)如果A地-B地往返都无法直达,那么查询四张机票(去程两张,返程两张)在我重构前,代码差不原创 2020-06-30 16:17:16 · 241 阅读 · 0 评论 -
十亿级数据ES搜索优化,你不知道,但是面试官一定会问
面试题es 在数据量很大的情况下(数十亿级别)如何提高查询效率啊?面试官心理分析这个问题是肯定要问的,说白了,就是看你有没有实际干过 es,因为啥?其实 es 性能并没有你想象中那么好的。很多时候数据量大了,特别是有几亿条数据的时候,可能你会懵逼的发现,跑个搜索怎么一下 510s,坑爹了。第一次搜索的时候,是510s,后面反而就快了,可能就几百毫秒。你就很懵,每个用户第一次访问都会比较慢,比较卡么?所以你要是没玩儿过 es,或者就是自己玩玩儿 demo,被问到这个问题容易懵逼,显示出你对 es ..原创 2020-06-30 16:06:11 · 639 阅读 · 1 评论 -
Lambda初次使用很慢?从JIT到类加载再到实现原理
描述的话不多说,直接上图:看到输出结果了吗?为什么第一次和第二次的时间相差如此之多?咱们一起琢磨琢磨,也可以先去看看结论再回过头看分析注:并非仅第二次快,而是除了第一次,之后的每一次都很快给与猜想是否和操作系统预热有关?是否和JIT(即时编译)有关?是否和ClassLoader类加载有关?是否和Lambda有关,并非foreach的问题验证猜想操作系统预热操作系统预热这个概念是我咨询一位大佬得到的结论,在百度 / Google 中并未搜索到相应的词汇,但是在模拟测试中,我用..原创 2020-06-30 15:50:04 · 158 阅读 · 0 评论 -
嘘!异步事件这样用真的好么?
为了方便大家理解我把之前方案的图片复制过来了,如下:上图的方案存在一个问题,就是我们今天文章要聊的内容。这个问题就是当 MQ Consumer 收到消息后,就直接发布 Event 了,如果是同步的,没有问题。如果某个 EventListener 中处理失败了,那么这条消息将不会 ACK。如果是异步发布 Event 的场景,发布完消息马上就 ACK 了。就算某个 EventListener 中处理失败了,MQ 也感知不到,不会进行消息的重新投递,这就是存在的问题。解决方案方案一既然消息已经 A原创 2020-06-29 21:20:57 · 91 阅读 · 0 评论 -
阿里高级技术专家:如何结构化地思考、做事、成长?
引言在每年自评、汇报、工作中总会感受到一些结构化带来的问题:老板问我当前做的事情怎么样了,我讲了合作中的难点、视觉风格问题、业务情况、代码质量······工作的进展,说了半小时,老板还是 get 不到我做的事情的情况和价值,是老板不在意这件事、还是我语言表达能力不行?我这一年做了很多事情,都有一定产出,但是跳出细节来看,发现对业务、对团队价值都不大,是我做得不好、还是运气不好做的事情不好?最近流行 codeless,我打算研究下可视化搭建;团队业务涉及到流程编排,我打算研究下 TMF·····..原创 2020-06-28 16:43:07 · 183 阅读 · 0 评论 -
为什么建议你使用枚举?
枚举是 JDK 1.5 新增的数据类型,使用枚举我们可以很好的描述一些特定的业务场景,比如一年中的春、夏、秋、冬,还有每周的周一到周天,还有各种颜色,以及可以用它来描述一些状态信息,比如错误码等。枚举类型不止存在在 Java 语言中,在其它语言中也都能找到它的身影,例如 C# 和 Python 等,但我发现在实际的项目中使用枚举的人很少,所以本文就来聊一聊枚举的相关内容,好让朋友们对枚举有一个大概的印象,这样在编程时起码还能想到有“枚举”这样一个类型。本文的结构目录如下:枚举的 7 种使用方法很多原创 2020-06-28 16:32:41 · 234 阅读 · 0 评论 -
面试-并发编程之AQS及可重入锁
面试官:那我记得还有一个和CAS名字很像的叫AQS,你能说下吗?我: 可以。1、AQS(AbstractQueuedSynchronizer)即队列同步器,它是构建锁或者其他同步组件的基础框架(如ReentrantLock、ReentrantReadWriteLock、Semaphore等),JUC并发包的 作者Doug Lea期望它成为实现大部分同步需求的基础,然而如他所料,AQS是JUC并发包的核心基础组件。2、AQS解决了在实现同步器时涉及的大量细节问题,例如获取同步状态、FIFO同步队列。基.原创 2020-06-28 16:07:06 · 427 阅读 · 0 评论 -
Spring Boot 使用 AOP来防止重复提交
思路自定义注解 @NoRepeatSubmit 标记所有Controller中的提交请求通过AOP 对所有标记了 @NoRepeatSubmit 的方法拦截在业务方法执行前,获取当前用户的 token(或者JSessionId)+ 当前请求地址,作为一个唯一 KEY,去获取 Redis 分布式锁(如果此时并发获取,只有一个线程会成功获取锁)业务方法执行后,释放锁关于Redis 分布式锁不了解的同学戳这里 ==> Redis分布式锁的正确实现方式使用Redis 是为了在负载均衡部署,原创 2020-06-27 16:37:13 · 536 阅读 · 0 评论 -
阿里巴巴即将没落?未来互联网的竞争将会是腾讯和字节跳动的?
前言ok,今天就有一个网友说预测说阿里巴巴可能是要步入百度的后尘,3年到5年后阿里巴巴就会像百度一样没落,未来互联网的竞争将会是腾讯和字节跳动的,然后引发网友各种各样的声音和问题。随后确实有很多人都打了1,表示认同楼主的说法。尤其是阿里内部这位网友,那是挺实在的一小伙啊。打了几个1,鬼知道他经历了什么。一个在阿里工作的竟然也认同这一点,这实在让人想不明白啊。不过这位网友后面又说啊,“一般我去什么公司什么公司黄,今年来阿里了”,哦…这个,这位同志,你这个真是倒霉催,千万不要到我公司来啊。哈哈哈,我原创 2020-06-24 19:18:50 · 1063 阅读 · 0 评论 -
Java构造器就是这么简单!
前言理解构造器之前,首先我们需要了解Java中为什么要引入构造器,以及构造器的作用。在很久之前,程序员们编写C程序总会忘记初始化变量(这真的是一件琐碎但必须的事),C++引入了 构造器(constructor) 的概念,这是一个在创建对象时被自动调用的特殊方法。Java也采用了构造器。一、构造器的引入引入构造器帮助我们解决了哪些问题呢?假设我们每定义一个类都必须定义一个initialize()方法,该方法提醒你,每次使用对象之前都要执行一次该方法,这意味着用户每次都必须记得自己去调用此方法,这和上文原创 2020-06-23 17:10:33 · 119 阅读 · 0 评论 -
Amazon Deep Java Library——Java 机器学习工具箱
近年来,人们对机器学习的兴趣稳步增长。具体来说,现在,企业在各种各样的场景中使用机器学习进行图像识别。它在汽车工业、医疗保健、安全、零售、仓库、农场和农业的自动化产品跟踪、食品识别,甚至通过手机摄像头进行实时翻译等方面都有应用。借助机器学习和视觉识别,机器可以从MRI 和CT 扫描结果中发现癌症和 COVID-19 。如今,这些解决方案主要是用 Python 开发的,使用了开源和专有的 ML 工具包,每个工具包都有自己的 API。尽管 Java 在企业中很流行,但是 Java 中没有任何标准是针对机器学习原创 2020-06-23 16:57:53 · 1371 阅读 · 0 评论 -
Java8 LocalDate 取缔Date,哎呀是真香啊!
简介伴随lambda表达式、streams 以及一系列小优化,Java 8推出了全新的日期时间API。Java处理日期、日历和时间的不足之处:将java.util.Date 设定为可变类型,以及 SimpleDateFormat 的非线程安全使其应用非常受限。然后就在 java8 上面增加新的特性。全新API的众多好处之一就是,明确了日期时间概念,例如:瞬时(instant)、 长短(duration)、日期、时间、时区和周期。同时继承了Joda 库按人类语言和计算机各自解析的时间处理方式。不同于老原创 2020-06-23 16:40:22 · 245 阅读 · 0 评论 -
Spring Security 基于数据库的认证
介绍之前使用的全是基于内存的认证,这里使用基于数据库的认证。设计数据表这里设计数据表创建项目这里使用Mybatis作为项目。添加如下依赖添加driud连接池依赖<dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.1.9<原创 2020-06-23 16:22:43 · 231 阅读 · 1 评论 -
Spring Boot数据校验
数据校验是一个相当重要的环节,使用Spring Boot 进行数据校验。添加校验依赖全部依赖文件如下<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache原创 2020-06-23 15:56:49 · 517 阅读 · 0 评论