目录

很有名 の weblog

1分钟实现netty简单聊天室

这个例子实现的聊天室可以多人在线聊天,SSL加密 SecureChatServer package run.runnable.securechat; import io.netty.bootstrap.ServerBootstrap; import io.netty.channel.EventLoopGroup; import io.netty.channel.nio.NioEventLoopGroup; import io.netty.channel.socket.nio.NioServerSocketChannel; import io.netty.handler.logging.LogLevel; import io.netty.handler.logging.LoggingHandler; import io.netty.handler.ssl.SslContext; import io.netty.handler.ssl.SslContextBuilder; import io.netty.handler.ssl.util.SelfSignedCertificate; /**....

【机翻】msgpack java快速开始 0.6.x (已过时)

来源 msgpack java 0.6.x的快速入门(已淘汰) 对于最新版本, look at https://github.com/msgpack/msgpack-java 安装 从Maven2存储库安装 从git仓库安装 如何使用 制造一个 message-packable 类 没有注释的序列化 Optional fields Dynamic typing 更多文件 API参考 本教程简要介绍了如何使用msgpack-java。我们将首先介绍msgpack-java的安装,然后说明如何将对象序列化/反序列化为msgpack对象 安装 您可以通过两种方式安装msgpack-java-使用Maven下载或构建jar。 从Maven2存储库安装 MessagePack for Java在Maven中央存储库上发布。您可以如下配置pom.xml来使用它: <dependencies> ... <dependency> <groupId>org.msgpack</groupId> <artifactId>msgpack<....

MessagePack for Java开发指南

github上MessagePack for Java机翻译:来源 MessagePack 是二进制序列化格式。如果您需要快速,紧凑的JSON替代方案,那么MessagePack是您的朋友。例如,可以将一个小整数编码为一个字节,而短字符串则只需要一个字节前缀+原始字节数组即可。MessagePack实现已经有多种语言可用(另请参见http://msgpack.org中的列表),并且可以作为通用数据格式使用. Message Pack 格式: https://github.com/msgpack/msgpack/blob/master/spec.md MessagePack v7 (或者之后的版本) 是较早版本的更快实现v06, 支持所有消息包类型, 包括extension format. JavaDoc可从javadoc.io获得. Quick Start For Maven users: <dependency> <groupId>org.msgpack</groupId> <artifactId>msgpack-core<....

【转载】Centos 安装 Python3 环境

原文 CentOS7 默认自带 Python2.7,可安装 Python3 与 Python2 共存。 [root@Python ~]# python -V Python 2.7.5 1.安装编译相关工具 1. [root@Python ~]# cat /etc/redhat-release 2. CentOS Linux release 7.6.1810 (Core) [root@Python ~]# yum -y groupinstall "Development tools" [root@Python ~]# yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel [root@Python ~]# yum install wget libffi-devel -y 2.下载安装包并解压 [root@Python ~]# wget http....

CellStyleFactory减少cellstyle的创建,提高利用率

CellStyleFactory减少cellstyle的创建,提高利用率

通过Java连接linux,并执行脚本或者命令

通过 Java 连接 Linux,并执行脚本或者命令

根据文件,进行压缩为zip,批量下载

根据文件,进行压缩为zip,批量下载

Could not transfer artifact org.xolstice.maven.plugins:protobuf-maven-plugin:jar:0.5.0 from/to central解决办法

报错 Could not transfer artifact org.xolstice.maven.plugins:protobuf-maven-plugin🏺0.5.0 from/to central (https://repo.maven.apache.org/maven2): GET request of: org/xolstice/maven/plugins/protobuf-maven-plugin/0.5.0/protobuf-maven-plugin-0.5.0.jar from central failed 是部分jar包没有下载下来,在本地仓库删除重新下载就行

对NIO 中channel的理解

Channel NIO 中 一个 连接 就是 用 一个 Channel( 通道) 来 表示。 大家知道, 从更广泛 的 层面 来说, 一个 通道 可以 表示 一个 底层 的 文件 描述 符, 例如 硬件 设备、文件、 网络 连接 等。 然而, 远远 不止 如此, 除了 可以 对应 到底 层 文件 描述 符, Java NIO 的 通道 还可以 更加 细化。 例如, 对应 不同 的 网络 传输 协议 类型, 在 Java 中 都有 不同 的 NIO Channel( 通道) 实现。 Channel( 通道) 的 主要 类型 这里 不对 纷繁 复杂 的 Java NIO 通道 类型 进行 过多 的 描述, 仅仅 聚焦 于 介绍 其中 最为 重要的 四种 Channel( 通道) 实现: FileChannel、 SocketChannel、 ServerSocketChannel、 DatagramChannel。 对于 以上 四种 通道, 说明 如下: (1) FileChannel 文件 通道, 用于 文件 的 数据 读写。 (2) SocketChannel 套 接 字 通道, 用....

【转载】NIO ByteBuffer的allocate与allocateDirect区别(HeapByteBuffer与DirectByteBuffer的区别)

其中allocateDirect分配的字节缓冲区用中文叫做直接缓冲区(DirectByteBuffer),用allocate分配的ByteBuffer叫做堆字节缓冲区(HeapByteBuffer).. 其实根据类名就可以看出,HeapByteBuffer所创建的字节缓冲区就是在jvm堆中的,即内部所维护的java字节数组。而DirectByteBuffer是直接操作操作系统本地代码创建的内存缓冲数组(c、c++的数组)。 一、测试代码测试 由于DirectByteBuffer操作的缓冲区是通过操作系统本地代码创建的,对于java来说创建和销毁DirectByteBuffer更消耗性能。而HeapByteBuffer内部是直接创建的java数组,对于java来说更快。可以根据下面的测试代码测试: public static void directAndHeapSpeedCompare(){ int length=1000000; directExecuteTime(length); heapExecuteTime(length); } private static void direc....

在家呆着,不如摘抄点啥【2】

《教父2》 第五章 不要忘了,我们真正的信仰在于我们相信奇迹会发生。

在家呆着,不如摘抄点啥【1】

王家卫台词 每个人都会坚持自己的信念,在别人看来是浪费时间,他却觉得很重要。 花什么时候开是有季节的,马贼什么时候到却没有人知道。 我以前听人说过如果刀快的话,血从伤口喷出来的时候像风声一样,很好听,想不到第一次听到的是我自己流出来的血。 虽然我很喜欢她,但是我不想让她知道,因为我明白得不到的东西永远是最好的。每次她凝望着那小孩子,我知道她心里其实在想另一个人。我很妒忌欧阳锋,我很想知道被人喜欢的的感觉是怎样的,结果我伤害了很多人。 以前也这么想,但是看着他一天天长大,我知道他早晚会离开我。现在我觉得什么都无所谓啦。以前我认为那句话很重要,因为我觉得有些话说出来就是一生一世,现在想一想,说不说也没有什么分别,有些事会变的。我一直以为是我自己赢了,直到有一天我看着镜子,才知道自己输了,在我最美好的时候,我最喜欢的人都不在我身边。如果能重新开始那该多好啊! 知乎上记载的一些回答 问:如果从一个空有上进心的人,变成行动上的巨人 答: 有没有办法把背单词这事儿赋予一个重大的意义呢?很快我想到一个。考过TOEFL/GRE,拿到高分,在新东方教书,据说年薪百万,那。。。一个单词就相当于50块....

【LeetCode刷题】1115. 交替打印FooBar

题目 我们提供一个类: class FooBar { public void foo() { for (int i = 0; i < n; i++) { print("foo"); } } public void bar() { for (int i = 0; i < n; i++) { print("bar"); } } } 两个不同的线程将会共用一个 FooBar 实例。其中一个线程将会调用 foo() 方法,另一个线程将会调用 bar() 方法。 请设计修改程序,以确保 "foobar" 被输出 n 次。 示例 1: 输入: n = 1 输出: "foobar" 解释: 这里有两个线程被异步启动。其中一个调用 foo() 方法, 另一个调用 bar() 方法,"foobar" 将被输出一次。 示例 2: 输入: n = 2 输出: "foobarfoobar" 解释: "foobar" 将被输出两次。 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/print-foobar-alternately 著作....

POI开发指南2

图像 图像是图形支持的一部分。要添加图像,只需在绘图首字母上调用createPicture()。在编写时,支持以下类型: PNG JPG DIB 应该注意的是,一旦将一幅图像添加到一张纸上,任何现有的图形都可能被擦除。 //create a new workbook Workbook wb = new XSSFWorkbook(); //or new HSSFWorkbook(); //add picture data to this workbook. InputStream is = new FileInputStream("image1.jpeg"); byte[] bytes = IOUtils.toByteArray(is); int pictureIdx = wb.addPicture(bytes, Workbook.PICTURE_TYPE_JPEG); is.close(); CreationHelper helper = wb.getCreationHelper(); //create sheet Sheet sheet = wb.createSheet(); ....

POI开发指南1

POI开发指南1,来源 创建一个新的工作簿 Workbook wb = new HSSFWorkbook(); try (OutputStream fileOut = new FileOutputStream("workbook.xls")) { wb.write(fileOut); } Workbook wb = new XSSFWorkbook(); try (OutputStream fileOut = new FileOutputStream("workbook.xlsx")) { wb.write(fileOut); } 这里应当注意的是,创建空的工作簿是无法打开的。HSSX=>.xls文件 XSSF=>.xlsx文件 创建一个新表 Workbook wb = new HSSFWorkbook(); // or new XSSFWorkbook(); Sheet sheet1 = wb.createSheet("new sheet"); Sheet sheet2 = wb.createSheet("second sheet"); // 请注意,工作表名称是Exc....

【LeetCode刷题】1117.H2O生成

【LeetCode刷题】1117.H2O生成 现在有两种线程,氢 oxygen 和氧 hydrogen,你的目标是组织这两种线程来产生水分子。 存在一个屏障(barrier)使得每个线程必须等候直到一个完整水分子能够被产生出来。 氢和氧线程会被分别给予 releaseHydrogen 和 releaseOxygen 方法来允许它们突破屏障。 这些线程应该三三成组突破屏障并能立即组合产生一个水分子。 你必须保证产生一个水分子所需线程的结合必须发生在下一个水分子产生之前。 换句话说: 如果一个氧线程到达屏障时没有氢线程到达,它必须等候直到两个氢线程到达。 如果一个氢线程到达屏障时没有其它线程到达,它必须等候直到一个氧线程和另一个氢线程到达。 书写满足这些限制条件的氢、氧线程同步代码。 示例 1: 输入: "HOH" 输出: "HHO" 解释: "HOH" 和 "OHH" 依然都是有效解。 示例 2: 输入: "OOHHHH" 输出: "HHOHHO" 解释: "HOHHHO", "OHHHHO", "HHOHOH", "HOHHOH", "OHHHOH", "HHOOHH", "HO....

【转载】新年彩蛋:Spring Boot自定义Banner

新年彩蛋:Spring Boot 自定义 Banner 借用 Spring Boot 的 Banner 向各位程序猿同仁们问候一声:Happy New Year。 接下来我们就来介绍一下这个轻松愉快的自定义 banner 功能。实现的方式非常简单,我们只需要在 Spring Boot 工程的 /src/main/resources 目录下创建一个 banner.txt 文件,然后将 ASCII 字符画复制进去,就能替换默认的 banner 了。比如上图中的输出,就采用了下面的 banner.txt 内容: ${AnsiColor.BRIGHT_GREEN} ## ## ### ######## ######## ## ## ## ## ######## ## ## ## ## ######## ### ######## ## ## ## ## ## ## ## ## ## ## ### ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## #### #### ## ## ## ## ## #### ## ## ## #....

Netty的复习【3】Buffer、NIO

Buffer ByteBuffer可以理解为放在内存中的一个数组。Buffer是一个抽象类,它的具体实现有 ByteBuffer,CharBuffer,ShortBuffer,IntBuffer,LongBuffer,FloatBuffer,DoubleBuffer。为什么没有string,用char代替了。 在这些类型中,使用最多的是ByteBuffer,可以在网络上进行传输。 该图描述的是Buffer的分配、读写和常用操作 原生JDK网络编程- Buffer capacity 作为一个内存块,Buffer有一个固定的大小值,也叫“capacity”.你只能往里写capacity个byte、long,char等类型。一旦Buffer满了,需要将其清空(通过读数据或者清除数据)才能继续写数据往里写数据。 position 当你写数据到Buffer中时,position表示当前的位置。初始的position值为0.当一个byte、long等数据写到Buffer后, position会向前移动到下一个可插入数据的Buffer单元。position最大可为capacity – 1. 当读取....

Netty的复习【2】AIO

水平触发和边缘触发 水平触发Level_triggered 当被监控的文件描述符上有可读写事件发生时,epoll_wait()会通知处理程序去读写。如果这次没有把数据一次性全部读完(如读写缓冲区太小),那么下次调用epoll_wait()时,它还会通知你在上没读写万的文件描述符上继续读写,当然如果你一直不去读写,它会一直通知你!!!如果系统中有大量你不需要读写的就绪文件描述符,而它们每次都会返回,这样会大大降低处理程序检索自己关心的就绪文件描述符的效率。 边缘触发Edge_triggered 当被监控的文件描述符上有可读写事件发生时,epoll_wait()会通知处理程序去读写。如果这次没有把数据全部读写完(如读写缓冲区太小),那么下次调用epoll_wait()时,它不会通知你,也就是它只会通知你一次,知道该文件描述符上出现第二次可读写事件才会通知你!!!这种模式比水平触发效率高,系统中不会充斥大量你不关心的就绪文件描述符!! select(),poll()模型都是水平触发模式,信号驱动IO是边缘触发模式,epoll()模型即支持水平触发,也支持边缘触发,默认是水平触发。 原生的JD....

Linux中mysql表的导出导入【转载】

导出整个数据库中的所有数据 1、在linux命令行下输入: mysqldump -uUserName -pPasword dabaseName > fileName.sql fileName.sql最好加上路径名 导出数据库中的某个表的数据 mysqldump -uUserName -pPassword dabaseName tableName > fileName.sql 导出整个数据库中的所有的表结构 在linux命令行下输入: mysqldump -uUserName -pPassword -d dabaseName > fileName.sql 注意:是加了-d 导出整个数据库中某个表的表结构 在linux命令行下输入: mysqldump -uUserName -pPassword -d dabaseName tableName > fileName.sql 注意:是加了-d 导出查询的数据 select * from tableName into outfile "/home/vobile/tn.txt" 导入mysql方法1 进入linu....