Java
文章平均质量分 73
Yotwei
这个作者很懒,什么都没留下…
展开
-
SHA1算法以及Java代码实现(不使用MessageDigest类)
最近课程上了点密码学,稍微了解了下哈希函数,并且试着用Java实现了一下sha1算法。为了理解其原理,我没有使用Java带的MessageDigest类。而是从头开始实现一遍原创 2017-10-28 19:48:33 · 2780 阅读 · 0 评论 -
关于 0.1+0.2 == 0.3 不成立的一些细节
很早之前看到一关于js的问题,如下实际上 0.1+0.2 != 0.3 这个问题不是js特有,来看一段java代码 @Test public strictfp void test() { System.out.println(0.1f + 0.2f == 0.3f); System.out.println(0.1 + 0.2 == 0.3); ...原创 2018-07-11 15:25:57 · 12078 阅读 · 0 评论 -
关于HTTP的Content-Length与Chunk编码方式
最近在学习netty,里面提到了一个TCP拆包粘包的问题,查阅资料了解到了几种解决的办法,例如使用特殊分隔符 定长数据帧以及 自定义消息头+消息体,在消息头中定义数据包的长度关于最后一种实现手段,最典型的代表就是我们常见的HTTP协议。关于Content-LengthContent-Length是HTTP头部的一个字段,用于表示HTTP的body数据的长度。但是在HTTP 1.0...原创 2018-07-18 16:55:31 · 4688 阅读 · 0 评论 -
手写一个简化版Mybatis
1、引包引入dom4j包以及数据库连接包,我用的是mysql数据库,因此引入mysql-connector包2、数据库创建数据库比较简单,创建sql如下CREATE DATABASE db_test;use db_test;CREATE TABLE `tb_user` ( `id` int(11) NOT NULL, `name` varchar(20) NOT ...原创 2018-08-07 16:06:28 · 1119 阅读 · 0 评论 -
迷宫的生成——深度优先搜索
生成一个迷宫的算法有好几种,下面来介绍一下用深度优先搜索的思想来生成一个迷宫。 算法描述迷宫的初始状态是一张有众多单元格组成的网格,单元格的初始状态是“四面有墙”,DFS的步骤如下1.将起点作为当前迷宫单元并标记为已访问2.当还存在未标记的迷宫单元,进行循环 1.如果当前迷宫单元有未被访问过的的相邻的迷宫单元 1.随机选择一个未访问的相邻迷宫单元 2.将当前迷宫单...原创 2018-08-13 22:58:23 · 1030 阅读 · 1 评论 -
ThreadLocal源码解读
ThreadLocal的作用用于实现线程内的数据共享,即对于相同的程序代码,多个模块在同一个线程中运行时要共享一份数据,而在另外线程中运行时又共享另外一份数据。 ThreadLocal的主要方法主要方法有 get(),set(),remove()分别对应获取值,设置值,删除值对于同一个线程,在没有set或remove之后,get会得到null值 Thread,T...原创 2018-08-27 20:24:24 · 269 阅读 · 0 评论 -
模糊匹配之——BK树与拼写纠正
介绍拼写纠错功能常常出现在比较高级的文本编辑应用中,例如大家熟知的word,高级一点的IDE例如Jet Brains系列,在一些在线翻译上,也有自动校正拼写的功能,例如谷歌翻译。原理拼写纠正的实现方式有多种,这里使用的是一种名为BK树的数据结构,也叫作Burkhard-Keller树,是由Burkhard,Keller这两人提出来的,不过网上能找到的相关资料并不多,参见ACM文档htt...原创 2018-09-09 11:18:18 · 1643 阅读 · 1 评论 -
Huffman树与Huffman编码的代码实现
Huffman树构建过程1、给定集合S,包含n个元素,每个元素拥有一个权值w2、从集合中取出集合最小的两个元素,创建一个新的父节点,左右子节点分别指向这两个节点,父节点的权值为两节点权值之和,将父节点放回集合中3、将步骤(2)重复n-1次,最后获得的父节点作为树的根节点,Huffman树构建完成。Huffman编码对于哈夫曼树的每个节点,到左孩子的边标记为0,右孩子标记为1,(...原创 2018-09-12 17:32:22 · 1013 阅读 · 0 评论 -
字典树与前缀匹配
简介前缀匹配大家都不陌生,运用也很广泛,常见的应用是输入框的自动提示,像Linux这样的操作系统命令行的自动补全,也是前缀匹配的一个应用。字典树字典树有如下性质1,根节点不包含字符,除根节点意外每个节点只包含一个字符。2,从根节点到某一个节点,路径上经过的字符连接起来,为该节点对应的字符串。3,每个节点的所有子节点包含的字符串不相同。代码实现字典树节点的定义 ...原创 2018-09-10 09:07:13 · 2193 阅读 · 0 评论 -
【CVTE一面】记一次百里送人头
今天大老远的跑去广州面CVTE的第一轮面试,我面的是Java后端岗位,讲真我对自己的表现并不满意。面试过程一开始见到两个面试官,看起来非常Nice,左边一个全程没说过几句话,主要在记录东西。右边那个就主要问我问题的。面试官开始随便问几句你学校在哪,面试官还不知道五邑大学。进入正题,第一个问题是问我Java语言的特性,我回答了封装继承多态,然后他问我对封装的理解, 对继承的理解。老实说这...原创 2018-09-14 22:24:37 · 1587 阅读 · 0 评论 -
自己动手实现BlockingQueue
Java的java.util.concurrent.*包下有许多在并发场景下使用的集合,ArrayBlockingQueue是其中之一,它是一个循环队列,这个队列的特别之处在于take方法与put方法,分别对应队列的元素出列和元素入列操作,当队列为空时,take会使得线程进入等待状态,直到队列不为空,有元素能够出列才会继续执行;同理,当队列满时,put方法也会使得线程进入等待状态。 ...原创 2018-07-01 21:23:18 · 1364 阅读 · 0 评论 -
ArrayBlockingQueue源码解读
ArrayBlockingQueue主要由以下几个重要方法方法返回或超时返回阻塞 插入offer(E e) / offer(e, long timeout, TimeUnit unit)put(E e)移除poll() / poll()poll(long timeout, TimeUnit unit)take()插入元素1、offer(E e) / offer(e, long timeou...原创 2018-06-30 10:07:44 · 244 阅读 · 0 评论 -
Java的迭代器与迭代子模式
概括Java集合容器是Java的一个重要组成部分,而迭代器(Iterator)就是对外提供访问集合元素的一种方式。访问数组元素的方式访问数组的方式并不陌生,如下public class Test { public static void main(String[] args) { int[] arr = {2, 0, 1, 8, 0, 6, 0, 7}; ...原创 2018-06-09 11:03:18 · 706 阅读 · 0 评论 -
回溯法简单应用--解数独
介绍用回溯法解标准数独,附上Java代码原创 2017-11-06 14:21:45 · 2011 阅读 · 2 评论 -
ServerSocket实现超简单HTTP服务器
使用ServerSocket与Socket实现一个简单的HTTP服务器原创 2017-12-09 11:21:05 · 7013 阅读 · 2 评论 -
Java NIO实现WebSocket服务器
这里用了原生的NIO来与HTML5中WebSocket API的数据格式对接。而不是使用Java现有的架包或框架原创 2017-12-19 16:03:20 · 7859 阅读 · 3 评论 -
Spring学习笔记——IOC的一些注解
Spring支持用注解的方式配置Bean,这相比传统的XML配置方式,极大减少了对Bean的配置量。不过在使用注解之前,还是需要在配置文件上添加一行<context:component-scan base-package="com.yotwei.ioc"/>这告诉Spring我想要配置的Bean位于包com.yotwei.ioc下,Spring将会自动扫描该包下的类。Component, Contr原创 2018-02-01 22:12:07 · 314 阅读 · 0 评论 -
【算法题】不使用四则运算求A+B
题目描述最近看到一道比较有趣的算法题,原题是这样的: 写一个函数,求两个整数(int)之和,要求在函数体内不得使用+、-、*、/四则运算符号。我的解法public int add(int num1, int num2) { return (num1 & num2) == 0 ? num1 ^ num2 : add(num1 ^ num2, (num1 & num2) << 1);原创 2018-02-03 18:45:05 · 540 阅读 · 0 评论 -
【算法】跳石板问题(广度优先搜索)
题目描述(来源:网易的笔试题) 小易来到了一条石板路前,每块石板上从1挨着编号为:1、2、3.......这条石板路要根据特殊的规则才能前进:对于小易当前所在的编号为K的 石板,小易单次只能往前跳K的一个约数(不含1和K)步,即跳到K+X(X为K的一个非1和本身的约数)的位置。 小易当前处在编号为N的石板,他想跳到编号恰好为M的石板去,小易想知道最少需要跳跃几次可以到达。 例如: N = 4,M...原创 2018-03-08 15:34:04 · 448 阅读 · 0 评论 -
【算法题】最大的奇约数
题目来源:网易我的解法: 一开用的是始逐项求最大奇数然后相加的解法,由于后面几个测试用例的n比较大,所以运行超时了,这样就不得不从中找规律来解。 不难发现,当x为奇数时,f(x)=x。 当n为奇数,s(n) = f(1) + f(2) + f(3) + f(4) + f(5) + f(6) + .... + n = (1 + 3 + 5 + 7 + .....原创 2018-03-22 11:25:56 · 333 阅读 · 0 评论 -
用Java实现简单的“马赛克拼图”
先来一张效果图这些头像都来自微信好友的,放大看这不过是一张众多头像拼成的大图,缩小或远看能够发现这些头像其实拼出了一个有趣的图案。这个实现思路并不复杂(这个思路暂时只针对黑白的图片,如果要支持彩图会更复杂一点,可以了解下 foto-mosaik-edda)首先需要一张“参考图片”和大量小图片(最好都是方形的,头像是个很好的选择)计算每一张方形小图片的平均灰度值,计算公式为 gray = (77*r...原创 2018-03-28 11:33:09 · 2480 阅读 · 1 评论 -
用Java写一个Photo Mosaic
早在两星期前也写了个“马赛克拼图”,不过只支持黑白色的图片,昨天试了下拼彩色图片,先来一张预览图,效果还是可以的实现思路1、准备大量小张方形素材,为了方便表述,姑且称这些图片为“Tile”2、对于每一个Tile,作如下处理:统一压缩成同一大小,我压缩成了32x32计算平均RGB值“简化”RGB值,我这么做是因为Tile素材量还不够大,我希望能将平均RGB值相近的Tile都归为一组,分组也方便后面对...原创 2018-04-12 14:36:14 · 789 阅读 · 0 评论 -
空间索引-四叉树的实现及其应用
什么是四叉树?四叉树(Quad Tree)是一种空间索引树,四叉树的每一个节点都代表着一块矩形区域。我们知道在平面直角坐标系中,平面可以被分为第一二三四象限,四叉树的每一个节点也类似,可以分裂为四个子节点,子节点在满足条件的情况下可以继续分裂,这样构成了一个四元的树状结构,就是四叉树。 四叉树的作用通常使用树结构能够带来高效且简单的检索效果,四叉树也不例外,四叉树主要用于二维空间的...原创 2018-10-31 15:57:34 · 17049 阅读 · 0 评论