![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java
文章平均质量分 54
Java程序源
多线程栏,所有的文章、测试样例均来自“实战·JAVA高并发程序设计”的个人总结,文章内有书单链接。博客文章均来自职业生涯总结。
展开
-
终于找到一个很赞的相亲社交软件了,而且还是公众号java+vue
小程序、公众号如今早已成为了流行,用户数量巨大,今天就给大家奉献一款自研的相亲交友软件,采用java + vue,模块齐全,后期升级迭代简单。用户可自行发起组局邀请:游戏、KTV、爬山、狼人杀、台球等等等,活动众多,可自行设置组局人数、时间,且发起者可同意、拒绝组局申请。可以查看用户的相片、地理位置距离、个人介绍、爱好、喜欢/不喜欢、打招呼、实名状态等等,满足广大市场和用户需求。可以设置不同地区、性质的群,比如:XXX代理群、XXX城市青年脱单群、XXX城市父母助攻群,且可付费进群!原创 2023-10-28 09:36:35 · 438 阅读 · 0 评论 -
社交相亲聊天软件公众号、app一应俱全
社交相亲软件源码,一个完整的系统,可进行二次开发原创 2022-09-13 23:50:16 · 1105 阅读 · 1 评论 -
高级程序员必须精通的Redis——zset(有序集合)
ZSet类型的解释说明ZSet集合和Set集合类型类似,只是在set的基础上,增加了一个score排序分值;特性:sorted set,有序集合元素为string类型 元素具有唯⼀性,不重复每个元素都会关联⼀个double类型的score,表示权重,通过权重将元素从⼩到⼤排序说明:没有修改操作(但可以覆盖)补充Redis有5种基础数据结构,分别是:string(字符串)list(列表)hash(字典)set(集合)zset(有序集合)(这个排序的功能是通过Skip List(跳原创 2021-07-28 00:40:23 · 1619 阅读 · 1 评论 -
Kafka分区与分组原理
一、1、原理图2、原理描述一个topic 可以配置几个partition,produce发送的消息分发到不同的partition中,consumer接受数据的时候是按照group来接受,kafka确保每个partition只能同一个group中的同一个consumer消费,如果想要重复消费,那么需要其他的组来消费。Zookeerper中保存这每个topic下的每个partiti...转载 2021-06-29 10:00:06 · 1109 阅读 · 0 评论 -
Kafka 设计与原理详解
一、Kafka简介 本文综合了我之前写的kafka相关文章,可作为一个全面了解学习kafka的培训学习资料。1 转载请注明出处 : 本文链接 1.1 背景历史 当今社会各种应用系统诸如商业、社交、搜索、浏览等像信息工厂一样不断的生产出各种信息,在大数据时代...转载 2021-06-29 09:56:03 · 221 阅读 · 0 评论 -
重大推荐:读取导入的表格数据,请使用EasyExcal替代poi
为什么会是重大推荐呢?是因为公司线上出现了OOM!!!!细思极恐为啥呢?是因为我们在做导入的时候经常会面临两个问题1、我们导入模版一般只是读取表格的第一个sheet,但是第一个sheet数据不多,但是导入的表格可能会非常大。这有可能是因为存在其他的sheet,毕竟用户方我们控制不了。2、虽然导入只有一个sheet,且数据看起来很少,但是代码读取却消耗了很大内存这有可能是因为sheet数据的下面看起来是空的地方,存在大量的空格、有格式的空数据等。目前发现的我们系统就是因为这两个问题,直接导致系统原创 2021-06-23 00:39:12 · 710 阅读 · 1 评论 -
Runtime类中的freeMemory,totalMemory,maxMemory方法,查看内存情况
最近在网上看到一些人讨论到java.lang.Runtime类中的freeMemory(),totalMemory(),maxMemory ()这几个方法的一些题目,很多人感到很迷惑,为什么,在java程序刚刚启动起来的时候freeMemory()这个方法返回的只有一两兆字节,而随着 java程序往前运行,创建了不少的对象,freeMemory()这个方法的返回有时候不但没有减少,反而会增加。其实主要是因为这些人对freeMemory()这 个方法的意义应该有一些误解,(今天我也遇到啦。哈哈哈)大多数人以原创 2021-06-23 00:00:48 · 1031 阅读 · 0 评论 -
(九)线程不安全的容器 :HashMap
上一篇我们说了ArrayList是个不安全的容器,这里我们再说说HashMap。HashMap研究起来会比ArrayList更加有意思。解决方案:使用 ConcurrentHashMap 代替 HashMappackage com.zmkj.admin.test;import java.util.HashMap;import java.util.Map;/** * 线程不安全的容器 : HashMap * * @author sunminghao */public class H原创 2021-06-03 00:30:17 · 149 阅读 · 0 评论 -
(八)线程不安全的容器:ArrayList
ArrayList这个集合在实际开发中我们经常用到,但是在多线程中我们是不可以使用的,这也正是因为他是一个线程不安全的容器,同时还有HashMap(看下一篇文章),这里我们先说一下ArrayList。解决方法:改进的方法很简单,如程序上的注释行一样,使用线程安全的 Vector 代替 ArrayList 即可。package com.zmkj.admin.test;import java.util.ArrayList;/** * 线程不安全的容器:ArrayList * * ArrayL原创 2021-06-03 00:26:31 · 162 阅读 · 0 评论 -
(七)线程的优先级Priority和关键词:synchronized
线程执行顺序,其实就是看谁先争夺到资源,那么有没有办法改变这种机制呢?答案是,有的,但是也只是干预,并不是说不让他们去争夺资源。那就是使用了:线程优先级同时我们也简单了解一下 synchronized 这个关键词,了解一下他的特性和简单用法等。package com.zmkj.admin.test;import lombok.SneakyThrows;/** * 线程优先级 * * 温习一下线程的几种状态: * 新建(NEW)、可运行(RUNNABLE)、运行(RUNNING)、阻原创 2021-06-03 00:16:30 · 375 阅读 · 0 评论 -
(六)线程的5种状态详解
之前忘记记录了,今天看到这个老猫大佬的这篇就拉过来记录一下下 ,写的很不错。 Java中的线程的生命周期大体可分为5种状态。 1. 新建(NEW):新创建了一个线程对象。 2. 可运行(RUNNABLE):线程对象创建后,其他线程(比如main线程)调用了该对象的start()方法。该状态的线程位于可运行线程池中,等待被线程调度选中,获取cpu 的使用权 。 3. 转载 2021-05-30 22:20:34 · 222 阅读 · 0 评论 -
XML中常用转义符
编写XML代码常用转译符:&(逻辑与) & >(大于) > "(双引号) " XML实体中不允许出现"&",""等特殊字符,否则XML语法检查时将出错,如果编写的XML文件必须包含这些字符,则必须分别写成"&","<",">"再写入文件中。例如,如果在XML文档中使用类似"在读取的时候,解析器会自动将其转换回原创 2018-01-19 11:20:31 · 18467 阅读 · 0 评论 -
Nginx网站常见的跳转配置实例
相信大家在日常运维工作中如果你用到nginx作为前端反向代理服务器的话,你会对nginx的rewrite又爱又恨,爱它是因为你搞定了它,完成了开发人员的跳转需求后你会觉得很爽,觉得真的很强大,恨它是因为当一些稀奇古怪跳转的需求时候你会没有头绪、百般调试、上网求神拜佛都搞不定的时候真是想死的心都有了,当然网上也有很多nginx rewrite的经典示例,但是我感觉对我的工作都没有太大的帮助下面是我工...转载 2019-05-06 15:33:31 · 1474 阅读 · 0 评论 -
linux安装配置redis,修改redis密码,客户端连接redis,重启、停止redis
linux安装redis安装:1.获取redis资源 wget http://download.redis.io/releases/redis-4.0.8.tar.gz2.解压 tar xzvf redis-4.0.8.tar.gz3.安装 cd redis-4.0.8 make cd src make install PREFIX=/usr/local/redis...原创 2019-01-18 16:39:02 · 1398 阅读 · 0 评论 -
Spring MVC 框架搭建及详解
现在主流的Web MVC框架除了Struts这个主力 外,其次就是spring MVC了,因此这也是作为一名程序员需要掌握的主流框架,框架选择多了,应对多变的需求和业务时,可实行的方案自然就多了。不过要想灵活运用Spring MVC来应对大多数的Web开发,就必须要掌握它的配置及原理。 一、Spring MVC环境搭建:(Spring 2.5.6 + hibernate 3.2.0) 1.转载 2017-08-04 11:54:03 · 650 阅读 · 0 评论 -
(五)多线程:等待线程结束(join)和谦让(yeild)
多线程也是很有礼貌的,毕竟都是二十一世纪了,大家都是文明人。来!瞅瞅人家的素质 哈哈哈package com.zmkj.admin.test;import lombok.SneakyThrows;/** * 等待线程结束(join)和谦让(yeild) * * 将他们两个的关系对应到多线程中,很多时候,一个线程的输入可能非常依赖于另外一个或者多个线程的输出, * 此时,这个线程就需要等待依赖线程执行完毕,才能继续执行。 * * @author sunminghao */原创 2021-05-27 00:22:22 · 170 阅读 · 0 评论 -
(四)使用好多线程挂起suspend和继续执行resume
之前介绍了多线程的挂起suspend()和继续执行resume()也说了他的弊端,不建议使用是一回事,但是并不影响我们去了解他们下面我们说一下 如何规避其弊端,更好的使用他这里也就结合了多线程的等待wait() 和唤醒notify()package com.zmkj.admin.test;/** * * SuspendAndResume 挂起 和 继续执行的问题 * 这里说一下 如何 搞一个比较靠谱的Suspend 方法 * * @author sunminghao */publ原创 2021-05-26 22:46:15 · 215 阅读 · 0 评论 -
(三)多线程挂起(suspend)和继续执行(resume)
说完多线程的等待wait()和唤醒notify(),这里再说一下挂起suspend()和继续执行resume()package com.zmkj.admin.test;/** * 线程的 挂起(suspend) 和 继续执行(resume) * 这两个操作是一对相对的操作,被挂起的线程必须要等到resume()方法操作后,才能继续执行。 * * 乍一看,其实和Thread.stop()方法一样, * 但是,在文档说明中,他们早已被标注为 废弃方法 ,并不推荐使用。 * (其实Thread.原创 2021-05-26 22:42:08 · 557 阅读 · 0 评论 -
(二)多线程notify()是唤醒线程顺序:有序的!有序的!
多线程notify()是有序唤醒线程的!!有序的!!有序的!!重要的事情说三遍 就是有序的唤醒等待的线程的之前网上有很多说notify是随时唤醒线程的 是错的这里我们用两个例子来举证一下 ,这种方式比源码来的简单当然如果不够详细的话 大家可以去研究一下 wait和notify的源码,这里我就不贴出来了package com.zmkj.admin.test;import java.util.LinkedList;import java.util.List;import java.uti原创 2021-05-24 14:29:12 · 1024 阅读 · 0 评论 -
(一)多线程的wait()和notify()简单例子
多线程wait()使一个线程中断执行,处于等待的状态,notify()则是唤醒一个处于等待的线程,继续向下执行上简单案例同时思考几个问题package com.zmkj.admin.test;/** * wait() notify() 简单案例 * * 知识点: * 1、线程的等待、睡眠、唤醒 方式 * 2、notify 是立即释放锁吗? * * @author sunminghao */public class WaitAndNotify { final s原创 2021-05-24 14:16:13 · 469 阅读 · 0 评论 -
JDK1.8 在对象List集合中取某属性值,并组成一个集合List
现在我们的开发是绝大部分使用的jdk至少也是1.8版本的,这个版本 开始 增加了很多的特性,今天也只是记录其中的一小部分,只是一个小疑惑。在开发过程中 我们经常会遇到需要从一个List中取出一个属性的List集合 比如 id的集合所以就会用到JDK8中的方法,有个疑问,当我们取值的时候 是否会碰到空指针呢 ?答案是:不会但是也会有另外一个问题上例子public static void main(String[] args) { User user1 = new User();原创 2021-05-18 22:49:08 · 15035 阅读 · 1 评论 -
Spring boot Mybatis一个项目配置多个数据库(2020最后一刻)
2021念家乡,但未返航。边看春晚边改代码 偶尔还视频串个场 来一杯 哈哈哈哈哈祝大家新年快乐,万事如意。最近练手两个项目,由于节省时间,现在需要将两个系统的后台管理系统揉合到一起去,一来是为了节省时间,省去了基础框架权限等,二来也是为了节省硬件服务器资源,还有就是为了管理方便。所以就需要解决一个问题:一个项目使用两个数据库。直接上配置和代码:一、数据源的配置配置数据源信息,这里也不局限于两个,可以更多个application.ymlspring: server: max-ht原创 2021-02-12 00:03:18 · 1952 阅读 · 0 评论 -
Java进行Base64的编码(Encode)与解码(Decode)
public static void main(String[] args) { try { String str = "{\"code\":\"61\",\"id\":\"334910\"}"; //编码 java.util.Base64.Encoder encoder = java.util.Base64.getEncoder(); String str2 = encoder.encodeToString(str.getBytes(原创 2021-02-01 23:16:59 · 1844 阅读 · 0 评论 -
java 各个中间件技术框架及思考。希望大家来一起完善
做一个思考:这么多 我们该如何正确的选择适合自己的?网关:Nginx、Kong、Zuul缓存:Redis、MemCached、OsCache、EhCache搜索:ElasticSearch、Solra、如何优化?如何具备更好的兼容性?熔断:Hystrix、resilience4ja、如何更灵活控制?更安全稳定?负载均衡:DNS、F5、LVS、Nginx、OpenResty、HAproxy注册中心:Eureka、Zookeeper、Redis、Etcd、Consul认证鉴权:JWT消费队原创 2021-01-11 22:49:28 · 458 阅读 · 0 评论 -
长连接和短连接的区别、长连接的实现
一、长连接与短连接:长连接:client方与server方先建立连接,连接建立后不断开,然后再进行报文发送和接收。这种方式下由于通讯连接一直存在。此种方式常用于P2P通信。短连接:Client方与server每进行一次报文收发交易时才进行通讯连接,交易完毕后立即断开连接。此方式常用于一点对多点通讯。二、长连接与短连接的操作过程:短连接的操作步骤是:建立连接——数据传输——关闭连接…建立连接——数据传输——关闭连接长连接的操作步骤是:建立连接——数据传输…(保持连接)…数据传输——关闭连接三、长连接与原创 2021-01-07 23:28:03 · 3583 阅读 · 0 评论 -
阿里重磅开源在线分析诊断工具Arthas(阿尔萨斯)
Arthas 是Alibaba开源的Java诊断工具,深受开发者喜爱。Arthas可以帮助你解决以下痛点!!!1·这个类从哪个 jar 包加载的?为什么会报各种类相关的 Exception?2·我改的代码为什么没有执行到?难道是我没 commit?分支搞错了?3·遇到问题无法在线上 debug,难道只能通过加日志再重新发布吗?4·线上遇到某个用户的数据处理有问题,但线上同样无法 debug,线下无法重现!5·是否有一个全局视角来查看系统的运行状况?6·有什么办法可以监控到JVM的实时运行状态?原创 2020-11-10 11:49:24 · 278 阅读 · 0 评论 -
JAVA 关键字、敏感字 屏蔽过滤检测功能实现,不需要集成融合,不需要solr啥的 简单实用
项目里面我们要做一些关键词的判断拦截1、要么你是为了屏蔽某些词;eg:它是一个**2、要么你是为了校验某句话里面是否包含的有某些词;eg:关键词:妙龄少女;例句:我想找个妙龄少女做我女朋友! (谁不想?)方法很多,比如ES ? Solr ? 好用 但是如果只是简单的项目需求,需要搭环境啥的,那就太麻烦啦!这里有个漂亮的妙龄少女,不不不,是个简单的方式。言归正传 上代码SensitiveFilterService.javapackage com.example.sensitivedemo原创 2020-09-16 10:00:01 · 3414 阅读 · 0 评论 -
Feign解决Get请求自动转化成POST的问题
记一次无厘头报错:Request method ‘POST’ not supported看起来很简单呐,就是不支持post请求嘛!!场景:对接研究三方接口(微信推送),三方接口请求方式是GET方式,之前参数接收也是顺利完美的,但是研究个性消息推送的时候出现了问题,设置了推广二维码,用户扫码的关注后,收不到推送消息,系统直接报“Request method ‘POST’ not supported”错误,所以问题点显而易见!!但是吧,百思不得“姐”!!!三方是get请求,但是为啥子现在又是post呢?原创 2020-08-11 14:54:39 · 6084 阅读 · 1 评论 -
java.lang.RuntimeException: Serialized class XXXXXX must implement java.io.Serializable 错误 dubbo
这个错误很简单一般是因为我们在做 多层嵌套实体 的时候漏掉了一些东西 implements Serializable每个实体都要序列化 都要实现 implements Serializable原创 2020-08-05 14:51:38 · 3117 阅读 · 0 评论 -
Java最全面 面试题(2020最新版)boot、cloud、mybatis、dubbo、mq、linux等等等
借鉴自大神 https://blog.csdn.net/ThinkWon/article/details/104390612大神时有更新,可借此备战面试概念点,也可做为温习知识点 棒棒哒! 特此记录!序号内容链接地址1Java基础知识面试题(2020最新版)https://thinkwon.blog.csdn.net/article/details/1043906122Java集合容器面试题(2020最新版)https://thinkwon.blog.csdn.转载 2020-08-03 14:13:20 · 259 阅读 · 0 评论 -
【SSH进阶之路】深入源码,详解Struts基本实现流程(七)
MVCStruts大致流程深入源码 Struts流程总结 通过一步步的封装我们实现了Struts的基本雏形,我们解决了Struts怎么实现MVC的问题,我们现在仅仅有了Struts的基础,对Struts的学习才刚刚开始,这篇我们要通过对比MVC来理解Struts的执行流程,最后深入Struts的源码,一看究竟。 MVC M:业务逻转载 2017-07-11 23:27:40 · 198 阅读 · 0 评论 -
Mybatis通用Mapper
转自:http://blog.csdn.net/isea533/article/details/41457529极其方便的使用Mybatis单表的增删改查项目地址:http://git.oschina.net/free/Mapper优点?不客气的说,使用这个通用Mapper甚至能改变你对Mybatis单表基础操作不方便的想法,使用它你能简单的使用单表的增删改查,包含动态的增删改查转载 2017-08-03 14:44:50 · 313 阅读 · 0 评论 -
终于有人把Elasticsearch原理讲透了!
转自:https://developer.51cto.com/art/201904/594615.htm特此谢谢原作者!在此分享给大家 小史是一个非科班的程序员,虽然学的是电子专业,但是通过自己的努力成功通过了面试,现在要开始迎接新生活了。随着央视诗词大会的热播,小史开始对诗词感兴趣,最喜欢的就是飞花令的环节。但是由于小史很久没有背过诗词了,飞一个字很难说出一句,很多之前很熟悉的诗句也想不起来。倒排索引吕老师:转载 2020-07-31 14:38:21 · 256 阅读 · 0 评论 -
integer == integer返回 true 还是 false?
看到了一个比较坑的问题:integer == integer 返回 true 还是 false 呢?所以你觉得下面两个输出是什么呢?(波浪线忽略,是因为封装类型不建议用“==”,应该是equals)答案很简单,第一个 integer = 20, 返回的是 true,第二个 integer = 321 返回的是false !!!what???是因为,一来:Integer里弄了一个缓存,对于在 -128—127 之间的数值,会直接使用该缓存里的对象 ;所以也就是说 在我们比较 intege原创 2020-05-13 16:18:56 · 1984 阅读 · 2 评论 -
神器Aviator 表达式-使计算变的更简单、可读性更强
在业务编码中,我们避免不了业务数值的运算,但是金钱类的计算为了不丢失精度,我们都是采用BigDecimal。那么问题来了,诸多的加减乘除,我们需要不断的使用add、multiply等去做运算,可读性差一不小心还会出错!!所以可以使用Aviator 表达式,直接上代码!!1、使用Aviator 需要导入包<dependency> <groupId>com.goog...原创 2019-10-21 19:50:22 · 1602 阅读 · 0 评论 -
Java的三种取整函数-floor()、ceil()、rint()
向下取整--舍去小数舍掉小数取整:Math.floor(2)=2舍掉小数取整:Math.floor(2.1)=2舍掉小数取整:Math.floor(2.5)=2舍掉小数取整:Math.floor(2.9)=2负数舍掉小数取整:Math.floor(-2)=-2负数舍掉小数取整:Math.floor(-2.1)=-3负数舍掉小数取整:Math.floor(-2.5原创 2017-08-20 20:28:21 · 2088 阅读 · 0 评论 -
Java项目中使用百度地图定位、导航开发
在web项目开发过程中,可能会需要地图的支持,实现定位、导航等功能,在这里以百度地图为例,做一个简单的地图显示。 下面代码使用JSP完成的,要想使用HTML版本,只需要把<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>这句话删掉,然后把文件的后缀名改成.HTML格式的转载 2017-08-12 14:10:14 · 20820 阅读 · 0 评论 -
java生成UUID
GUID是一个128位长的数字,一般用16进制表示。算法的核心思想是结合机器的网卡、当地时间、一个随即数来生成GUID。从理论上讲,如果一台机器每秒产生10000000个GUID,则可以保证(概率意义上)3240年不重复。UUID是1.5中新增的一个类,在java.util下,用它可以产生一个号称全球唯一的IDpackage com.mytest;import java.util.UU转载 2017-07-15 14:34:50 · 1164 阅读 · 0 评论 -
java程序打包成exe:一键安装双击运行——Java脱离jre安装程序制作
对于Java桌面应用来说,比较烦琐的就是安装部署问题,如:客户端是否安装有jre、jre版本、jre在哪里下载、如何用jre启动Java应用等等。不要说刚接触电脑的人,就算是比较熟悉电脑,如果没有接触过Java,面对一个Java应用,如何在Windows下启动它,估计都会折腾半天。所以这个是导致Java桌面应用被一些人所讨厌的最大原因,Java的优势是“一次编写,随处运行”,跨平台特性确实很好,但转载 2017-06-10 15:42:57 · 20336 阅读 · 1 评论 -
submit与button的区别
在jsp中的按钮的设置有两种方式,分别是submit和button,但是两个方式还是有一点点的小区别的!一、submit 1、提交按钮,点击之后直接将数据提交的服务器端。2、使用submit后,页面支持键盘enter键操作。3、submit需要有表单时,提交时才会带数据。4、当有表单的时候,如果提交的数据很多,那么使用submit比button要好,可以减少很多数据原创 2017-06-01 21:18:16 · 1550 阅读 · 0 评论