Java
文章平均质量分 84
柠檬睡客
没有患得患失的诚惶诚恐,而是随遇而安的处之泰然。
展开
-
网络编程 四 UDP通信
文章目录一 基本概念二 通信API一 基本概念 TCP是传输控制协议,属于可靠有序的协议。可靠是指双端先建立连接,然后再通信,通信双端不会丢失数据;有序指的是数据发送和接收到的数据包顺序一致,比如发送12345,收到的也一定是12345。这个过程就好比两个人通信,先拿出一张两个人都认可的纸(建立连接,握手),然后一个人写(数据发送),另一个人看(数据接收),只不过不是写一个字就看一个字,而是写一段看一段(对数据封包)。 IP是网络协议,解决数据包路由问题,跟现在发快递一样,有发件人地址和收件人地址原创 2021-04-18 14:48:24 · 1129 阅读 · 2 评论 -
网络编程 三 Socket通信下篇
文章目录一 构建Sccket对象二 获取输入/出流三 流操作典型问题3.1 流的关闭引发Socket关闭3.2 传输对象时获取流阻塞四 端口分配、连接、超时和状态五 获取网络信息5.1 端口信息5.2 地址信息六 半关闭七 其他特性设置7.1 TcpNoDelay7.2 缓冲区7.3 关闭延迟7.4 读超时7.5 紧急数据7.6 探活7.7 传输质量一 构建Sccket对象 服务端的Socket对象可通过ServerSocket对象获取,这里不再赘述。客户端的Socket对象可直接通过Socket类的原创 2021-04-07 18:54:42 · 246 阅读 · 0 评论 -
网络编程 二 Socket通信上篇
文章目录一 Socket二 连接类型三 ServerSocket常用API3.1 构建服务端ServerSocket对象3.1.1 绑定服务端口3.1.2 等待连接超时设置3.1.3 限制可接受连接数量3.1.4 绑定IP地址3.1.5 后置绑定3.2 访问绑定信息3.3 超时Socket地址复用3.4 接收缓冲区大小3.5 其他API附录RFC一 Socket所谓套接字(Socket),就是对网络中不同主机上的应用进程之间进行双向通信的端点的抽象。一个套接字就是网络上进程通信的一端,提供了应用层进程原创 2020-08-27 11:18:45 · 422 阅读 · 0 评论 -
网络编程 一 设备信息
文章目录一 网络设备接口信息二 网络设备子接口信息三 地址信息3.1 硬件地址3.2 IP地址四 网络接口地址五 其他设备信息附录一 回环网卡二 MTU一 网络设备接口信息 Java中提供了NetworkInterface供应用访问设备IP地址信息,这是一个被final修饰的类,足见其重要程度:/** * This class represents a Network Interface made up of a name, * and a list of IP addresses assi原创 2020-08-25 19:55:57 · 350 阅读 · 0 评论 -
NIO 五 文件通道
文章目录一 通道和流的区别二 已实现的主要通道三 FileChannel四 API介绍4.1 获取FileChannel对象4.2 数据写入4.2.1 write(ByteBuffer src)4.2.2 write(ByteBuffer\[] srcs)4.2.3 write(ByteBuffer\[] srcs, int offset, int length)4.2.4 write(ByteBuffer src, long position)4.3 数据读取4.3.1 read(ByteBuffer d原创 2020-06-26 15:42:22 · 299 阅读 · 0 评论 -
NIO 四 通道接口
文章目录一 通道二 通道接口三 接口说明3.1 AutoCloseable3.2 Closeable3.3 Channel2.4 InterruptibleChannel2.5 ReadableByteChannel2.6 ScatteringByteChannel2.7 WritableByteChannel2.8 GatheringByteChannel2.9 ByteChannel2.10 SeekableByteChannel2.11 AsynchronousChannel2.12 Asynchro原创 2020-06-06 22:04:34 · 420 阅读 · 0 评论 -
NIO 三 缓冲区数据读写
文章目录一 自增读写1.1 单数据自增读写1.2 批量数据自增读写1.2.1 定长读写1.2.2 完全读写1.3 剩余数据写入二 目标读写三 值类型数据读写四 结语一 自增读写 先打预防针,缓冲区的读写复用是通过数据写入覆盖实现的,所谓数据清理都是通过移动核心参数值实现的,实际上数据写入后会永久存在,这意味着在读写缓冲区数据时,必须要时刻了解position、limit、mark和capacity。 读写数据时对position参数的依赖非常强,很多时候都可以将position作为下一次读写数据对原创 2020-06-01 15:37:43 · 502 阅读 · 0 评论 -
NIO 二 创建缓冲区
文章目录一 前言二 通过显式的数组对象创建三 通过隐式的数组对象创建四 创建直接缓冲区五 复制缓冲区5.1 浅拷贝缓冲区5.2 只读拷贝5.3 缓存切分六 缓存数据格式转换四 结语一 前言 前一篇博客中介绍了缓冲区Buffer,其中大量的篇幅在描述缓冲区的4个核心参数的设置/访问API,这是所有Buffer类设计的基础,这一篇则在此基础上介绍如何创建不同类型的缓冲区。 创建缓冲区大致分为两种模式,第一种基于JVM数组对象创建的缓冲区,内存分配在JVM中;第二种是直接缓冲区,数据操作直接和核心交互。原创 2020-05-22 15:11:21 · 306 阅读 · 0 评论 -
NIO 一 缓冲区
文章目录一 缓冲区1.1 什么是缓冲区1.2 直接缓冲区1.3 NIO缓冲区实现二 核心参数2.1 参数介绍2.2 参数限定条件2.3 参数终值2.4 参数操作API2.4.1 获取缓冲区尺寸2.4.2 获取缓冲区可读写尺寸限制2.4.3 设置缓冲区可读写尺寸限制2.4.4 获取缓冲区可读写数据索引2.4.5 设置缓冲区可读写位置索引2.4.6 获取可用缓冲区大小2.4.7 标记重置位置2.4.8 重置核心参数2.4.9 写读模式转换2.4.10 数据重读三 缓冲区API3.1 缓冲区是否只读3.2 是否原创 2020-05-21 15:39:53 · 340 阅读 · 0 评论 -
通信问题引出进制转换Bug
文章目录一 数组长度为负二 排查过程三 数据存储四 码制转换五 进制转换六 结语一 数组长度为负 历时两年半,项目终于成功上线(????,现阶段还没有对外发布项目上线的新闻公告,大家再等两天)。所以很久一段时间我都没有再写学习笔记了,今天在家办公,恰巧昨天夜里在给应用组做技术支持的时候发现了一个较为严重的bug,所以今天我把它记录下来。 问题发生在一笔外发交易,当核心服务在接收外围系统的应答报...原创 2020-05-07 15:40:31 · 203 阅读 · 0 评论 -
AOP层层递进 第二部分 切面
文章目录一 AOP由来二 如何实现AOP三 Spring AOP3.1 编程式3.2 配置式3.2.1 抛出增强3.2.2 引入增强3.2.3 切面切点四 Spring+AspectJ五 小结一 AOP由来 AOP全称Aspect-Oriented Programming,和OOP相对应,前者是面向切面编程,后者面向对象编程,若要更加直白的描述两者的区别,个人认为面向对象在纵向通过派生来实现...原创 2019-12-28 11:21:57 · 161 阅读 · 0 评论 -
AOP层层递进 第一部分 代理
文章目录一 理解代理二 增强函数三 代理模式四 JDK动态代理五 CGLIB动态代理一 理解代理 代理是一种设计模式,指对目标对象方法的间接调用,可以实现不修改原方法逻辑的前提下扩展功能,这遵循了开闭原则。但我始终觉得代理这个词描述的不准确,原因在于代理的本质因该指代为执行,但实际上对象方法的执行并非跳过,代理之后的表现仅仅为原对象方法执行的前后多了补充逻辑,这难道不是函数增强吗? 代理...原创 2019-12-25 22:20:38 · 165 阅读 · 0 评论 -
DJB算法
文章目录一 缓存原理二 随机性三 Time33四 近似碰撞五 位移计算5.1 取整形最大值5.2 乘除2的N次方5.3 乘33的位移元算六 其他Hash算法七 结语一 缓存原理 诸如我们经常使用的Redis,其读写速度非常快的原因在于它的存储结构是一个Hash表,这是一个非常基础的数据结构,缓存便以K-V的形式存储在Hash表中。Hash表的读写时间复杂度为O(1),其工作流程如下:计算...原创 2019-11-12 16:38:48 · 7143 阅读 · 0 评论 -
ORM框架设计及实现
文章目录一 对象记录映射二 效率和性能三 数据访问描述信息四 字段类型转换五 数据访问基类六 统一异常处理七 数据访问框架八 数据源创建工厂九 SQL指令解析十 补充DAO接口实现十一 测试十二 其他问题一 对象记录映射 本质上来说,ORM框架需要处理的就是如何将JAVA对象与数据表记录进行关联,便于JAVA对象的持久化,以及将表记录自动转换为JAVA对象。 这就需要存在一个中间态的描述...原创 2019-11-03 13:34:25 · 2015 阅读 · 0 评论 -
桥接模式于外发设计的应用思路
文章目录一 设计模式二 设计原则2.1 单一职责2.2 里氏替换2.3 依赖倒置2.4 接口隔离2.5 知道最少2.6 开闭三 外发需求四 桥接模式五 维度抽象六 应用装配七 加深优化一 设计模式 今天在同事工位上看到了一本《大话设计模式》,倍感亲切。本科曾经开过这门课程,很清楚记得当时老师推荐的就是这本书。遗憾的是当时并没有特别深入的学习了解,直到后来参加了工作,才越发的重视设计模式。 ...原创 2019-09-27 21:54:04 · 378 阅读 · 0 评论 -
Java锁手册
文章目录零 致歉一 前言二 锁分类三 锁介绍2.1 悲观锁2.2 乐观锁2.3 阻塞锁2.4 自旋锁2.4.1 TicketLock2.4.2 CLHLock2.4.3 MCSLock2.5 无锁2.6 偏向锁2.7 轻量级锁2.8 重量级锁2.9 公平锁2.10 非公平锁2.11 可重入锁2.12 不可重入锁2.13 独占锁2.14 共享锁四 锁对比五 附录5.1 CAS算法及实现5.2 线程状...原创 2019-10-01 20:06:24 · 249 阅读 · 1 评论 -
Java锁应用及源码原理分析
文章目录一 前言二 CAS源码分析及应用三 重入锁ReentrantLock四 共享锁ReentrantReadWriteLock一 前言 上一篇《Java锁手册》中以特性为角度对Java中的各类锁进行了初步的介绍,并且以平衡性能损耗和解决并发安全问题为核心思想,把锁的演进过程简单的梳理了一遍。所以对本文中出现的一些概念性问题如果不甚了解,可以回头再去看看上文。 作为一名开发者,光说不练...原创 2019-10-03 12:38:36 · 240 阅读 · 0 评论 -
积少成多系列传送门
文章目录一 前言二 传送门2.1 算法2.2 数据机构2.3 设计模式2.4 JVM2.5 生产问题2.6 编程技巧2.7 分布式设计2.8 缓存一 前言 已经休息到第五天了,书也看了,游戏也玩了,准备调整一下生活状态为节后工作做个铺垫,然后突然冒出一个想法,是时候整理一下零散的知识点了。 近两年慢慢的发现,个人能力的高低和收入的多少并没有什么线性关系,究其本质在于市场的需求量有多大。如...原创 2019-10-05 13:13:48 · 393 阅读 · 2 评论 -
LRU算法及应用
文章目录一 什么是LRU算法二 手工实现LRU2.1 简单链表实现2.2 解决命中率和缓存污染问题2.3 解决执行效率问题三 Redis如何利用LRU3.1 缓存淘汰策略3.2 LRU实现3.2.1 近似算法3.2.2 近似算法优化3.2.3 LFU算法四 结语一 什么是LRU算法 LRU的全名为Least Recently Used,意指最近少用,这是一种非常经典的算法,应用范围非常的广,...原创 2019-10-05 18:51:05 · 2374 阅读 · 0 评论 -
JVM参数设置——配置入口篇
文章目录一 前言二 配置JVM参数的入口2.1 JavaApplication的参数配置入口2.2 IDE工具的参数配置入口2.2 WEB容器的参数配置入口2.3 服务端进程的配置入口三 查看JVM配置信息四 结语一 前言 从今年六月份开始,一直到节前,都在给数据中心进行我公司平台部分的技能培训,其中也穿插了一些Java服务开发、运维相关的知识点介绍。 令人惊讶的是,这样一个非常专业的运...原创 2019-10-07 15:41:22 · 4468 阅读 · 0 评论 -
单点部署周期调度服务框架设计
文章目录一 需求背景二 如何处理工作任务二 线程池选择三 并不采用周期调度模式四 数据模型设计五 封装工作任务六 调度框架设计七 结语一 需求背景 当前参与的大型分布式项目中,需要一个点单部署的服务环境,以定时调度的方式来使一些处理任务能够于后台执行一些特殊功能,包括数据加工、外发通讯以及信息推送等。 按常规的设计思路应该以常驻任务的方式来实现,比如在应用程序内部死循环、阻塞等。但是考虑...原创 2019-05-14 21:53:58 · 309 阅读 · 0 评论 -
Log4j2代码方式配置实现线程级动态控制
文章目录一 需求二 对外暴露的接口三 代码方式配置Log4j2日志对象四 线程级日志对象的设计五 标准日志头六 异常日志的堆栈信息打印七 测试一 需求 最近平台进行升级,要求日志工具从Log4j升级到Log4j2,以求性能上的提升。之前我写过以代码方式的配置Log4j,来实现线程级日志对象的管理,今天把版本升级到Log4j2,依然采用原有思路来做,但是实现上有诸多区别,这是因为Log4j2的...原创 2019-10-17 21:37:00 · 1990 阅读 · 5 评论 -
完整JavaWeb项目笔记 第四部分-Gson再封装
文章目录一 Gson工具设计的必要性二 Gson序列化及反序列化时指定样式三 封装GsonUtil类一 Gson工具设计的必要性 Gson是什么,做什么用的这里不多赘述,但凡做过Java的朋友都不陌生,如果你真的没用过,请网络搜索下。 这里要说明的是一些略微复杂的用法,我们决定统一应答为JSON格式,那么就需要对IResponse对象进行JSON序列化,因为IResponse对象内部有一...原创 2018-12-26 14:24:39 · 390 阅读 · 0 评论 -
代码方式配置Log4j并实现线程级日志管理 第一部分
文章目录一 为什么写略显过时的东西二 需求三 面对复杂需求如何进行设计四 我是如何分析Log4j的一 为什么写略显过时的东西 讲道理,现在还说Log4j有点过时了,因为自从Log4j2问世,全世界都在谈Log4j2的配置,所以今天要说的核心并不在如何配置Log4j,不论是配置文件方式,还是代码方式。 我要说的重点,首先是通过以代码的方式来配置Log4j,为后面同样以代码方式配置Log4j...原创 2018-12-03 19:51:07 · 663 阅读 · 0 评论 -
代码方式配置Log4j并实现线程级日志管理 第二部分
文章目录一 设计类结构二 成员设计三 方法设计四 实现Logger对象实例化方法一 设计类结构 第一部分说了两件事儿:如何根据配置文件分析有用的信息以便对底层结构进行挖掘如何查看源码的类结构以便调研需求完成后续开发设计 在了解我们的终极目标之后,不忙写代码,之前的工作仅仅是调研,为的是确认需求能否实现,以及实现过程中可能触及的技术风险。接下来我们需要根据需求及之前所做的调研,对我...原创 2018-12-05 22:51:19 · 221 阅读 · 0 评论 -
我是如何走上Java开发这条路的
文章目录一 写在前头二 什么是Java三 什么是面向对象四 什么是抽象五 什么是封装六 什么是继承七 什么是多态七 Java能做什么八 Java延申的方向九 Java学习路线十 附一张Java技能扩展图一 写在前头 越来越多的人问我:Java该怎么学?过来人回过头来自然有很多话说,这里先说说我自己。 2014年毕业,目前就职北京领驭框架软件,做过业务设计,做过混合开发,做过WEB开发,也...原创 2018-12-02 23:01:29 · 942 阅读 · 0 评论 -
代码方式配置Log4j并实现线程级日志管理 第三部分
文章目录一 对第二部分的一些补充二 如何实现线程级日志对象管理三 实现ThreadLogger四 重构LogUtil一 对第二部分的一些补充 第二部分用很简单的样例来描述了Logger对象的初始化,其实逻辑是不严谨的,而且运行时会有一些异常,这里我简单修正下,还是以RollingFileAppender为例,能够让其进行日志输出,如果有更加丰富的需求,那么请参考官方文档,或者自行百度下,我的...原创 2018-12-15 13:32:57 · 1735 阅读 · 0 评论 -
代码方式配置Log4j并实现线程级日志管理 第五部分
文章目录一 第三方程序不应仅限于会用二 同时按日期和文件大小备份三 调整ThreadLogger使用复写的Appender四 简单测试下五 结语一 第三方程序不应仅限于会用 关于日志文件备份的问题,我跟很多人都沟通过,但是结果很遗憾,绝大部分人对于Log4j的理解仅限于常规的使用,网路上能搜索到的资源绝大部分也只是关于配置的介绍。 其实这样的现象并不少见,略微延展起来就变成了老生常谈的一...原创 2018-12-22 12:55:29 · 226 阅读 · 0 评论 -
代码方式配置Log4j并实现线程级日志管理 第四部分
文章目录一 异步输出模式二 增加异步输出模式开关三 重构日志输出接口四 异步处理线程五 总结及一些其他的建议一 异步输出模式 目前尚剩余两个需求,一个是实现日志的异步输出模式,一个是实现日志同时按日期和文件大小进行备份。 异步输出模式在第三部分说过了,在这部分单独讲,日志的备份则放在第五部分结束。 这部分我只提供一个设计思路,重心还是放在代码执行性能上,总体的思路为:维护一个日志...原创 2018-12-17 21:35:56 · 378 阅读 · 0 评论 -
Java虚拟机内存结构介绍
文章目录一 前言二 JVM内存结构三 程序计数器四 虚拟机栈五 本地方法栈六 GC堆七 方法区八 运行时常量池九 直接内存十 总结一 前言 最近项目开始了各种频繁的测试,各组工作也日渐紧张,联机交易及日终批量在高压力测试下,出现了越来越多的内存溢出问题。 其实这里说内存溢出并不严谨,因为我们没有办法很直观的判断出究竟是溢出还是泄漏。今天又有同事问我:为什么会出现OOM?这个问题说起来简单...原创 2019-01-05 14:09:03 · 716 阅读 · 0 评论 -
完整JavaWeb项目笔记 第八部分-后端开发部分总结
文章目录一 具体Servlet实现二 测试一下三 服务端开发总结一 具体Servlet实现 到第七部分为止,整个服务端的设计基本上就结束了,还剩下具体的和业务相关的Servlet编写,涉及数据库访问层的设计请参考第二部分,这里对Module模块再简单介绍下。 因为所有的基础设施已经准备完毕,剩余的开发就变得异常的简单,按之前的约定(约定大于配置,这是很重要、很实用的开发经验)我们编写一个...原创 2018-12-30 15:05:00 · 484 阅读 · 0 评论 -
完整JavaWeb项目笔记 第七部分-JNDI数据源配置及DBUtil封装
文章目录一 何为JNDI二 为单独的项目JNDI配置三 DBUtil封装四 DBUtil缺陷一 何为JNDI 按百度百科的说法,是SUN公司提供的一种标准的Java命名系统接口。呃……再细点说我也不知道该说点啥了。因为我也只是在配置数据源的时候才会用上,或许都不一定会用上。 那说说为什么会用到JNDI来配置数据源,如果不用JNDI我们在做Java开发的时候,自然而然的会选择JDBC,然而...原创 2018-12-30 13:55:21 · 317 阅读 · 0 评论 -
完整JavaWeb项目笔记 第三部分-核心Servlet公用部分设计
文章目录一 核心Servlet设计思路二 设计公用应答模型三 设计公用服务异常一 核心Servlet设计思路 前面很简略的设计了数据表和Bean结构,以及Dao层的数据访问,没有设计任何复杂设计,这部分开始,逐步向核心的服务端设计延展。 传统的JavaWeb项目中,每一个Servlet都被作为请求的处理程序,这里我对请求处理的公共部分抽离出来,单独封装在一个核心Servlet中,所有的请...原创 2018-12-24 21:12:41 · 226 阅读 · 0 评论 -
完整JavaWeb项目笔记 第六部分-核心Servlet主处理实现
文章目录一 主处理逻辑做什么二 补充处理耗时三 拼装IResponse并响应氢气四 解决跨域问题一 主处理逻辑做什么 其实在第五部分已经把IServlet的整体设计做的差不多了,但是process()并没有实现,process()就是我所谓的主处理方法。 这个方法要做几件事情:请求处理耗时统计分发请求到具体处理方法拼装IResponse应答结构解决跨域处理 所以先定义方法...原创 2018-12-29 16:44:34 · 208 阅读 · 0 评论 -
完整JavaWeb项目笔记 第五部分-通过方法句柄实现动态方法调用
文章目录一 方法句柄二 如何使用方法句柄三 核心Servlet的大致框架构建一 方法句柄 方法句柄是Java7的JSR 292版本中新增的功能,我简单介绍下。方法句柄和反射是较为类似的,但是两者的使用场景有所却别,相对而言反射速度慢,安全性差,但是使用更简单,而方法句柄执行速度快,但使用上也较为麻烦。 当我设想通过的一个通用的Servlet来将所有请求进行分发的时候,我首先想到了这个机制...原创 2018-12-29 16:09:16 · 279 阅读 · 0 评论 -
完整JavaWeb项目笔记 第二部分-项目结构及Bean和Dao设计
文章目录一 服务端项目结构二 表结构设计三 bean设计三 Dao设计一 服务端项目结构 Java开发工具我用的是Eclipse,配置完Maven后,创建的war工程,接下来就是项目目录结构的划分,这一点的重要性说来可大可小,结构清晰,则开发更加顺利,结构不合理则变动会比较频繁,对于体量较小的项目而言虽然影响不大,但是出于习惯的考虑,还是对结构进行下划分:bean包中为数据表对应的Ja...原创 2018-12-23 15:58:14 · 1638 阅读 · 0 评论 -
完整JavaWeb项目笔记 第一部分-总体介绍
文章目录一 设计初衷二 项目总体介绍三 重点内容四 设计步骤一 设计初衷 不知不觉已经毕业了快五个年头,五年时光,五年蹉跎。有同学朋友在职场上一路狂飙,也有人黯然神伤夜半落泪。我则不痛不痒,进退无门。这倒是有点印证了当初在签名里留下的话——没有患得患失的诚惶诚恐,而是随遇而安的处之泰然。 虽然自己不是技术狂人,也没有八面玲珑的本事,但我依然相信付出会有回报,我从不寄希望于运气,所以我自己...原创 2018-12-23 15:45:47 · 700 阅读 · 0 评论