Java技术体系
文章平均质量分 61
Java、并发编程、设计模式
splendor.s
这个作者很懒,什么都没留下…
展开
-
Executor框架线程池参数配置原则
线程池都经常用,但是具体的参数和具体的参数设置一定要知道,否会任务拒绝或者多线程上下文切换频繁;高并发尽量不要用java提供的FixedThreadPool和SingleThreadExecutor ,直接用ThreadPoolExecutor自己定义参数,合理的配置参数。通用的设置:* 具体的参数设置需要根据几个值来决定 - tasks :希望每秒能执行的任务数 - taskcost:平均每个任务花费时间(包含cpu轮转的时间) ...原创 2022-01-25 10:00:49 · 919 阅读 · 0 评论 -
响应式操作实战案例
注意,所有事件,甚至终止事件,都是可选的:没有 onNext 事件,但是 onComplete 事件表示一个空的有限序列,但是移除 onComplete 并且你有一个无限的空序列(除了关于取消的测试之外,没有特别有用)。如果我们已经有了一个数组、一个 Iterable 对象或 Stream 对象,那么就可以通过 Flux 提供的 fromXXX() 方法组来从这些对象中自动创建 Flux,包括 fromArray()、fromIterable() 和 fromStream() 方法。原创 2023-03-10 18:37:03 · 686 阅读 · 0 评论 -
单例模式--十种实现方式的优缺点分析
基本的实现思路单例模式要求类能够有返回对象一个引用(永远是同一个)和一个获得该实例的方法(必须是静态方法,通常使用getInstance这个名称)。单例的实现主要是通过以下两个步骤:将该类的构造方法定义为私有方法,这样其他处的代码就无法通过调用该类的构造方法来实例化该类的对象,只有通过该类提供的静态方法来得到该类的唯一实例; 在该类内提供一个静态方法,当我们调用这个方法时,如果类持有的引用不为空就返回这个引用,如果类保持的引用为空就创建该类的实例并将实例的引用赋予该类保持的引用。1、饿汉式(原创 2020-07-16 17:43:43 · 653 阅读 · 0 评论 -
设计模式--值对象
★ 场景和问题在Java开发时,需要来回交换大量的数据,比如要为方法传入参数,也要获取方法的返回值,该如何能更好的进行数据的交互?★ 基本的编写步骤◎第1步:写一个类,实现可序列化(如果以后数据是往数据库里存的,那么可以不序列化,节省资源)◎第2步:私有化所有属性,保持一个默认构造方法(public无参)◎第3步:为每个属性提供get()、set()方法(如果是bool原创 2017-08-12 15:41:09 · 416 阅读 · 1 评论 -
设计模式--装饰模式
★ 场景和问题在不对原有对象类进行修改的基础上,如何给一个或多个已有的类对象提供增强额外的功能?★ 引例写一个MyBufferedReader类,使它能够对字符流(如FileReader、InputStreamReader和PipedReader等)进行功能增强:(1) 提供带缓冲的myRead()方法,对原有的read()方法进行增速;(2)提供一个能够每次读取一行字原创 2017-08-13 18:00:15 · 416 阅读 · 1 评论 -
设计模式--工厂模式
★ 场景和问题Java程序开发讲究面向接口编程,隐藏具体的实现类,可是如何得到接口呢?工厂的本质是“选择实现”.工厂、接口和实现类之间的技术边界:工厂只负责选择实现,实现类才做真正的实现,而接口是限定到底实现什么东西和返回什么东西,三者之间分工明确、各负其责。附代码如下:package SingelModel.pattern.factory.dep;public int原创 2017-08-12 14:58:12 · 311 阅读 · 1 评论 -
设计模式之--模版方法
在面向对象系统的分析与设计过程中经常会遇到这样一种情况:对于某一个业务逻辑(算法实现)在不同的对象中有不同的细节实现,但是逻辑(算法)的框架(或通用的应用算法)是相同的。Template Method提供了这种情况的一个实现框架。Template Method模式是采用继承的方式实现这一点:将逻辑(算法)框架放在抽象基类中,并定义好细节的接口,子类中实现细节。Strategy模式解决的是和Template Method模式类似的问题,但是Strategy模式是将逻辑(算法)封装到一个类中,...原创 2021-01-16 16:05:01 · 187 阅读 · 1 评论 -
设计模式--单例变形(多例)
★ 缓存在单例中的使用缓存在编程中使用很频繁,有着非常重要的作用,它能够帮助程序实现以空间换取时间,通常被设计成整个应用程序所共享的一个空间,现要求实现一个用缓存存放单例对象的类。说明:该缓存中可以存放多个该类对象,每个对象以一个key值标识,key值相同时所访问的是同一个单例对象。public class A { private int value; public int原创 2017-08-12 14:44:01 · 539 阅读 · 1 评论 -
设计模式--策略模式
在软件开发中也常常遇到类似的情况,当实现某一个功能存在多种算法或者策略,我们可以根据环境或者条件的不同选择不同的算法或者策略来完成该功能,如数据排序策略有冒泡排序、选择排序、插入排序、二叉树排序等。 如果使用多重条件转移语句(例如万恶的if--else)实现(即硬编码),不但使条件语句变得很复杂,而且增加、删除或更换算法要修改原代码,不易维护,违背开闭原则。如果采用策略模式就能很好解...原创 2019-10-23 16:38:51 · 616 阅读 · 2 评论 -
设计模式--建造者模式
模式的定义与特点 建造者(Builder)模式的定义:指将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示,这样的设计模式被称为建造者模式。它是将一个复杂的对象分解为多个简单的对象,然后一步一步构建而成。它将变与不变相分离,即产品的组成部分是不变的,但每一部分是可以灵活选择的。该模式的主要优点如下: 1.各个具体的建造者相互独立,有利于系统的扩展...原创 2019-10-30 20:24:57 · 330 阅读 · 1 评论 -
设计模式--策略模式(注解)
策略模式策略模式可以代替if-else,策略模式实现的方式也大同小异。主要是定义统一行为(接口或抽象类),并实现不同策略下的处理逻辑(对应实现类)。客户端使用时自己选择相应的处理类,利用工厂或其他方式(前面文章有分享到)。注解实现本文要说的是用注解实现策略模式的方式,以及一些注意点。例如:以最常 见的订单处理为例。首先定义这样一个订单实体类:@Datapublic class Order { /** * 订单来源 */ private String原创 2020-07-21 10:26:05 · 937 阅读 · 0 评论 -
Canal实现MySQL实时同步数据到ES
一、canal简介 canal主要用途是对MySQL数据库增量日志进行解析,提供增量数据的订阅和消费,简单说就是可以对MySQL的增量数据进行实时同步,支持同步到MySQL、Elasticsearch、HBase等数据存储中去。二、canal工作原理 canal会模拟MySQL主库和从库的交互协议,从而伪装成MySQL的从库,然后向MySQL主库发送dump协议,MySQL主库收到dump请求会向canal推送binlog,canal通过解析binlog将数据同步到其他存储中去。...原创 2020-11-02 16:04:48 · 6922 阅读 · 5 评论 -
ElasticSearch 在Java中的各种实现
ES查询原创 2023-03-07 19:47:51 · 2312 阅读 · 0 评论 -
springboot+elasticSearch实现数据高效搜索
ElasticSearch,正是 Elastic 公司最出名的产品之一,其中还包括有分布式日志解决方案 ELK(Elastic Search、Logstash、Kibana)、Beats、ECE等。那 ElasticSearch 究竟有什么作用呢?本质其实是一个基于 Lucene 开发的搜索服务器,它提供了一个基于 RESTful web 接口的分布式多用户能力的全文搜索引擎,能够达到实时搜索、稳定、可靠、快速、安装使用方便等特点。同时,作为 Apache 许可条款下的开放源码,目前已经成为一.原创 2020-07-15 15:40:27 · 1036 阅读 · 0 评论 -
冒泡、选择、插入、二分排序算法 -- Java版
冒泡排序:首先,冒泡排序又称起泡排序我这里总结了排序两种冒泡排序一种是普通的冒泡排序,一种是优化后冒泡,冒泡排序就是拿第一个数其他所有的数去比较,经过一趟比较把这组数据最大的数据找出来第一次总共要比较(n-1趟),接着又从第一个数开始找第二大的数(n-2趟),以此类推........,附代码如下: public void swap(int[]a, int i, int j原创 2017-07-17 15:51:51 · 487 阅读 · 1 评论 -
快速排序-Java版
算法特点:某个记录为界(该记录称为支点或枢轴),将待排序列分成两部分:①一部分: 所有记录的关键字大于等于支点记录的关键字②另一部分: 所有记录的关键字小于支点记录的关键字算法描述:1)任取待排序记录序列中的某个记录(例如取第一个记录)作为基准(枢),按照该记录的关键字大小,将整个记录序列划分为左右两个子序列2)左侧子序列中所有记录的关键字都小于或等于基准记录的关键原创 2017-08-11 22:39:45 · 281 阅读 · 1 评论 -
基于UDP实现用户数据互传案例
UDP--User Datagram Protocol原创 2017-08-13 19:26:07 · 423 阅读 · 1 评论 -
Mybatis传递多个参数的4种处理方式
今天带代码遇到的小问题,做一个小总结,使用Mybatis最大的特性就是sql需要自己写,而写sql就需要传递多个参数。面对各种复杂的业务场景,传递参数也是一种学问。下面给大家总结了以下几种多参数传递的方法。下面给大家总结了以下几种多参数传递的方法。方法1:顺序传参法//接口中方法的参数顺序,相对应public User selectUser(String name, int d...原创 2019-10-24 14:27:06 · 1020 阅读 · 0 评论 -
Java8新特性Stream用法
Stream API 介绍Java8中有两个最为重要的改变。第一个是Lambda表达式;另一个就是Stream API 。它可以指定你希望对集合进行的操作,可以执行非常复杂的查找、过滤和映射数据等操作。Stream(流)是一个来自数据源的元素队列并支持聚合操作。元素是特定类型的对象,形成一个队列。 Java中的Stream并不会存储元素,而是按需计算。数据源 流的来源。 可以是集合,数组,I/...原创 2020-04-03 09:32:40 · 207 阅读 · 0 评论 -
Java实现条件性参加会议问题(两种方法)
有人邀请A,B,C,D,E,F 6个人参加一项会议,这6个人有些奇怪,因为他们有很多要求,已知: 1)A,B两人至少有1人参加会议; 2)A,E,F 3人中有2人参加会议; 3)B和C两人一致决定,要么两人都去,要么两人都不去; 4)A,D两人中只1人参加会议; 5)C,D两人中也只要1人参加会议; 6)如果D不去,那么E也决定不去。那么最后究竟有哪几个人参加了会议呢?...原创 2017-08-20 20:58:25 · 1001 阅读 · 0 评论 -
Java采用POI优化实现导出excel百万级数据量
1.目前导出excel的几种格式:Excel 2003、Excel 2007在POI中使用HSSF对象时,excel 2003最多只允许存储65536条数据,一般用来处理较少的数据量,这时对于百万级别数据,在计算机性能稍低的机器上测试,就很容易导致堆溢出Excel 2003:在POI中使用HSSF对象时,excel 2003最多只允许存储65536条数据,一般用来处理较少的数据量。这时对于...原创 2019-02-20 10:16:59 · 3626 阅读 · 1 评论 -
Java 8中List转Map的多种方式
List转Map的的各种方式原创 2023-03-07 15:14:50 · 19543 阅读 · 0 评论 -
基于TCP实现用户数据数据传输案例
TCP Socket:IP地址和端口,套接字1)Socket和ServerSocket2)建立客户端和服务器端3)建立连接后,通过Socket中的IO流进行数据的传输4)关闭socket同样,客户端与服务器端是两个独立的应用程序。☆基本思路(客户端)1)客户端需要明确服务器的ip地址以及端口,这样才可以去试着建立连接,如果连接失败,会出现异常。2)连接...原创 2017-08-14 20:51:35 · 459 阅读 · 1 评论 -
JavaSE结合Socket实现QQ聊天
前面几天刚学学了TCP、UDP等协议,因此这里算是一个小小总结项目,仿照QQ用C/S模式来做一个项目!首先做了一个设计:在服务器端 用一个HashMap<userName,socket> 维护所有用户相关的信息,从而能够保证和所有的用户进行通讯。客户端的动作:(1)连接(登录):发送userName 服务器的对应动作:1)界面显示,2)通知其他用户关于你登录的信...原创 2017-08-17 21:23:11 · 3120 阅读 · 0 评论 -
Java8-Lambda学习笔记
Lambda表达式是Java SE 8中一个重要的新特性。lambda表达式允许你通过表达式来代替功能接口。 lambda表达式就和方法一样,它提供了一个正常的参数列表和一个使用这些参数的主体(body,可以是一个表达式或一个代码块)。Lambda表达式还增强了集合库。 Java SE 8添加了2个对集合数据进行批量操作的包:java.util.function包以及java.util.stream包。 流(stream)就如同迭代器(iterator),但附加了许多额外的功能。 总的来说,lamb...原创 2020-07-15 11:17:16 · 358 阅读 · 0 评论 -
Java8中常见用法
Stream是jdk8中java.util包中的新特性Stream(流)是一个来自数据源的元素队列并支持聚合操作元素是特定类型的对象,形成一个队列。 Java中的Stream并不会存储元素,而是按需计算。数据源流的来源。 可以是集合,数组,I/O channel, 产生器generator 等。聚合操作类似SQL语句一样的操作, 比如filter, map, reduce, find, match, sorted等。前面也有提到过和以前的Collection操作不同, Stream操作还有两..原创 2020-07-24 10:18:11 · 698 阅读 · 0 评论