- 博客(78)
- 资源 (11)
- 收藏
- 关注
原创 Netty中的内存分配分析
1.ByteBuf的继承类图1.1 AbstractBytebuf的实现int readerIndex;int writerIndex;private int markedReaderIndex;private int markedWriterIndex;private int maxCapacity;主要实现了index的实现,定义了_getByte和_setByte由其子类实现1.2 ByteBuf分类 可以分为3类Pooled和Unpooled分类区别:pooled 是从已经分
2020-07-27 23:49:29 692
原创 寻找迷宫中的最少步数的一个小算法
package algorithm;public class Algorithm2 {/** * * s 0 1 0 * 0 0 0 0 * 0 0 1 0 * 0 1 e 0 * 0 0 0 1 * * * 竖轴为x轴 * 横轴为Y轴 */ /** * 迷宫找最短路径 0代表平地,1代表障碍物,s代表起点,e代表终点 (起点和终点肯定也是0...
2020-02-23 12:36:20 425
原创 spring中beanName的命名规则
问题如下:今天工作中有一个类的命名为XPersonService,我获取bean的时候代码如下AnnotationConfigApplicationContext config = new AnnotationConfigApplicationContext(AppConfig.class);XpersonService xPersonService = (XpersonService) c...
2020-02-22 21:53:56 2063
原创 java实现1~n 的全排列
public class Algorithm1 { /** * 1-n 全排列算法 */ static int[] marks = new int[10];//标记某个数是否被用过,可以自己调整大小 static int[] nums = new int[10]; static int n; public static void main(String[] args) {...
2020-02-20 22:00:48 1157
原创 spring中用到的两种代理技术
其实我自己之前整理过这方面的知识,没有整理到博客上来。最近在看spring源码时,对这两种技术又加深了理解,索性整理了到博客上,不为别的,就是自己做笔记了。1.JDK动态代理技术 (spring的FactoryBean中的getObject()方法可以使用)被代理对象必须要实现接口,才能产生代理对象.如果没有接口将不能使用JDK动态代理技术2.cglib代理技术(当我们使用@Conf...
2019-11-10 21:12:08 3064
原创 学习netty时查阅到不错的资料的记录
1.Netty:option和childOption参数设置说明https://www.jianshu.com/p/0bff7c020af2陆续更新中…
2019-09-21 22:49:23 146
原创 简单认识java中的bytebuffer和netty中的bytebuf
一 nio中的bytebuffer的认识1.bytebuffer的数据结构对于ByteBuffer,其主要有五个属性:mark,position,limit,capacity和array。这五个属性的作用如下:mark:记录了当前所标记的索引下标;position:对于写入模式,表示当前可写入数据的下标,对于读取模式,表示接下来可以读取的数据的下标;limit:对于写入模式,表示当前可以...
2019-09-18 13:53:10 2956
原创 java对象头分析
一:对象头介绍hotSpot虚拟机中,对象在内存中的存储布局可以分为三块区域:对象头(header),实例数据(Insrance Data)和对齐填充(Padding).HotSpot虚拟机的对象头(Object Header)包括两部分信息,第一部分用于存储对象自身的运行时数据,如:哈希码(HashCode),GC分带年龄,锁状态标志,线程持有的锁,偏向线程ID,偏向时间戳等等,这部分数据的...
2019-07-17 12:01:49 2704 1
原创 自动装箱的陷阱
1.最近在看深入理解java虚拟机这本书中看到了这个知识点,感觉很不错,就记录一下。包装类的 "=="运算在不遇到算数运算的情况下不会自动拆箱,以及它们的equals()方法不处理数据转型的关系。 @Test public void fn1() { Integer a = 1; Integer b = 2; Integer c = 3;...
2019-06-16 10:27:54 191
原创 java基础
1.Object再带的方法有哪些? 1.equals 2.hashcode 3.clone 4.getClass 5.notify 6.notifyAll 7.wait 8.finalize 9.toString2.读写一个完整限定名的java方法,可自创,可被写java类中的方法。 ...
2019-05-22 09:18:16 184
原创 编译spring源码
想要换一个好工作,拿一个满意的薪水,必须了解源码,所以只能硬着头皮啃源码了。1.先看下SpringFrameWork的整体架构图2.配置gradle环境2.1 gradle地址:https://gradle.org/releases/提示:下载binary-only即可。2.2配置gradle环境 百度即可2.3 打开cmd 输入gradle -v 查看环境是否构建好3 下载...
2019-02-13 16:46:37 512
转载 代理模式与装饰模式的区别
装饰器模式关注于在一个对象上动态的添加方法,然而代理模式关注于控制对对象的访问。换句话 说,用代理模式,代理类(proxy class)可以对它的客户隐藏一个对象的具体信息。因此,当使用代理模式的时候,我们常常在一个代理类中创建一个对象的实例。并且,当我们使用装饰器模 式的时候,我们通常的做法是将原始对象作为一个参数传给装饰者的构造器。代理模式//代理模式public class Proxy...
2019-01-28 08:59:57 263
原创 java中常见的死锁以及解决方法
在java中我们常常使用加锁机制来确保线程安全,但是如果过度使用加锁,则可能导致锁顺序死锁。同样,我们使用线程池和信号量来限制对资源的使用,但是这些被限制的行为可能会导致资源死锁。java应用程序无法从死锁中恢复过来,因此设计时一定要排序那些可能导致死锁出现的条件。1.一个最简单的死锁案例当一个线程永远地持有一个锁,并且其他线程都尝试获得这个锁时,那么它们将永远被阻塞。在线程A持有锁L并想获得...
2019-01-15 23:17:10 33326 2
原创 自定义一个Thread基类
场景:在应用程序中我们需要自己定义一个特殊的线程来调试,以区分其他的线程。比如说:为线程指定名字,设置自定义的UncaugthExceptionHandler向Logger中写入信息,维护一些统计信息(包括有多少线程被创建和销毁),以及在线程被创建和终止时把调试消息写入日志。代码如下:public class MyAppThread extends Thread{ public sta...
2019-01-13 17:46:11 592
原创 线程饥饿死锁
1.饥饿死锁介绍在线程池中,如果任务依赖于其他任务,那么可能产生死锁。在单线程Executor中,如果一个任务将另一个任务提交到同一个Executor,并且等待这个被提交任务的结果,那么通常会发生死锁。第二个任务停留在工作队列中,并等待第一个任务完成,而第一个任务又无法完成,因为它在等待第二个任务的完成。在更大的线程池中,如果所有正在执行任务的线程都由于等待其他仍处于工作队列中的任务而阻塞,那么...
2019-01-13 16:29:03 342
原创 shutdownNow的局限性以及解决办法
局限性:showdownNow会尝试取消正在执行的任务并返回所有已经提交但尚未开始执行的任务。也就是说我们不能了解到哪些任务已经开始但是尚未结束。解决办法如下:思路:判断任务在返回时是否处于中断状态。代码:public class TrackingExecutor extends AbstractExecutorService{ private final ExecutorServic...
2019-01-12 19:37:30 1195
原创 java实现日志服务
我们在服务器程序中经常用到日志,日志对于我们排查问题有很大的帮助。下面是日志服务的思路以及实现思路:多个生产者单个消费者的设计方式,每个调用log的操作都相当于一个生产者,而后台的日志线程则相当于消费者。public class LoggerService { private final BlockingQueue<String> queue; private final L...
2019-01-12 18:15:36 3876
原创 如何正确的终止线程
大多时候线程是运行直到结束或者让他们自己停止。然而有时候我们希望提前结束任务或线程,或许是因为用户取消的操作,或者应用程序需要被快速关闭。java中没有提供任何机制来安全地终止线程。但它提供了中断,这是一种协作机制,能够使一个线程终止另一个线程的当前工作。这种协作方式是必要的,我们很少希望某个任务,线程或服务立即停止,因为这种立即停止会使共享的数据结构处于不一致的状态。相反,在编写任务和服务时...
2019-01-12 17:48:24 2529
原创 java实现旅行预订门户搜索报价方案
**问题:**需要做这样一个旅行预订门户网站-----用户输入旅行的日期和其他需求,门户网站获取并显示来自多条航线,旅店或汽车租赁公司的报价。**分析:**在获取不同公司报价的过程中,可能会调用web服务,访问数据库,执行一个EDI事务或其他机制。在这种情况下,不易让页面的相应时间受限于最慢的时间响应,而应该只显示在指定时间内收到的信息。对于没有及时响应的服务提供者,页面可以忽略他们,或者显示一...
2019-01-09 17:17:20 420
原创 如何高效实现一个页面渲染器
一 java线程池的基础知识(磨刀不误砍柴工)1.newFixedThreadPool。newFixedThreadPool将创建一个固定长度的线程池,每当提交一个任务时创建一个线程,直到达到线程池的最大数量,这时线程池的规模将不再变化(如果某个线程由于发生了未预期的Exception而结束,那么线程池会补充一个新的线程)。2.newCachedThreadPool。newCachedThr...
2019-01-09 14:43:03 323
原创 java并发实战第一部分小结
java并发编程实战第一部分总结笔记1.可变状态是至关重要的所有的并发问题都可以归结为如何协调对并发状态的访问。可变状态越少,就越容易确保线程安全性。2.尽量将域声明为final类型,除非需要他们是可变的。3.不可变对象一定是线程安全的。不可变对象能极大地降低并发编程的复杂性。它们更为简单而且安全,可以任意共享而无需使用加锁或保护性复制等机制4.封装有助于管理和复杂性在编写线程安全的...
2019-01-07 22:38:18 137
原创 学习如何构建一个高效且可伸缩的缓存
我们平时处理高并发的请求处理时,服务器的压力会很大。我们常做的就是构建一个高效的可伸缩的缓存来减轻服务器的压力。1.第一次尝试分析:使用 HashMap充当cache。public interface Computable&lt;A,V&gt; { V compute(A arg)throws InterruptedException;}public class Memoizer...
2019-01-07 10:20:03 186
原创 栅栏
1.栅栏与闭锁的区分相同点:栅栏类似与闭锁,都能阻塞一组线程直到某个事件的发生。不同点:闭锁是一次性对象,一旦终止就不能被重置,一般用于等待事件。栅栏是所有的线程必须都到达栅栏的位置,才能继续执行,一般用于等待其他线程,以及实现一些协议。比如:几个家庭决定在某个地方集合:“所有人6:00”在麦当劳集合,到了以后等待其他人,之后在讨论下一步要做的事情。2.CyclicBarrier的使用注...
2019-01-05 22:07:12 243
原创 http和https的区别
1.首先来了解一下对称加密算法和非对称加密算法1.1 对称加密算法 -共享密钥加密对称加密是最快速、最简单的一种加密方式,加密(encryption)与解密(decryption)用的是同样的密钥(secret key),这种方法在密码学中叫做对称加密算法。对称加密有很多种算法,由于它效率很高,所以被广泛使用在很多加密协议的核心当中。对称加密通常使用的是相对较小的密钥,一般小于256...
2019-01-04 10:07:35 166
原创 信号量
计数信号量用来控制同时访问某个特定资源的操作数量或者同时执行某个指定操作的数量。可以用来实现某种资源池(数据库连接池)或对容器施加边界。例如:使用Semaphore来为容器设置边界思路:将Semaphore的计数值为池的大小,并从池中获取一个资源之前先调用acquire方法获取一个许可,在将资源返回给池之后调用release释放许可,那么acquire将一直阻塞直到资源池不为空。publi...
2019-01-02 23:25:07 202
原创 简单分析TCP3次握手4次挥手
1.TCP头部结构TCP标志位有6种标识SYN(synchronous建立联机)ACK(acknowledgement确认)PSH(push传送)FIN(finish结束)RST(reset重置)URG(urgent紧急)Sequence number(顺序号码)Acknowledge number(确认号码)2本地抓包注意:wireshark是不可以抓取本地回路的包,如...
2019-01-02 17:35:35 153
原创 java中的闭锁
/** * */package bi_suo;import java.util.concurrent.CountDownLatch;/** * @author zpf * @date 2018年12月28日 * 闭锁是一个同步工具类,可以延迟线程的进度直到其到达终点状态。 * 使用闭锁来测试n个线程并发执行某个任务时所需要的时间. */public class BiS...
2019-01-01 15:10:56 853
原创 java多线程相关知识点
1.sleep和wait的区别 (1).sleep是Thread中的静态方法,谁调用谁去睡觉,即使在T1线程里调用了T2线程的sleep方法, 实际上还是T1去睡觉。 (2)sleep方法不会释放对象得锁,而wait方法释放了锁. (3)wait,notify和notifyAll只能在同步控制方法或者同步控制块里面使用,而sleep可以在任何地方使用。2.多线程练习(1)子线程循环...
2018-12-28 11:33:24 388
原创 java.net.SocketException MESSAGE: Broken pipe (Write failed)
1.我的项目环境 :javaweb项目采用c3p0连接池与mysql数据库通讯,运行在centos7中的tomcat容器中。症状如下:1.偶尔会报如下的错误(大致是一天一次,时间不定),此次插入数据库失败,但是重新插入就会成功。2.我的c3p0配置如下&lt;c3p0-config &gt; &lt;default-config&gt; &lt;property name="user...
2018-11-01 09:52:53 6451
原创 阿里云centos7服务器关于80端口和443端口
昨天登录阿里云平台被告知我的服务器被别人在美国等地使用git登录过,我怀疑是我的密码泄露了,所以修改密码后重启服务器,随后写的小程序发现不能用了(小程序要求https方式访问),排查了老半天,发现443端口不通,随后自己折腾了一下午,解决了,自己记录一下。打开端口的步骤: 1. 查看防火墙状态 firewall-cmd –state2.打开防火墙 重启服务则会断开tcp会话。 s...
2018-09-08 11:33:57 8127 1
原创 Invalid bound statement (not found) 的排查思路
spring整合mybatis时,自己写了一个junit测试,结果报org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.zpf.mapper.IUserMapper.findUserById at org.apache.ibatis.binding.MapperMe...
2018-08-17 14:56:32 2830 1
原创 HTTP Status 500 - Could not open Hibernate Session for transaction; JDBC begin transaction failed
最近这几天写了一个可以后台查看洗衣机消费数据的简单系统,前端是用的easyUI,后台用的ssh框架。 数据库用的是mysql。 我在本地项目没问题,但是当放到服务器上的tomcat后,早晨上班访问了一下网站,发现竟然报500。org.springframework.transaction.CannotCreateTransactionException: Could not open Hi...
2018-07-31 12:06:03 2344
原创 StringUtils.isNotEmpty(String str)和StringUtils.isNotBlank(String str)的使用
自己在项目顺手写了一个用 != ” ” 来判断这个String 字符串是否为空字符串,自己回过头来一看,感觉很二逼。(不知道为啥当时自己没注意到 == 和equals的区别)StringUtils中有方法判断字符串是否为空,索性看了一下,人家是怎样实现的。StringUtils的源码地址176 /**177 * <p>Checks if a ...
2018-07-27 10:29:16 1768
原创 js中的setTimeout和setInterval到底有啥区别?
最近在写小程序和蓝牙交互时,由于数据包可能会受到干扰,用到重发机制,所以需要js中的延时方法。我们知道js中的延时加载有两个方法分别是setTimeout和setInterval,这两个方法有啥差别呢?1. setTimeout的使用方法setTimeout allows to run a function once after the interval of time.在延时后的只执...
2018-07-20 11:45:18 20427
原创 jQuery插件ocupload多次上传同一个文件失效?
最近用ocupload插件上传excel表格到服务器,发现这个插件有点问题:在IE和Chrom浏览器中,只有第一次上传文件的请求会被服务器收到,以后的上传请求服务器都接收不到。目前只能第一次上传文件后,在上传相同的文件时,刷新一下界面再上传。但是在FireFox浏览器中不会出现这个情况。...
2018-07-14 17:59:21 675 3
原创 (二)小程序蓝牙和设备通讯
(一)蓝牙需要知道的几个名词1、profile profile可以理解为一种规范,一个标准的通信协议,它存在于从机中。蓝牙组织规定了一些标准的profile,例如 HID OVER GATT ,防丢器 ,心率计等。每个profile中会包含多个service,每个service代表从机的一种能力。2、serviceservice可以理解为一个服务,在ble从机中,通过有多个服务,例...
2018-06-13 15:43:10 7088 7
原创 (一)微信小程序支付前后台
最近在做一个微信小程序的蓝牙项目。用户通过微信小程序支付后,通过蓝牙将指定的数据包写入设备,设备启动。大致的流程图就是这样子: 这里面涉及到两个部分,一个小程序的蓝牙通讯,一个是小程序的支付。我今天就记录一下小程序的支付(一)小程序的准备工作小程序的申请配置等是在微信公众号里面的,所以你需要申请公众号,去配置。具体可以参考 https://jingyan.baidu.c...
2018-06-12 10:21:07 3209 12
原创 java拷贝
1.为什么要拷贝java对象呢? 在某些情况下,我们需要保存当前对象的某种状态,那么我们需要将状态的值赋给一个新的对象。首先想到的是将变量一个一个的赋值给新对象,但是这样做如果变量多的情况下,会很麻烦。那么有没有好一点的办法呢?那就是通过拷贝的方式,来实现一次性将全部变量赋值。注意:我们常见的Object a=new Object();Object b;b=a;这种形式的代码复制的是...
2018-05-25 17:41:14 349
原创 简单理解 :强引用 软引用 弱引用 幻象引用的区别
1.强引用(StrongReference) 我们常见的普通对象的引用 例如Object object = new Object(); 特点:只要强引用指向一个对象,就表明这个对象是”活的”,jvm宁可抛出OutOfMemoryError,也不会去回收这个对象。对于普通的对象,如果没有其他的引用关系,只要超过了引用的作用域或者显示的将引用赋值为null,就可以被垃圾收集。...
2018-05-17 18:06:01 676
4.0BlueToothGattDemo
2017-12-05
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人