自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(30)
  • 资源 (2)
  • 收藏
  • 关注

原创 自定义类加载器加载加密jar包,使用Reflections扫描自定义加载器加载的Class,RSA加密解密签名AES密文,AES加密解密文件

为什么要做这个工作: 游戏私服是游戏人最讨厌的一件事,而游戏私服基本上都是内部人员把内部的自启服务器泄露出去,我们现在做的就是,内部发行的服务器版本是加密后的二进制文件,必须用给定的RSA秘钥才能解密二进制文件,然后 再使用自定义类加载器进行加载,在整个过程中都是流操作,不会生成class文件,就能防止内部发行的服务器被拷贝。这样并不能完全防止服务器泄露,如果有心人拿到秘钥,拿到加密后的class,自己写代码解密,也不能完全禁止,但是使用秘钥能在服务器删除秘钥,设置有效期,能在一定程...

2021-04-15 18:08:27 1024 1

原创 研究使用FastJson把Java对象转JsonObject的效率问题,以及改进方案。

构造了一个稍微复杂的Java对象对比在不同情况下的转换效率,都是循环20次执行。https://gitee.com/icefire11/test-fast-json概述:Main方法示例:import com.alibaba.fastjson.JSONObject;public class Test { public static void main(String[] args) { School school = new School(); lon

2020-11-27 14:55:27 3450 4

转载 讲解ProtoBuff,比较好的文章

https://www.jianshu.com/p/30ef9b3780d9

2020-08-03 19:38:16 189

原创 分布式ID生成算法 雪花算法

1、SnowFlake算法生成id的结果是一个64bit大小的整数,它的结构如下图: ● 1位,不用。二进制中最高位为1的都是负数,但是我们生成的id一般都使用整数,所以这个最高位固定是0● 41位,用来记录时间戳(毫秒)。 ○ 41位可以表示$2^{41}-1$个数字, ○ 如果只用来表示正整数(计算机中正数包含0),可以表示...

2020-03-17 15:42:54 334 1

原创 算法-leetCode 寻找最长子串

package icefire.demo.algorithm.leetcode;import java.util.HashMap;import java.util.Map;/** 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。 示例 1:输入: "abcabcbb"输出: 3解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。...

2020-03-15 13:21:46 248

转载 结论:java 中不存在真正的引用传递,引用传递也是传递的地址值

解释的很清楚,做个备份。https://blog.csdn.net/suifeng629/article/details/83576917

2020-03-15 13:12:37 152

原创 记一次 StackOverflowException。

在C# 属性定义的时候,犯的错误//原本应该这样public int A {get {return a;} set{a = value;}}//结果写成了这样 导致set方法栈溢出public int A {get {return a;} set{A = value;}}...

2019-02-28 16:01:51 1839

原创 关于Thread.join()的理解

先看代码:public static void main(String[] args) { Thread son = new Thread(() -> { Thread.sleep(5000); System.out.println("im thread son!!!"); }); son.start(); son.join(); ...

2019-02-27 17:13:00 846

转载 ConcurrentLinkedQueue源码研究

这几篇文章结合一下:java并发面试常识之ConcurrentLinkedQueue:https://www.imooc.com/article/details/id/26439Java并发编程之ConcurrentLinkedQueue详解:https://blog.csdn.net/qq_38293564/article/details/80798310关于CAS:http...

2019-02-26 13:56:01 312

转载 JAVA并发相关知识

 Java 并发精品合集1:http://cmsblogs.com/?p=2611Java 并发精品合集2:https://www.cnblogs.com/dolphin0520/category/602384.html

2019-02-21 10:06:11 149

原创 记一次C#的GC优化,栈和堆。

    公司游戏项目,为了热更并且减少服务器战斗逻辑计算压力,战斗过程在客户端执行,服务器有一份相同的代码,进行校验。这时候,战斗代码的性能就显得特别重要,客户端有大量的游戏特效等等需要内存分配。每次GC都会导致客户端表现卡顿。    使用Unity的性能分析工具Profiler分析得知有一个代码逻辑中频繁创建的对象A,占用了大量的内存,而这个对象A的生命周期又非常短。   这个时候我...

2018-12-26 10:52:50 3568 1

原创 JAVA 序列化反序列化对象

1 需要序列化的类要实现Serializable接口代码示例:Computer 类:package com.zjq.serializer;import java.io.Serializable;public class Computer implements Serializable { /** * */ private static final long se

