基础
文章平均质量分 84
四问四不知
这个作者很懒,什么都没留下…
展开
-
java.lang.IllegalStateException: Duplicate key
最近监控扫描出我们项目的某些异常信息,报错,看到异常来自stream流,然后定位看了一下是某位同事的代码使用stream流把List转Map集合出现重复的key异常信息。List集合A对象来源于某个接口的返回,使用A对象的uuid成员变量作为key,理论上uuid作为唯一标识不应该有重复。所以正确的做法是:1)找该接口对应责任人,定位看List对象A的uuid为什么出现重复;2)查看本项目代码中的异常来源;原创 2023-12-22 22:28:15 · 905 阅读 · 0 评论 -
函数式接口(Functional Interface)
函数式接口基础原创 2023-03-13 23:37:35 · 2490 阅读 · 0 评论 -
git reset current branch to here
IntelliJ IDEA中git操作reset current branch to here进行回滚操作原创 2022-06-03 15:24:51 · 27919 阅读 · 3 评论 -
MultiKeyMap的使用
不常用的几种Map介绍原创 2022-01-16 16:20:52 · 6433 阅读 · 0 评论 -
《Web性能权威指南》笔记
序言最近因为过生日,公司可以替每个过生日的员工买本书,我选择了这本《Web性能权威指南》,因为我觉得作为一个Web开发者,没有系统的学习过一本Web相关的书籍,大部分都是Java相关书籍。虽然不知道学了这有多少用,学完能记住多少,但是我觉得去学习这多少会有点用,巩固一下知识点也好。像序言里说的“墙上芦苇,头重脚轻根底浅”,只知表面上的东西很难在发生异常状况解决突发问题。理解基础知识很重要。最后还是很感谢公司赠送的生日礼物。第一章 延迟与带宽WPO(Web Performance Optimiza原创 2021-11-03 22:45:52 · 385 阅读 · 0 评论 -
Java 特性——JDK 9~15 新增特性
序言前面写了JDK 8的新增特性总结,今天写一下JDK9~15的新增特性,具体内容可以参看官方网站:JDK之前记得有人说过,现在有些年轻人人很年轻,但写的东西很老很老。终归结底还是我们没有跟上时代的步伐,学习当前最新的技术和特性。这里JDK 9 ~ 15新增的部分特性其实我们已经在用。这里参看别人的文章简单的介绍部分特性。集合增强JDK 9增加 了 List.of()、Set.of()、Map.of() 和 Map.ofEntries()等工厂方法来创建不可变集合,类似于ImmutableM原创 2021-10-06 16:33:53 · 197 阅读 · 0 评论 -
MacBook笔记本打不开github解决方案
序言github有时能打开有时又打不开,可能经常会让大家比较苦恼。这里分享一下如何解决这种问题,其实问题的本质是在访问github网页时无法通过github.com的二级域名进行动态域名解析。动态域名解析的内容可以参看我前面一篇文章:输入一个网址到底发生了什么?_四问四不知的博客-CSDN博客解决方案手动配置静态文件hosts,将该域名和IP的映射关系添加到静态文件中,在访问地址时会优先通过Hosts文件进行域名解析。解决步骤1、找到github.com域名对应的IP地址,输入网址:原创 2021-10-06 14:50:33 · 7148 阅读 · 0 评论 -
Java重写与重载区别
序言重写和重载其实是我们刚学习Java时就知道的知识点,看起来很简单,其实深挖起来,真的会有很多不一样的东西。学习的过程不就是在不断探索,不断积累,知识面横向扩展、纵向扩展。个人认为知识是永远学不完的,而且即使学过也可能忘记。但是学过和没学过真的是会有区别,即使有点印象,你也可以凭借印象来找到答案。这也就是为什么有的人在处理问题时会不断产生新的问题,而有的人却能举一反三,轻松找到最优解。重写(Override)重写是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变。原创 2021-10-01 20:39:40 · 432 阅读 · 0 评论 -
Java 特性——JDK 8新增特性
序言Java起源于20世纪90年代,从1991年开始,Java语言持续发展,并主要应用于Web端的开发。JDK(Java Development Kit)版本也在不断更新。作为一种高级语言,为了让开发者能够写出可读性更强,且更安全简洁的代码,它在一个个版本里增加了新的特性。在阅读一些老代码时,确实也发现了各种各样不同的问题,把这些新特性用上可以让代码更简洁更清晰。下面就来从JDK 8开始总结一些新特性。JDK 8首先,介绍Java开发工具 8 提供的新特性。接口的默认方法(Defaul.原创 2021-10-02 21:51:16 · 359 阅读 · 0 评论 -
ModHeader插件使用说明
序言当我们访问一个地址(请求某个服务器站点)时通常会带有请求头(Request Headers)和请求体(Request Body),当然有时候也不需要带请求体。比如我们访问百度,利用开发者工具就可以看到请求头里的很多信息,比如,Upgrade-Insecure-Requests:是一个请求首部,用来向服务器端发送信号,表示客户端优先选择加密及带有身份验证的响应,并且它可以成功处理upgrade-insecure-requests CSP 指令。语法、规范、兼容性参看:Upgrade-Insec原创 2021-09-14 23:02:42 · 44831 阅读 · 4 评论 -
复习Java关键字之Final
序言final是Java中的一个保留关键字,它可以用来修饰类、方法和成员变量,下面就看一下具体的内容吧。修饰类当用final修饰一个类时,表明这个类不能被继承。使用final修饰类的时候,要注意谨慎选择,除非这个类真的在以后不会用来继承或者出于安全的考虑,尽量不要将类设计为final类,常见的final类如有如下几种:包装类:Boolean,Character,Short,Integer,Long,Float,Double,Byte,Void 字符串类:String,StringBu.原创 2021-06-22 00:29:25 · 140 阅读 · 0 评论 -
垃圾收集器和内存分配策略
序言我不会写那种一篇文章搞定垃圾回收器和内存管理之类的标题,因为我觉得我自己可能还不能完全说清楚,虽然都了解过,而且当初找工作的时候恶补了这块内容,把JVM内存模型的知识点背了个滚瓜烂熟,后面很久没用也不能说每块细节都能说的很清楚。如今再来重温一遍。概述垃圾收集(Garbage Collection,GC),GC的历史比Java久远多了,1960年诞生于MIT的Lisp是第一门真正使用内存动态分配和垃圾收集技术的语言。当Lisp还在胚胎时期时,人们就在思考GC的三件事情:哪些内存需要回收?原创 2021-05-21 21:05:47 · 69 阅读 · 0 评论 -
输入一个网址到底发生了什么?
序言在浏览器输入一个网址url到底发生了什么?网上应该有很多答案,不过我还是想从自己的角度上去说一下(可能大体结构一样)。网址与域名网址(Website)的定义是因特网上网页的地址。域名(Domain Name)是由一串用点分隔的名字组成的Internet上某一台计算机或计算机组的名称,用于在数据传输时对计算机的定位标识。IP地址虽然能唯一地标记网络上的计算机,但记忆不方便,所以提出使用域名地址来替代。IP地址和域名是一一对应的,这份域名地址的信息存放在域名服务器(DNS,Domain Name原创 2021-04-24 17:06:51 · 733 阅读 · 0 评论 -
Java 运行时异常
异常分为两类: Error——程序无法处理的严重错误,编译器不做检查,通常JVM会终止线程的动作 Exception——它又分为运行时异常和编译期异常运行时异常:RuntimeException——通常是由于逻辑错误产生的,常见的NullPointException,ClassCastException,IndexOutOfBoundsException等编译期异常:NonRuntimeException——必须处理,否则程序编译无法通过,这类异常在编译时需要捕获,常见的有IO..原创 2021-04-04 21:39:59 · 4288 阅读 · 1 评论 -
Go语言并发学习
相比较于Java,Go语言是天生就支持并发的,它引入goroutine协程机制,goroutine对系统线程(内核级线程)进行了封装,暴露了一个轻量级的协程goroutine(用户级线程)供用户使用,而用户级线程到内核级线程的调度由golang的runtime负责,调度逻辑对外透明。而通道channel是作为各个协程之间进行通信的重要工具,有个图画的特别好,有助于大家理解协程之间的通信,下面这个图就是两个goroutine通过无缓冲区的通道交换数据,参考链接:http://c.biancheng.n原创 2021-04-04 15:32:30 · 156 阅读 · 0 评论 -
浅谈并发
序言之前的一篇学习经验中也提到了并发,不过那个只是提到了很少的一部分内容,去将并发一篇两篇根本讲不清楚,这里也只是粗略的讲一下我个人对并发的理解。我们先看看百度百科对并发(Concurrent)的定义:并发,即在操作系统中,同一时间段有几个程序处于已启动运行到运行完毕之间的阶段,且这几个程序都在同一台处理机上,但任何一个时间点只有一个程序在处理机上运行。有人可能会说了如果一个计算机有多核CPU呢?但此时这种情况多核CPU上执行的线程互不抢占资源,这种称之为并行(Parallel)。所以在这里我们不考原创 2021-03-28 18:40:27 · 855 阅读 · 5 评论 -
查找算法
序言可能有人会想为什么会要学习查找算法,举个简单栗子,开发中我们会使用到Redis,我们常用的就是String类型的数据,不过Redis常见的数据类型有五种(String、List、Hash、Set、ZSet(Sorted Set)),其中ZSet有序集合的数据结构就用到了跳表,跳跃表就是将链表改造成支持二分查找的数据结构,其原理是原始链表相隔的元素上逐层加上索引,如下图,集合[0,1,2,3,4,5]在ZSet中是有序链表的数据结构,但是在原始链表上加了多级索引,通过索引来实现快速查找。学过数据结构的原创 2021-03-27 18:07:34 · 391 阅读 · 2 评论 -
Go语言学习分享(简单与Java作比较)
序言 之前有过一年多的Java开发经验,主要学习了Java基础(包含面向对象语言特点——封装继承多态、异常处理、常用类、数组和集合、IO流),JVM内存机制,设计模式,数据库设计,以及在工作中用到的一些开发框架,了解并熟悉别人的框架有助于简化自己的开发。 比如Java应用中常用的spring/springboot/springcloud框架,主要特点就是IOC和AOP。我们工作中使用到过spring和springboot框架(springboot是spring框架的升级,简化...原创 2021-03-13 18:23:46 · 583 阅读 · 0 评论 -
设计模式(Design Patterns)
《设计模式:可复用面向对象软件的基础》一书中写道Christopher Alexander说过:“每一个模式描述了一个在我们周围不断重复发生的问题,以及该问题的解决方案的核心。”原创 2020-12-25 12:56:12 · 425 阅读 · 1 评论 -
Redis命令测试
命令参考地址:http://doc.redisfans.com/实操演示:1、针对String类型的数据:2、针对List类型的数据3、针对ZSet类型的数据,Zset数据结构可参看:https://www.jianshu.com/p/fb75473696554、针对Hash类型的数据,Hash数据结构(标准的HashTable)可参看:https://www.jianshu.com/p/8299aea62ab8...原创 2020-07-15 16:56:42 · 443 阅读 · 0 评论 -
Method的invoke方法初步了解
Java调试过程中,我们有时候会需要对JVM运行过程中哪出了问题进行调试,先从最基础的了解。我们都知道Java框架中方法的调用基本上都是通过反射机制来实施的,具体流程如下:1、方法的调用先检查AccessibleObject的override属性是否是true,如果是则表明该方法是复写的方法,可以忽略访问权限的限制,直接访问。如果不是则进行访问权限检测,用sun.reflect.Reflection的quickCheckMemberAccess方法先检验是不是public,如果不是则再用..原创 2020-06-28 18:14:35 · 2128 阅读 · 0 评论 -
CPU Cache模型
计算机中,所有的运算操作都是由CPU的寄存器来完成的,CPU指令的执行过程需要涉及数据的读取和写入操作,CPU所能访问的所有数据只能是计算机的主存(通常RAM)。 CPU和主存两边的速度严重的不对等,通过传统FSB(Front Side Bus)直接内存的访问方式很明显会导致CPU资源受到大量的限制,降低CPU整体的吞吐量,于是才有了在CPU和主内存之间增加缓存的设计,缓存有一级缓存(一级缓存又分为一级指令缓存和一级数据缓存)、二级缓存、三级缓存,主存到CPU之间的缓存的访问速度是越来越快...原创 2020-06-26 14:06:56 · 896 阅读 · 0 评论 -
Thread.wait()、notify / notifyAll() 方法总结(转载)
1、wait()、notify/notifyAll() 方法是Object的本地final方法,无法被重写。2、wait()使当前线程阻塞,前提是 必须先获得锁,一般配合synchronized 关键字使用,即,一般在synchronized 同步代码块里使用 wait()、notify/notifyAll() 方法。3、 由于 wait()、notify/notifyAll() 在syn...转载 2018-09-10 19:25:51 · 1472 阅读 · 0 评论 -
[Data Structure & Algorithm] 七大查找算法
阅读目录1. 顺序查找2. 二分查找3. 插值查找4. 斐波那契查找5. 树表查找6. 分块查找7. 哈希查找 查找是在大量的信息中寻找一个特定的信息元素,在计算机应用中,查找是常用的基本运算,例如编译程序中符号表的查找。本文简单概括性的介绍了常见的七种查找算法,说是七种,其实二分查找、插值查找以及斐波那契查找都可以归为一类——插值查找。插值查找和斐波那契查找是在二分查找的基础上的优化查找算法。...转载 2018-04-18 11:13:15 · 146 阅读 · 0 评论 -
集合框架
(一)集合框架: Java语言的设计者对常用的数据结构和算法做了一些规范(接口)和实现(实现接口的类)。所有抽象出来的数据结构和操作(算法)统称为集合框架。 程序员在具体应用的时候,不必考虑数据结构和算法实现细节,只需要用这些类创建一些对象,然后直接应用就可以了,这样就大大提高了编程效率。 (二)集合框架包含的内容: (三)集合框架的接口(规范) Collection接口:存储一组不唯...转载 2018-04-12 10:14:48 · 121 阅读 · 0 评论 -
Applet类
Applet 是一种 Java 程序。它一般运行在支持 Java 的 Web 浏览器内。因为它有完整的 Java API支持,所以Applet 是一个全功能的 Java 应用程序。如下所示是独立的 Java 应用程序和 applet 程序之间重要的不同:Java 中 Applet 类继承了 java.applet.Applet 类。Applet 类没有定义 main(),所以一个 Applet 程...转载 2018-04-04 16:18:03 · 1932 阅读 · 0 评论 -
并发问题
主流公司的架构包含如下几层:(1)客户端层:调用方是浏览器或者手机APP(2)反向代理层:系统入口,反向代理(3)站点应用层:实现核心应用逻辑,返回html或者json(4)服务层:如果实现了服务化,就有这一层(5)数据-缓存层:缓存加速访问存储(6)数据-数据库层:数据库固化数据存储对应的架构图如下:粗略架构图特此说明:实际中会比这个复杂很多,这里根本没有考虑高可用,想了解高可用的同学可以去看一...转载 2018-04-16 17:25:50 · 201 阅读 · 0 评论 -
进程和线程的区别
1.定义进程:具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位. 注意,进程一般有三个状态:就绪状态、执行状态和等待状态【或称阻塞状态】;进程只能由父进程建立,系统中所有的进程形成一种进程树的层次体系;挂起命令可由进程自己和其他进程发出,但是解除挂起命令只能由其他进程发出。进程控制块(PCB):PCB不但可以记录进程的属性信息,以便操作系统对进程进...转载 2018-04-16 15:50:17 · 153 阅读 · 0 评论 -
#{}和${}的区别
1. #将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号。如:order by #user_id#,如果传入的值是111,那么解析成sql时的值为order by "111", 如果传入的值是id,则解析成的sql为order by "id". 2. $将传入的数据直接显示生成在sql中。如:order by $user_id$,如果传入的值是111,那么解析成sql时的值为or...转载 2019-02-17 11:10:04 · 1974 阅读 · 0 评论 -
泛型方法<T>
先写点无关的东西,io.swagger.annotations包下的几个常用注解:@Api:用在请求的类上,表示类的说明eg:@Api(value="无意义的注解,UI界面可以看到",tags="说明类的作用,可以在UI界面看到的注解")@ApiImplicitParams:用在请求的方法上,表示一组参数说明eg:@ApiImplicitParams({ @ApiI...转载 2019-07-04 17:57:32 · 660 阅读 · 0 评论 -
Lombok插件使用与安装
开发过程中经常会写一些常用的类(这里不是JavaBean,JavaBean除了私有变量,公有的set/get方法外,还应该有无参构造函数),有些代码过于冗余,Lombok插件就是为了简化冗余和样板式代码存在的。例如,一个继承类中的几个私有变量需要写公有的set/get方法以及重写toString方法,这种写法中有较多的冗余,采用Lombok中的@Data注解可以省略Get、Set、toStri...原创 2019-07-03 14:58:29 · 233 阅读 · 0 评论 -
使用sqlyog连接 Mysql 出现1251错误
1251 client does not support authentication protocol requested by server;consider upgrading Mysql clientERROR 1396 (HY000): Operation ALTER USER failed for 'root'@'localhost'问题原因:主要是由于mysql8以前的加...原创 2019-07-01 22:08:48 · 30369 阅读 · 42 评论 -
Windows平台搭建Kafka源代码开发环境(Eclipse版本)
【转载】Windows平台搭建Kafka源代码开发环境(Eclipse版本) 最近在研究Kafka源代码,需要自己搭建一个开发环境。官网上给出的提示略显简单,照着做了一遍也碰到了一些问题。特此记录下来。开发环境: Oracle Java 1.7_u71 + Eclipse 4.4.1 + Scala 2.10.4 + Gradle 2.3 + Kafka 0.8.2.1一、Gradl...转载 2019-04-28 20:07:58 · 279 阅读 · 0 评论 -
zookeeper报错Java Home Is Not Set
安装zookeeper在网站上下载:https://zookeeper.apache.org/releases.html解压放在目录D:\bigdata(本文所用的目录)下,关于zookeeper以及kafka的目录,路径中最好不要出现空格,比如D:\Program Files,尽量别用,运行脚本时会有问题。①进入zookeeper的相关设置所在的文件目录,例如本文的:D:\bigdata...原创 2019-04-28 11:06:14 · 3203 阅读 · 0 评论 -
盲源分离(BSS, Blind Source Separation)
数学描述:假设N个统计独立的未知信号S(t)经过未知信道A的传输后由M个传感器检测获得M个观测信号整个传输过程的数学模型为:为M维观测矢量,为N维未知源信号矢量,为M维加性信道噪声,A为维传递函数矩阵。盲源分离问题就是求一个分离矩阵,使得观测信号通过该矩阵,尽量的完全分离出源信号的各个组成,设为源信号估计矢量,则分离系统的数学描述为:实际中,传感器测得的信号是源...转载 2019-04-11 11:00:19 · 33191 阅读 · 9 评论 -
Java8系列之重新认识HashMap
简介Java为数据结构中的映射定义了一个接口java.util.Map,此接口主要有四个常用的实现类,分别是HashMap、Hashtable、LinkedHashMap和TreeMap,类继承关系如下图所示:下面针对各个实现类的特点做一些说明:(1) HashMap:它根据键的hashCode值存储数据,大多数情况下可以直接定位到它的值,因而具有很快的访问速度,但遍历顺序却是不确定的。 Hash...转载 2018-04-07 19:57:19 · 146 阅读 · 0 评论