- 博客(51)
- 资源 (3)
- 收藏
- 关注
原创 基于Zookeeper的分布式锁(顺序分布式锁)
原理很简单,就是根据创建的顺序节点的ID来对访问进行排序,形成一个等待链表,后面的节点等待前面的节点完成(即监听到delete事件)直接贴代码:package com.xycode.zkUtils.my.lock2;import com.xycode.Config;import com.xycode.zkUtils.listener.AbstractEventListener;i...
2020-02-23 20:45:14
476
原创 synchronized关键字的底层原理(锁升级,对象头)
synchronized根据竞争的激烈程度不同,实际上会经历如下几个过程:无锁 -->偏向锁(偏向锁实际上需要先获得轻量级锁,然后在锁重入时才会执行偏向锁优化) -->轻量级锁(CAS设置markword+自旋) -->重量级锁(OS层面,在升级为重量级锁时,若在多核cpu上,会出尝试多次自旋,若还是获取不到锁,才就会膨胀为重量级锁)其中无锁,偏向锁,轻量级锁都是J...
2020-02-23 20:40:27
531
原创 使用AQS实现一个简单的可重入锁
package com.xycode.aqsLock;import org.testng.Assert;import org.testng.annotations.Test;import java.util.concurrent.*;import java.util.concurrent.locks.AbstractQueuedSynchronizer;import java.ut...
2019-11-08 20:21:07
326
原创 log4j2指定不同包的输出级别
首先引入这几个包 <!-- 通用日志接口 --> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <vers...
2019-10-29 16:16:17
4897
2
原创 CountDownLatch与CyclicBarrier的区别(代码说话,一目了然)
CountDownLatch相信很多人都比较了解,也都使用过,但CyclicBarrier可能就不太了解了,至于它们之间的区别我就曾迷惑会一段时间.相比CountDownLatch,CyclicBarrier的本质区别是调用await()的主体不一样,CountDownLatch.await()通常是在主线程(或者叫调用线程)调用的,而CyclicBarrier.await()是在任务线程调用...
2019-10-25 22:01:43
628
1
原创 Java零拷贝探究
首先介绍普通拷贝,其流程图如下:当一个用户线程发起要读取磁盘上的某个文件的请求,其大致流程如上图所示: 用户线程发送系统调用read(),由于read()是系统调用,当前线程切换到内核空间。 然后,请求文件数据,文件数据从硬件磁盘缓存到内核空间的缓冲区(Kernel Buffer),通过DMA机制(Direct Memory Access)。 接着,将内核空间缓存的数据...
2019-10-25 16:12:05
195
原创 Synchronized用法彻底详解
synchronized关键字,synchronized具有“线程的互斥处理”和“同步处理”两种功能。如果程序中有synchronized关键字,线程就会进行lock/unlock操作。线程会在synchronized开始时获取锁,在synchronized终止时释放锁(注意:当线程在wait方法内部等待的时候会释放锁。此外,当线程从wait方法中出来的时候还必须先重新获取锁后才能继续运行)。...
2019-10-24 22:12:52
455
2
原创 Netty UDP协议通信
UDP其实不分Server与Client端,不过这里还是区分一下,尽管代码几乎是完全一样的....(更多有关Netty的样例代码,见本人的Netty学习:https://github.com/xycodec/NettyLecture)Server端:package com.xycode.netty.udp;import io.netty.bootstrap.Bootstrap;...
2019-10-24 22:04:21
383
原创 创建Zookeeper Server(集群模式)
import java.io.IOException;import java.util.concurrent.CountDownLatch;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import java.util.concurrent.TimeUnit;imp...
2019-08-21 22:13:59
182
原创 创建Zookeeper Server(单例模式)并测试
import java.io.File;import java.io.IOException;import java.net.InetSocketAddress;import org.apache.zookeeper.CreateMode;import org.apache.zookeeper.KeeperException;import org.apache.zookeeper....
2019-08-21 21:52:54
1032
2
原创 java之访问权限,public,protected,private
一直以来对java的访问权限的概念感觉很模糊,最近重读thinking in java,做个小总结。private,public之间的区别还是比较明显的,这里不多说,主要就是protected比较模糊新建了这几个类,分别处于两个package中对于protected,在跨包访问的情况下,与private,public的区别才比较明显package com.xycode.pac...
2019-08-18 15:42:14
212
2
原创 PCA(主成分分析)的数学原理(之前一门课程写的报告,现在发上来...)
1.背景介绍 一般情况下,在数据挖掘和机器学习等数据分析领域中,数据都被表示为向量。众所周知,很多机器学习算法的复杂度和数据的维数有着密切关系,甚至与数据维数呈指数级别关联。然而实际机器学习中处理的数据可达成千上万甚至几十万维,在这种情况下,算法的资源消耗是不可接受的,因此我们必须对数据进行降维。PCA(Principal Component Analysis),即所谓的主成分分析,...
2019-05-04 17:25:20
2229
2
原创 非对称加密算法--Diffie-Hellman算法
之前写的一个文章,现在发上来....摘 要:非对称加密算法又称公开密钥加密算法,非对称加密是相对于对称加密而言的,对称加密指的是通信双方使用的密钥是一致的,而非对称加密就是算法使用的密钥不一致。非对称加密的好处是当通信双方没有事先协商密钥的情况下也能进行安全通信,而在互联网普及的今天,很多通信双方往往在事先是无法协商好密钥的,从而非对称加密算法得到了广泛应用,本文主要阐述Diffie-H...
2019-03-10 21:29:00
6090
3
原创 一个基于一个基于aliyun-oss-python-sdk的代码同步工具
一个基于aliyun-oss-python-sdk的代码同步工具,可以指定同步文件的类型。(水平很烂,请轻喷(:3 」∠)) 要使用的话需要租一个阿里云oss2云存储服务,很便宜,9rmb/year 因为流量是走的开发者接口,所以流量免费,用来同步一些小文件很划算 我是用来同步代码文件的,当然其他类型的文件也可以。 交互方式采用命令行。 注意: 使用前须将 endpoint accessKey...
2019-02-24 18:22:42
696
2
原创 leetcode 37. Sudoku Solver
最近在刷leetcode,遇到这道数独的题目,发现自己原来写过数独的题目,不过回头看看自己当初写的代码,写得简直了......之前的写的博客:https://blog.youkuaiyun.com/lovemylife1234/article/details/72026690就趁这个机会重写了一遍,依旧是dfs搜索,使用了map来进行快速判断37. Sudoku SolverHard604...
2018-11-30 21:15:20
258
原创 YEN--K最短路算法(K-Shortest-Path) Java实现
前段时间要做一个Project,在建模过程中发现要求出一个网络拓扑中的前K条最短路才能进行后续的运算,自己研究了一段时间,实现了java版本的YEN--ksp算法。Yen's算法是Yen 在1971 年提出的以其名字命名 的Yen 算法。Yen's算法基于偏离路径算法思想,算法原理详见https://en.wikipedia.org/wiki/Yen%27s_algorithm我自己实现的...
2018-11-30 19:07:47
4284
4
原创 java cplex编程--线性规划之网络负载均衡
这学期老师布置了线性规划的Project,要求使用cplex解决一个网络负载均衡的问题,我采用了java语言来编写程序,一开始没接触过clex,踩了好多坑,总算是做出来了。问题:给定一个网络拓扑G(V,E),节点个数为N,业务需求个数N*(N-1),并且给定各条链路的容量,优化目标是网络负载均衡并且网络的最大链路利用率最小。求解: 所建立的模型如下:edge.java:对网络...
2018-11-30 00:53:19
2969
1
原创 编程作业--魔兽世界三(开战)
魔兽世界三(开战)描述魔兽世界的西面是红魔军的司令部,东面是蓝魔军的司令部。两个司令部之间是依次排列的若干城市,城市从西向东依次编号为1,2,3 .... N ( N <= 20)。红魔军的司令部算作编号为0的城市,蓝魔军的司令部算作编号为N+1的城市。司令部有生命元,用于制造武士。两军的司令部都会制造武士。武士一共有dragon、ninja、iceman、lion、wolf五种。每种武...
2018-07-06 23:04:06
3332
2
原创 编程作业--魔兽世界之二:装备
魔兽世界之二:装备查看 提交 统计 提问总时间限制:1000ms内存限制:65536kB描述魔兽世界的西面是红魔军的司令部,东面是蓝魔军的司令部。两个司令部之间是依次排列的若干城市。红司令部,City 1,City 2,……,City n,蓝司令部两军的司令部都会制造武士。武士一共有 dragon 、ninja、iceman、lion、wolf...
2018-07-06 22:58:57
506
原创 编程作业--魔兽世界之一:备战
这个版本写得很菜,很多地方还可以优化(以后的版本再重写好了2333333)魔兽世界之一:备战总时间限制:1000ms内存限制:65536kB描述魔兽世界的西面是红魔军的司令部,东面是蓝魔军的司令部。两个司令部之间是依次排列的若干城市。红司令部,City 1,City 2,……,City n,蓝司令部两军的司令部都会制造武士。武士一共有 dragon...
2018-07-06 22:55:35
425
原创 openjudge 2982--Sudoku(九宫格数独) DFS算法加剪枝
题目链接:http://poj.pku.edu.cn/practice/2982/#include #include using namespace std;int t[10][10];bool flag;bool ok=false;void dfs(int m,int n){ if(ok) return; if(m==9&&n==10){ for(int i=1;i
2017-05-14 16:38:52
987
2
原创 DFT,IDFT,FFT,IFFT算法的C++实现
DFT,FFT的算法原理见:https://zh.wikipedia.org/wiki/%E5%BF%AB%E9%80%9F%E5%82%85%E9%87%8C%E5%8F%B6%E5%8F%98%E6%8D%A2#include <iostream>#include <complex>#include <cmath>#include <...
2017-05-14 16:29:08
10031
10
原创 求排列的逆序数
求排列的逆序数总时间限制: 1000ms 内存限制: 65536kB描述在Internet上的搜索引擎经常需要对信息进行比较,比如可以通过某个人对一些事物的排名来估计他(或她)对各种不同信息的兴趣,从而实现个性化的服务。对于不同的排名结果可以用逆序来评价它们之间的差异。考虑1,2,…,n的排列i1,i2,…,in,如果其中存在j,k,满足 j j
2017-04-04 20:24:26
1192
原创 openjudge :2的幂次方表示
2的幂次方表示总时间限制: 1000ms 内存限制: 65536kB描述任何一个正整数都可以用2的幂次方表示。例如: 137=27+23+20同时约定方次用括号来表示,即ab可表示为a(b)。由此可知,137可表示为: 2(7)+2(3)+2(0)进一步:7=22+2+20(21用2表示)
2017-04-04 20:18:20
759
原创 openjudge 2748:全排列
2748:全排列 总时间限制: 1000ms 内存限制: 65536kB描述给定一个由不同的小写字母组成的字符串,输出这个字符串的所有全排列。 我们假设对于小写字母有'a' < 'b' < ... < 'y' < 'z',而且给定的字符串中的字母已经按照从小到大的顺序排列。输入输入只有一行,是一个由不同的小写字母组成的字符串,已知字...
2017-04-04 20:11:47
619
3
原创 openjudge 2814:拨钟问题
2814:拨钟问题总时间限制: 1000ms 内存限制: 65536kB描述有9个时钟,排成一个3*3的矩阵。|-------| |-------| |-------|| | | | | | ||---O | |---O | | O || |
2017-04-04 20:01:51
769
原创 C/C++计算一重定积分和二重定积分(纯暴力算法实现)
最近在复习考研数学,复习到积分这一块的时候手痒了,就手撸了计算定积分的算法程序//============================================================================// Name : Integration.cpp// Author : xycode// Version :// Cop
2017-03-12 20:38:21
9086
3
原创 链表的基本操作函数算法(C/C++实现)
链表的基本操作函数,一般的数据结构的书籍中涉及到的链表的基本操作算法都实现了#include #include #include using namespace std;typedef struct NODE{ struct NODE *link; int value;}Node;#define TRUE 1#define FALSE 0bool search
2017-02-09 23:32:04
1660
原创 C/C++ 用宏定义实现简单泛型的功能
#include #include #include #include using namespace std;//宏定义实现泛型//在宏定义中出现#和##,通常起到下面的作用:// #表示:对应变量字符串化// ##表示:把宏参数名与宏定义代码序列中的标识符连接在一起,形成一个新的标识符#define GNERIC_STACK(STACK_TYPE,SUFFIX,STACK_S
2017-02-07 23:38:20
2750
1
原创 POJ 2106 Boolean Expressions(递归算法)
1:Boolean Expressions总时间限制: 1000ms 内存限制: 65536kB描述The objective of the program you are going to produce is to evaluate boolean expressions as the one shown next: Expression: ( V |
2017-02-07 23:29:25
4703
原创 算法训练 OpenJudge 8469
8469:特殊密码锁总时间限制: 1000ms 内存限制: 1024kB描述有一种特殊的二进制密码锁,由n个相连的按钮组成(n然而让人头疼的是,当你按一个按钮时,跟它相邻的两个按钮状态也会反转。当然,如果你按的是最左或者最右边的按钮,该按钮只会影响到跟它相邻的一个按钮。当前密码锁状态已知,需要解决的问题是,你至少需要按多少次按钮,才能将密
2017-01-29 23:38:59
315
原创 C/C++编程小练习 大数减法之浮点大数减法算法
#include #include using namespace std;void reverse_str(char *a,int size){ for(int i=0;i
2016-12-27 19:47:29
859
2
原创 C/C++编程小练习 大数加法之浮点大数加法算法
#include #include using namespace std;void reverse_str(char *a,int size){ for(int i=0;i
2016-12-27 19:42:00
2678
2
原创 C/C++编程小练习 大数乘法之浮点大数乘法算法
#include #include #include using namespace std;void reverse_str(char *a,int size){ for(int i=0;i<size/2;++i){ char t=a[i]; a[i]=a[size-i-1]; a[size-i-1]=t; }}int f_to_i(char *a,char *c)
2016-12-27 19:33:56
1689
原创 C/C++编程小练习 大数阶乘
我的这个大数阶乘是完全基于模拟手动运算的,速度略慢,其中的核心函数是之前我写的一个大数乘法算法#include #include using namespace std;void reverse_str(char *a,int size){ for(int i=0;i<size/2;++i){ char t=a[i]; a[i]=a[size-i-1]; a[size-i-1]
2016-12-12 19:52:20
492
原创 C/C++编程小练习 大数乘方(快速幂算法实现)
将我之前的大数乘方的算法做了些小优化,代码改动很小快速幂算法实现大数乘方,时间复杂度由O(n^3)降到O(n^2*logn)快速幂算法原理其实蛮简单的,类似于二分法的思想,扫描指数n的二进制形式,然后按照0或1做相应处理#include #include using namespace std;void reverse_str(char *a,int size){ for(in
2016-12-09 21:25:40
6601
2
原创 C/C++编程小练习 大数乘方
把先前的大数乘法做了一些修改和整合#include #include #include using namespace std;void reverse_str(char *a,int size){ for(int i=0;i
2016-12-08 22:18:12
1616
2
原创 C/C++程序算法小练习--大整数乘法
大整数乘法的原理很简单,就是模拟经典的手算步骤#include <iostream>#include <cstring>using namespace std;void reverse_str(char *a,int size){ for(int i=0;i<size/2;++i){ char t=a[i]; a[i]=a[size-i-1...
2016-12-06 15:51:51
607
原创 C/C++程序算法小练习--大整数减法
//大整数减法:#include #include using namespace std;void reverse_str(char *a,int size){ for(int i=0;i
2016-12-06 10:29:40
3106
2
原创 C/C++程序算法小练习--大整数加法
#include #include using namespace std;void reverse_str(char *a,int size){ for(int i=0;i<size/2;++i){ char t=a[i]; a[i]=a[size-i-1]; a[size-i-1]=t; }}void large_num_sum(){//两个大正整数相加 char
2016-12-05 21:45:50
918
2
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人