2017-10-27 15:23:10 216

原创 java使用System.arraycopy对数组扩容

使用System.arraycopy,把原数组复制进新的数组,System.arraycopy接口文档。 /** * * @param src 需要复制的数组 * @param srcPos 从原始数组的哪个下标开始复制 * @param dest 复制的新的数组 * @param dest

2017-09-19 17:24:47 1227 1

原创 使用zmq,probuf,缓冲池实现序列化和反序列化框架(二)-ZMQ介绍

上一篇博客已经介绍了实现的缓冲池的原理和代码,本篇继续介绍我们构造序列化框架的基本单元-ZMQ。  一,ZMQ介绍:  引用官方的说法: “ZMQ (以下 ZeroMQ 简称 ZMQ)是一个简单好用的传输层,像框架一样的一个 socket library,他使得 Socket 编程更加简单、简洁和性能更高。是一个消息处理队列库,可在多个线程、内核和主机盒之间弹性伸缩。ZMQ 的明确目标

2017-09-04 15:10:07 1194

原创 算法-时间复杂度分析

本文章从归并排序的算法代码出发,通过一步步分析计算出此算法的时间复杂度。关于归并排序的分析,我上一篇博客有:归并排序分析这里只进行代码分析。先看算法的代码:private int[] merge_sort(int[] input,int start,int end){ if(start<end){ int mid=(start+end)/2; merge_sort(

2017-08-31 18:24:56 332

原创 使用zmq,probuf,缓冲池实现序列化和反序列化框架(一)-使用ConcurrentLinkedQueue实现缓冲池

ConcurrentLinkedQueue是并发包中可以保证一些情况下线程安全的队列。使用队列来实现缓冲池考虑到了缓冲池经常分配回收的特性,就像一个队列一样。简单的代码实现:package com.zjq.stream;import java.util.concurrent.ConcurrentLinkedQueue;public class BufferPoolTest { /

2017-08-31 16:20:42 529

原创 算法-归并排序

归并排序的核心思想是分治策略,把原问题分解为规模更小的子问题求解,然后再把求解后的子问题的解合并为原问题的解。废话不多说,直接看代码:package com.zjq.arithmetic.sort;public class Merge_Sort { public static void main(String[] args) { int[] input={4,3,2,1,6,7

2017-08-31 16:03:22 189

原创 算法基础-使用循环不变式解决插入排序问题

思想是直接插入排序,即每次拿一个数字向已排序好的数字中插入,采用循环不变式的设计思想。  循环不变式:一般而言,用这个式子表示希望得到的结果,如果在循环的每一步,这个式子都是正确的,那么循环结束后,这个式子也正确,并得到了期望的结果。 如何证明循环的每一步式子都是正确的? 需要证明式子满足三个性质: 初始化:循环的第一次迭代之前,它为真。 保持:如果循环的某次迭代之前它为真,那

2017-08-28 15:33:46 631

原创 使用Java8的函数式接口@FunctionalInterface实现简单异步调用

最近研究了一下异步调用,接下来几篇博客是跟异步调用相关的,首先使用@FunctionalInterface接口实现一个简单的步调用,也就是本篇博客主要内容。然后再加上ZMQ,实现一个带网络通信的异步调用。再下一步就是复杂一点的RPC调用,最终目的是实现一个使用ZMQ的分布式调用系统。  Flag已经立,目标也定好了,先从简单的说起。  情景假设:假设一个程序需求是查看用户密码,这个需要

2017-08-25 18:23:11 10170 2

原创 google通信协议probuf的使用

1工具包准备:   A: protobuf-2.5.0-windows.zip 解压得到proto.exe。  B: protobuf.jar 放入工程,构建路径。整个工程目录:2 在工程中创建proto文件夹,在文件夹下创建文件,命名为phone.proto:option java_package = "com.zjq.proto"; //类的包名opt

2017-08-22 14:20:49 1768

转载 【Apache Commons Lang】StopWatch任务执行时间监视器

package com.zjq.appacheTest;import org.apache.commons.lang3.time.StopWatch;/** * start(); //开始计时 * split(); //设置split点 * getSplitTime(); //获取从start 到 最后一次split的时间 * reset(); //重置计时 * suspend(

2017-08-21 17:24:22 3856

原创 泛型方法

Java中的泛型方法的理解,对于下面两种泛型方法的示例:public static void main(String[] args) { GenericMethod genericMethod=new GenericMethod(); genericMethod.method1(""); Test s=genericMethod.get(); } /*

2017-08-21 10:49:13 177

原创 用栈实现队列-算法

问题描述:用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。关键点:不要每次push或pop一个元素,都重置两个栈,对于栈2,当栈2中的元素为空的时候再把栈1 的复制过来。问题很简单,但是是一种打开思维的模式,一种值得学习的思维方法。import java.util.Stack;public class Solution { Stack s

2017-08-17 17:46:28 245

原创 算法-重建二叉树

问题描述:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。我自己的答案:package com.zjq.arithmetic;import java.util.ArrayList;impor

2017-08-08 11:45:38 208

原创 java通过反射获取泛型参数

测试一种便捷开发的模型,常用于数据库的D、层次。其中用到反射来获取泛型参数。首先定义一个Generictor接口,定义接口方法。/** * */package com.zjq.container;/** * @author zhangjiaqi * 写一个生成器接口 * */public interface Generator { /** * @return

2017-08-07 17:13:50 1321

原创 Java8 Lambda测试

1,使用函数式接口@FunctionalInterfacepublic interface TestLambda8 {void apply(String n);}2 测试类public class A {public static void main(String[] args) {A instanceA=new A();// Java 8之后:List features =

2017-07-11 15:28:01 332

原创 centeros6.5使用openresty实现文件上传,并按不同时期存储在不同目录

1,openresty的环境配置与安装: 如果您之前对openresty没有过了解,请查看章亦春大神的官方文档: http://openresty.org/cn/installation.html里面有openresty的安装配置,教程,(请安装最新版本)。安装配置完成后,重启nginx服务器/usr/local/openresty/nginx/sbin/nginx -s relo

2016-10-28 12:30:20 2118

原创 centerOS 6.5安装nginx并添加nginx-upload-module断点续传模块

第一步:安装nginx: 1,如果没有安装pcre和openssl需要先安装: yum -y install pcre* yum -y install openssl* 2,下载nginx-1.7.8,例如我的nginx下载在/tmp文件夹下: wget http://nginx.org/download/nginx-1.7.8.tar.gz3,解压编译安装:

2016-10-27 12:21:54 2472

原创 Java实现线性表和单链表以及链表的合并

java实现线性链表 package list;public class LineList { Object[] elem; int current; int size; public LineList() { this(100);//初始化生成一个100个元素的数组 } public LineList(int a) { elem =...

2016-04-13 16:54:42 373

关于JAVA的this和super

 1 在生成子类对象的时候会生成一个隐式的父类对象(不管父类对象是抽象还是具体),这个对象是在虚拟机中生成的相当于不可见(如果不生成父类对象,不对父类进行初始化,之类就无法调用父类属性)。 2  this指代对当前对象的引用这个没有问题,但是super,很多人说不能把super当做父类对象的引用,但是本质上,this和super都是一样的,都是对象的引用。区别在于,super引用的父...

2016-03-15 21:34:26 82

google-probuf-github-bin

google通信协议probuf的bin,从github上clone下来的。

2017-08-22

操作系统的分区分配算法

1,建立分区描述器:分区描述器可根据自己编写程序的需要来建立,描述器本身所包含的内容以描述清楚内存分区情况为准, 2.建立自由主存队列:针对两种不同的放置策略(首次适应和最佳适应)来建立相应的队列结构 3,用C语言编写实现首次适应算法和最佳适应算法的程序。 4,用C语言编写回收算法。

2015-11-07

空空如也

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

TA关注的人

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