自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(42)
  • 资源 (2)
  • 问答 (1)
  • 收藏
  • 关注

原创 根据集合元素的某个属性去重

/** * 根据指定属性去重 */ private static <T> Predicate<T> distinctByKey(Function<? super T, Object> keyExtractor) { Map<Object, Boolean> seen = new ConcurrentHashMap<>(); return t -> seen.putIfAbs...

2021-08-12 10:08:45 500 1

原创 Java删除Map中元素java.util.ConcurrentModificationException”异常解决

今天在使用map并需要根据某些条件删除map元素时,自然而然想到调用Map中的remove(Object key)函数进行删除,代码如下://遍历map,如果key<5,那么就删除此元素。Map<Integer, Integer> users = new LinkedHashMap<Integer, Integer>();for (Map.Entry<Integer,Integer> entry : users.entrySet()){ for (

2021-01-26 13:46:27 1141 1

原创 解决多条定时任务同时执行造成系统阻塞的问题

普通的定时任务,会一个一个执行,当同一时间有多个定时任务启动并且含有数据量比较大的任务时,会阻塞其他的定时任务,这样会产生一系列的问题;解决办法:将定时任务放入线程池。配置如下:1、添加全局@EnableAsync 注解,开启对异步的支持@EnableAsync //开启对异步的支持@Componentpublic class sopServiceRecoveryController {}2、添加@Async 注解,将该定时任务设置成异步执行 @Async("executor1")

2020-12-22 11:03:05 2647

转载 java实现快速排序算法

快速排序1、算法思想快速排序是由冒泡排序改进而得到的,是一种分区交换排序方法。思想如下:一趟快速排序采用从两头向中间扫描的方法,同时交换与基准记录逆序的记录。(1)在待排序的N个记录中任取一个元素(通常取第一个记录)作为基准,称为基准记录;(2)定义两个索引 left 和 right 分别表示“首索引” 和 “尾索引”,key 表示“基准值”;(3)首先,尾索引向前扫描,直到找到比基准值小的记录(left != righ),并替换首索引对应的值;(4)然后,首索引向后扫描,直到找到比基准值大于

2020-12-18 15:34:13 6094 2

转载 java实现希尔排序算法

希尔排序1、算法思想希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组,算法便终止。简单插入排序很循规蹈矩,不管数组分布是怎么样的,依然一步一步的对元素进行比较,移动,插入,比如[5,4,3,2,1,0]这种倒序序列,数组末端的0要回到首位置很是费劲,比较和移动元素均需n-1次。而希尔排序在数组中采用跳跃式分组的策略,通过某个增量将数组元素划分为若干组,然后分组进行插入排序,随后逐步缩小增量,继续按

2020-12-18 15:25:26 969

原创 java利用二分法进行排序

二分法排序二分法排序是直接插入排序的改进版本,直接插入排序插入到前方集合中时采用的方式是逐个比较,二分法则是采用二分比较,与直接排序算法最大的区别在于查找插入位置时使用的是二分查找的方式,在速度上有一定提升。1、算法思想总共有N个元素,当插入第i个元素时,对前面的0~i-1个元素进行折半,先跟他们中间的那个元素比,如果小,那么再对前一半的元素进行折半,否则对后一半的元素进行折半,知道左<右,然后再把第i个元素前一位于目标位置之间的所有元素后移,再把第i个元素放在目标位置上。举例:例如有个

2020-12-18 15:13:29 4720 1

原创 java实现直接插入排序

直接插入排序1、算法思想将一个记录插入到已排好序的序列中,从而得到一个新的有序序列(将序列的第一个数据看成是一个有序的子序列,然后从第二个记录逐个向该有序的子序列进行有序的插入,直至整个序列有序)重点:使用哨兵,用于临时存储和判断数组边界。2、代码实现 public static void main(String[] args) { int arr[] = {2,1,5,3,6,4,9,8,7}; int temp; for (int i=1

2020-12-18 14:53:12 2548

原创 java实现选择排序算法

选择排序1、算法思想(1)找到所有数中最小值下标(2)第一趟循环将最小值的下标与第一个位置的数值交换位置,这样每次找到的最小值则固定到第一个(3)第二趟循环从第二个开始继续上边的步骤,因为上一趟已经将最小的找到并放到了第一个的位置,因此第二趟只需从第二个数值开始比较。2.代码实现:public static void selectionSort(int[] nums) { if (nums == null || nums.length < 2) { return

2020-12-18 14:44:19 799 1

原创 java实现冒泡排序算法

冒泡排序1.算法思想:类似于水中冒泡,较大的数沉下去,较小的数慢慢冒起来,假设从小到大,即为较大的数慢慢往后排,较小的数慢慢往前排。实现步骤:(1)两两比较(第一个数跟第二个数比较,第二个数跟第三个数比较,知道倒数第二个数跟倒数第一个数比较完),如果前者比后者大则交换位置。(2)第一趟最后一个数肯定是最大的数。(3)第二趟将第二大的数移动至倒数第二位。(4)第三趟将第三大的数移动至倒数第三位。(5)因此循环n-1次才能将顺序排好。2.代码实现:private int[] array =

2020-12-18 14:32:45 1267

原创 EditText保留两位小数

1.在布局文件限定输入的范围 <EditText android:id="@+id/txtDate" android:layout_width="150dp" android:digits="1234567890." android:inputType="number" android:layout_height="wrap_content" />2.在oncreate里添加EditText的监

2020-12-18 10:34:02 356

原创 websocket实现群发图片

流程:(群发图片)1.前台获取并连接websocket服务器,上传图片,将流、图片流通过websocket发送至服务器。2.后台搭建websocket服务器,以及消息处理服务,将接收到的图片流转发给所有在线客户端。3.客户端收到服务器转发的图片流,动态添加img标签,将图片在页面上展示。效果:1.未发图片时图片列表为空2.发送图片,在线的客户端都会收到图片消息。实现过程:1.前台代码:(1)html代码<!--发送图片按钮--> <form name="f

2020-12-15 13:53:32 4214

原创 a标签和js在新的标签页打开图片音频等链接

a标签在a标签中,有个属性target,作用就是控制连接是在什么地方打开的;target的值:1."_blank", 在新标签页打开连接2."_self", 在自身所在页面打开连接(如果连接是在iframe中,则就是在iframe中打开)在JS中打开链接如果在JS中打开链接,window.location.href是在本页面打开,而在新标签页打开则可以使用window.open(“地址”)这种方式来打开页面。...

2020-12-15 09:24:56 873

原创 解决浏览器Not allowed to load local resource

浏览器Not allowed to load local resource的解决方法1.问题描述Chrome浏览器出于安全方面的考虑,禁止网页访问本地文件。本人遇到的问题:使用a标签将本地磁盘的文件展示在页面,供用户下载。写法:<div id="file"> <h3>文件列表:</h3> <a href="D:/XXX.txt" download="">点击下载</a></div>浏览器报错:Not al

2020-12-14 17:34:34 34938 11

原创 超详细!搭建netty服务器和客户端实现多人聊天。

netty旨在为可维护的高性能、高可扩展性协议服务器和客户端的快速开发提供异步事件驱动的网络应用程序框架和工具。换句话说,Netty是一个NIO客户端服务器框架,可以快速轻松地开发协议服务器和客户端等网络应用程序。它极大地简化并简化了TCP和UDP套接字服务器开发等网络编程。1.引入jar包 <!--netty--> <dependency> <groupId>io.netty</groupId>

2020-11-28 14:38:56 726

原创 手动搭建I/O网络通信框架(三):NIO编程模型升级改造聊天室

手动搭建I/O网络通信框架(一):Socket和ServerSocket实现单聊手动搭建I/O网络通信框架(二):BIO编程模型实现群聊在第二节中用BIO编程模型,简单的实现了一个聊天室。但是其最大的问题在解释BIO时就已经说了:ServerSocket接收请求时(accept()方法)、InputStream、OutputStream(输入输出流的读和写)都是阻塞的。还有一个问题就是线程池,线程多了,服务器性能耗不起。线程少了,在聊天室这种场景下,让用户等待连接肯定不可取。今天要说到的NIO编程模型就

2020-11-25 11:03:11 162

原创 手动搭建I/O网络通信框架(二):BIO编程模型实现群聊

手动搭建I/O网络通信框架(一):Socket和ServerSocket实现单聊本节:手动搭建I/O网络通信框架(二):BIO编程模型实现群聊所谓BIO,就是Block IO,阻塞式的IO。这个阻塞主要发生在:ServerSocket接收请求时(accept()方法)、InputStream、OutputStream(输入输出流的读和写)都是阻塞的。这个可以在下面代码的调试中发现,比如在客户端接收服务器消息的输入流处打上断点,除非服务器发来消息,不然断点是一直停在这个地方的。也就是说这个线程在这时间是被

2020-11-25 09:07:18 164

原创 手动搭建I/O网络通信框架(一):Socket和ServerSocket实现单聊

Socket定义:套接字(socket)是一个抽象层,应用程序可以通过它发送或接收数据,可对其进行像对文件一样的打开、读写和关闭等操作。套接字允许应用程序将I/O插入到网络中,并与网络中的其他应用程序进行通信。网络套接字是IP地址与端口的组合,可以理解为两台机器或进程间进行网络通信的端点,这个端点包含IP地址和端口号。Socket和ServerSocket区别就如其名字一样,简单地说ServerSocket作用在服务端,用以监听客户端的请求。Socket作用在客户端和服务端,用以发送接收消息。但是就像上

2020-11-24 10:09:32 161

原创 浅谈+详解Quartz定时任务,快速入门Quartz。

大部分公司都会用到定时任务功能。举两个生活中的例子,例如火车票购票之后,后台就会插入一条待支付的task(job);再比如说优惠券快到期了,通过定时任务向未使用的用户发送提醒…还有很多类似的实际应用场景。这些提醒或者计时的工作当然不可能人工操作,那么我们就必须实现一个定时任务去实现这些功能。Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,完全由Java开发,可以用来执行定时任务,类似于java.util.Timer。但是相较于Timer, Quartz增加了

2020-11-13 16:52:36 736

原创 java项目之学生成绩管理系统供需要学习的新手下载(含源代码和数据库)。

学工管理系统:项目采用SpringBoot + Mybatis + Mysql + Maven搭建。项目包含:学生信息管理/班级信息管理/教师信息管理/课程信息管理/选课信息管理/考勤信息管理/请假信息管理/成绩信息管理/系统管理模块项目分为三个角色:管理员、老师、学生。不同角色的人具备不同的权限。教师可查看本班所有学员的基本信息,考勤,选课信息,分数等。学生只可查看本人的信息。学生可发起请假条,教师可审批本班学生的请假信息。可以将成绩导出成excel文档。… …项目下载地址:以下是系统的

2020-11-12 15:15:34 283 1

转载 Mybatis批量插入数据

由于项目需要生成多条数据,并保存到数据库当中,在程序中封装了一个List集合对象,然后需要把该集合中的实体插入到数据库中,项目使用了Spring+MyBatis,所以打算使用MyBatis批量插入,应该要比循环插入的效果更好,由于之前没用过批量插入,在网上找了一些资料后最终实现了,把详细过程贴出来。供以后查阅和学习。java代码:注意:这里循环的时候需new 出来新的对象,而不能通过循环改变属性的值就认为这是一个新的对象了,通俗的说就是new ReddemCode()要放在for循环的里面.java代

2020-11-12 14:17:54 111

原创 Lombok插件扭曲的审美,得不偿失!劝大家放弃使用lombok插件

为什么很多公司禁止使用Lombok?首先说使用Lombok有哪些隐患:JDK版本问题胁迫使用可读性差代码耦合度增加得不偿失不得不承认,Lombok是一个很不错的java库,可以在编程时少些代码并耍耍酷,简单的几个注解可以干掉一大片模板代码。但是所有的源代码很多时候是用来阅读的,只有很少时间用来执行。在没有用Lombok之前,我们的源代码看起来是这样的:public class User { String data; String name; public User

2020-11-10 10:08:30 358

原创 java单例模式——详解JAVA单例模式及8种实现方式

## 单例模式是最简单也是最基础的设计模式之一,下边一起学习一下单例模式!一.单例模式的定义:单例模式确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例。在计算机系统中,线程池、缓存、日志对象、对话框、打印机、显卡的驱动程序对象常被设计成单例。这些应用都或多或少具有资源管理器的功能。每台计算机可以有若干个打印机,但只能有一个Printer Spooler,以避免两个打印作业同时输出到打印机中。每台计算机可以有若干通信端口,系统应当集中管理这些通信端口,以避免一个通信端口同时被两个请求同时调用

2020-10-23 15:39:01 88453 11

原创 安卓开发——写一个类似于dialog的activity进行全局提示/系统提示

最近开发的app的需求是,无论用户处于哪一个页面,只要后台下载文件的线程执行完就要有一个弹出框进行通知提示。实现这一操作有多种实现方式:1.建一个基类,所有的activity继承基类,然后在基类当中进行广播。(我也是安卓小白,时间比较急还需现学,放弃)。2.建一个基类,所有的activity继承基类,建一个工具类,工具类中写一个入栈的方法,把当前打开的activity加入栈中,返回值是Stack<Activity>,这样需要弹出dialog时获取栈顶元素,就能确认用户在哪一个页面。(这个方法

2020-10-23 15:22:03 336

原创 java基础知识点,很基础,基础到不会都不行!

最近整理了一份java基础的知识点一份,对于初学者或者初级工程师来说,无论在码字过程中还是面试的时候,这些知识点是必须要掌握的。你的基础扎不扎实,通过以下25条知识点就能看出。JAVA基础篇面向对象的特征是什么?答案:封装:通过类把属性和对属性操作的方法封装在一起,自己的方法可以访问自己的属性。继承:是指可以让某个类型的对象获得另一个类型的对象的属性和方法,它支持按级分类的概念。多态:是指一个类实例相同方法在不同情形有不同表现形式。多态机制使具有不同内部结构的对象可以共享相同的外部接口。St

2020-10-23 14:38:32 166

原创 JAVA面试题——分享一波分企业整理的JAVA面试题(初/中/高级)。

最近“采访”了一批朋友,收集了一波java的面试题,初级、中级、高级都有,部分无用内容已被过滤。传统行业,互联网行业的初中高级都有。*州软件(java)1. HashTable和ConcurrentHashMap的区别2. ArrayList、vector、LinkledList的存储特性3. 垃圾回收机制4. 数据连接池的工作机制5. StringBuilder和StringBuffer的区别6. 手写一个算法,数组左边是奇数,右边是偶数,要求时间复杂度和空间复杂度分别是O(1)、O(n)

2020-10-23 14:21:19 149 1

原创 Java传输文件使用Base64优化传输速率。

问题:使用http进行文件传输时,将文件的byte[]转为json占用的内存空间会增加三倍左右。解决:将byte[]数组通过Base64转成String类型,上传String类型,服务端接收到String之后再通过Base64解密成byte[],最后存储为文件。//客户端String base64Str = Base64.getEncoder().encodeToString(byteArray);//服务端byte [] byteArray = Base64.getDecoder().decod

2020-10-09 13:24:32 3753 2

原创 安卓开发---防止重复触发点击事件

public class ClickUtils { private static long lastClickTime; public synchronized static boolean isFastClick() { long time = System.currentTimeMillis(); if ( time - lastClickTime < 500) { return tru

2020-09-25 14:18:37 248

原创 安卓开发---解决复杂listview中edittext数据混乱,抢占焦点,不可点击等。并给textview加点击事件。

最近遇到问题是listview中包含textview和edittext。其中textview还需要有点击事件。界面如下。一直遇到的问题是数据错乱和抢占焦点。一开始用某博主的方法,将view存在了map,但是只适用于没有点击事件的和edittext的listview,因为view一旦滑出屏幕再滑回来,点击事件就没有了。以下是具体实现代码: /** * 自定义listview适配器 */ class DataAdapter extends BaseAdapter {

2020-09-25 14:13:39 375

原创 安卓开发---隐藏系统导航栏/状态栏并全屏显示。

protected void hideBottomUIMenu() { //隐藏虚拟按键,并且全屏 if (Build.VERSION.SDK_INT > 11 && Build.VERSION.SDK_INT < 19) { // lower api View v = this.getWindow().getDecorView(); v.setSystemUiVisibility(View....

2020-09-25 13:52:12 533

原创 安卓开发---将sqlite数据库导入手机

在PC端建好数据表。在res资源目录下新建一个raw文件夹。将db文件放进去。然后执行以下代码即可。/** * 将数据库导入手机 */public class MyDatabaseHelper { private final int BUFFER_SIZE = 400000; public static final String DB_NAME = "amma.db"; //保存的数据库文件名 public static final String PACKAGE_NAME =

2020-09-25 13:48:27 547

原创 JAVA移动某个文件到新的文件夹(目录)下

移动文件到新的路径 /** * 移动文件 * @param oldPath 旧文件路径 * @param newPath 新文件路径 */ public static void filemove(String oldPath, String newPath) { try { int bytesum = 0; int byteread = 0; File oldfil

2020-09-03 13:55:08 639

原创 mysql时间转换格式,将YYYY-M-D转换为YYYY-MM-DD

mysql 将 YYYY-M-D hⓂ️s转为YYYY-MM-DD hh:mm:ss(转换前:2020-9-3 1:8:20 转换后:2020-09-03 01:08:20)大写H是24小时制,小写是12小时制DATE_FORMAT(find_time,'%Y-%m-%d %H:%i:%s')

2020-09-03 13:50:20 11535

原创 烦人的word

写过的最复杂的word表格的导出。。。。。终于完事了。我就像那个count,在for循环里迷了路。。。 Document doc = new Document(); try { doc.loadFromFile(Global.getDownloadPath() + "wordtemp/" + equnum + "装备定期维护检查.doc"); } catch (Exception e) { e.printStackTrace

2020-09-03 10:02:47 201

原创 java代码构建二叉树,以及获取叶子节点。

/** * 二叉树结点有三个属性; * 一个int存放数据,leftchild指向左孩子,rightchild指向右孩子 */class BinaryTreeNode{ private int data; private BinaryTreeNode leftChild; private BinaryTreeNode rightChild; //有参数构造方法,传入数据data public BinaryTreeNode(int data) {

2020-08-27 09:50:34 988

原创 Java实现将某个文件夹下的文件压缩打包

/** sourceFilePath——————>需要打包的文件夹路径 zipFilePath———————>打包后压缩包存放的路径 fileName———————>压缩包名称 */ public static boolean fileToZip(String sourceFilePath,String zipFilePath,String fileName){ boolean flag = false; File sourceFi.

2020-08-22 10:40:50 924

原创 java导出word复杂表格

主要问题和要求:1.以此为模板,实现java填写并导出。2._____年 需要填写。3.表头的月日需要填写。4.检查内容不确定哪里是拆分单元格。动态变化的。5.表格不一定是多少页。原始表格最终表格 public static void main(String[] args) throws IOException, InvalidFormatException { /** * 加载文档/填写_____年 */ D

2020-08-14 15:01:46 1833 1

原创 Java转换日期格式,将yyyy-mm-dd hh:mm:ss的字符串转为年月日 时分

//工具类:将yyyy-mm-dd hh:mm:ss形式的字符串转为年月日时分秒 public static String caseData(String dt){ Date date = null; try { date = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").parse(dt); } catch (ParseException e) { e.prin

2020-08-13 16:09:23 3609

原创 Java使用Spire.Doc将多个word里的内容合并到一个word里边,格式保留

import com.spire.doc.*;/** * 合并word文档 */public class MergeDocFile {//将2.doc合并到1里边,这是在1.doc里另开一页放的2.doc的内容。如果需要追加数据请参考spire的帮助文档 public static void mergeDoc(){ String filePath1 = "D:/1.doc"; String filePath2 = "D:/2.doc";

2020-08-13 16:04:47 1598 2

原创 Java导出excel表格,相同行合并,动态合并单元格。

网上找的某个大佬的,忘了大佬地址了,就不附链接了。大佬看到请私信我~~~代码过程很复杂,但是用起来很简单,拿过去直接用就行 /** * @param title 标题集合 tilte的长度应该与list中的model的属性个数一致 * @param maps 内容集合 * @param mergeIndex 合并单元格的列(0,1,2)代表前三列需要行合并。必须要传值,也必须从0开始传。 */ public static String createE

2020-08-13 15:55:28 4256 2

原创 Java使用Spire.Xls和POI将Excel表格存到Word文档

spire.xls不能直接将excel存储到word,但是可以将excle先存储为html文件,然后再通过POI把html文件转为word文档,且看操作:1.//传入excel的路径,1:1存储为html文件,return html的路径public static String caseexcel(String filename){ Workbook wb = new Workbook(); wb.loadFromFile(filename); int dot = filena

2020-08-13 15:47:53 1372 2

studentmanager-master.zip

学工管理系统: 项目采用SpringBoot + Mybatis + Mysql + Maven搭建。 项目包含:学生信息管理/班级信息管理/教师信息管理/课程信息管理/选课信息管理/考勤信息管理/请假信息管理/成绩信息管理/系统管理模块 项目分为三个角色:管理员、老师、学生。不同角色的人具备不同的权限。 教师可查看本班所有学员的基本信息,考勤,选课信息,分数等。学生只可查看本人的信息。 学生可发起请假条,教师可审批本班学生的请假信息。 可以将成绩导出成excel文档。 … …

2020-11-12

Spire.doc免费版,jar包

操作word文档,doc/docx格式的文档。可导入导出文档,编辑文档,增删改word表格,获取word表格内容,合并单元格操作。此处提供jar,具体API移步官网和本人博客

2020-11-12

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除