上一章我们解释了Hash table中最重要的hash函数,并用伪代码和C语言实现了一个我们自己的hash函数,hash函数中碰撞是无法避免的,当发生碰撞时我们改如何有效的处理呢?这章我们就来讲解下. 处理碰撞 hash函数中将无限大的输入映射到有限的输出中,当不同的输入映射到相同的输出时,就会发生碰撞,每个的hash表都会采用不同的方法来处理碰撞. 我们的哈希表将使用一种称为开放地址的双重哈希的技术来处理冲突.双重哈希使用两个散列函数来计算在发生碰撞后存储记录的索引. 双重哈希 当i发生碰撞后…
说明 Hash table翻译过来就是Hash表,是一种提供了类似于关联数组的数据结构,可以通过key执行搜索.插入和删除操作.Hash表由一些列桶(buckets)组成,而每一个bucket都是由key-value的形式组成.存储时都是以key-value存储的,因为当要定位一个value时,需要把key传给一个散列函数(hash函数),这个函数返回一个数(索引),代表查找的value位于哪一个bucket中.同理,当我们要从所有的buckets中取回key-value时,一样是先把key传给…
上一章,我们讲了hash表的数据结构,并简单实现了hash表的初始化与删除操作,这一章我们会讲解Hash函数和实现算法,并手动实现一个Hash函数. Hash函数 本教程中我们实现的Hash函数将会实现如下操作: 输入一个字符串,然后返回一个0到m(Hash表的大小)的数字 为一组平常的输入返回均匀的bucket索引.如果Hash函数不是均匀分布的,就会将多个记录插入到相同的bucket中,这就回提高冲突的几率,而这个冲突就会影响到我们的Hash表的效率. Hash算法 我们将会设计一个普通的字…
上一章,简单介绍了Hash Table,并提出了本教程中要实现的几个Hash Table的方法,有search(a, k).insert(a, k, v)和delete(a, k),本章将介绍Hash table使用的数据结构. Hash table数据结构 hash表中存储的每一项key-value的数据结构: // hash_table.h typedef struct { char* key; char* value; } ht_item; 我们的hash表中保存着一个指向每一项的指针数组…
上一章中,我们使用了双重Hash的技术来处理碰撞,并用了C语言实现,贲张我们将实现Hash表中的插入.搜索和删除接口. 实现接口 我们的hash函数将会实现如下的接口: // hash_table.h void ht_insert(ht_hash_table* ht, const char* key, const char* value); char* ht_search(ht_hash_table* ht, const char* key); void ht_delete(ht_hash_ta…
上一章我们讲了如何根据需要动态设置hash表的大小,在第四章中,我们使用了双重哈希来解决hash表的碰撞,其实解决方法有很多,这一章我们来介绍下其他方法. 本章将介绍两种解决hash表碰撞的方法: 拉链法 开放地址法 拉链法 使用拉链法,每一个bucket都会包含一个链接表,当发生碰撞时,就会将该记录插入在该位置的链接表后面,步骤如下: 插入时:通过hash函数获取到要插入的位置,如果该位置是空的,就直接插入,如果该位置不是空的,就插入在链接表的后面 搜索时:通过hash函数获取到key对应的位…
上一章中,我们实现了Hash表中的插入.搜索和删除接口,我们在初始化hash表时固定了大小为53,为了方便扩展,本章将介绍如何修改hash表的大小. 设置Hash表大小 现在,我们的hash表是固定大小(53)的,当插入越来越多数据时,我们的hash表就会被插满,这个问题有两个原因: 哈希表的性能随着高冲突率而降低 我们的'hash表'只能存储固定数量的记录,如果我们存储更多,将无法插入数据 为了减少hash表被插满的情况发生,当插入很多数据时,我们可以增大hash表的大小,hash表中的cou…
讲了三篇概博客的概念,今天,我们来一点实际的东西.我们来探讨一下如何用Java语言,编写一块简易的画图板. 一.需求分析 无论我们使用什么语言,去编写一个什么样的项目,我们的第一步,总是去分析这个项目需要满足怎样的需求. 那么,画板需要满足怎样的需要呢?换句话说,在画板上,我们应该赋予它什么功能呢?从我们熟悉的画板来看,我们需要实现诸如铅笔.橡皮.喷枪.刷子的功能,我们可以画出一些规则的图形,比如直线.矩形.圆.最好我们还能调整画笔的颜色和粗细.以上,我们希望的是,当我们点击一个按钮的时候,我们…
package com.Summer_0421.cn; import java.util.Arrays; import java.util.Scanner; /** * @author Summer * 使用java面向对象之前的知识 完成规定的功能; * 附加要求 : * 1. 可以注册多个用户 * 2. 每个注册的用户都可以登录 * 3. 注册的用户名是唯一的 * 4. 已经登录的用户 必须注销登录才可以继续登录 */ public class Test05 { static Scanner…
在PHP中,除了zval, 另一个比较重要的数据结构非hash table莫属,例如我们最常见的数组,在底层便是hash table.除了数组,在线程安全(TSRM).GC.资源管理.Global变量.ini配置管理中,几乎都有Hash table的踪迹(上一次我们也提到,符号表也是使用Hash table实现的).那么,在PHP中,这种数据有什么特殊之处,结构是怎么实现的? 带着这些问题,我们开始本次的内核探索之旅. 本文主要内容: Hash table的基本介绍 PHP底层Hash tabl…
task: 基于Chord实现一个Hash Table 我负责写Node,队友写SuperNode和Client.总体参考paper[Stoica et al., 2001]上的伪代码 FindSuccessor(key):对chord环上的任意一个key,返回他的successor FindPredecessor(key):对chord环上的任意一个key,返回他的Predecessor n.Closet_Preceding_Finger(key):对chord环上的任意一个key,在node…
从一个简易的哈希表入手,会让你更好的理解php的哈希表,他们的本质是一样的,只是php的哈希表做了更多的功能扩展,php的哈希表是php语言的一个重要核心,大量的内核代码使用到哈希表. #include <string.h> #include <stdio.h> #include <stdlib.h> #define HASH_ADD 0 #define HASH_UPDATE 1 typedef unsigned long ulong; typedef unsigne…
即便再简陋的服务器也是服务器,今天就来循着书本的第二章来看看如何实现一个servlet容器. 背景知识 既然说到servlet容器这个名词,我们首先要了解它到底是什么. servlet 相比你或多或少有所了解.servlet是用java编写的服务器端程序,主要功能在于交互式地浏览和修改数据,生成动态Web内容.狭义的Servlet是指Java语言实现的一个接口,广义的Servlet是指任何实现了这个Servlet接口的类,一般情况下,人们将Servlet理解为后者. 容器 容器的概念很大,在这里…
腾讯三面的时候,叫我写了个哈希表,当时紧张没写好···结果跪了··· 回来后粪发涂墙,赶紧写了一个! 什么都不说了···先让我到厕所里面哭一会··· %>_<% 果然现场发挥,以及基础扎实才是important的! 用链地址法解决冲突的哈希表(C语言,VS2008编写.测试): #include <stdio.h> #include <stdlib.h> #include <math.h> #include <string.h> struct n…
使用 RxJS 实现一个简易的仿 Elm 架构应用 标签(空格分隔): 前端 什么是 Elm 架构 Elm 架构是一种使用 Elm 语言编写 Web 前端应用的简单架构,在代码模块化.代码重用以及测试方面都有较好的优势.使用 Elm 架构,可以非常轻松的构建复杂的 Web 应用,无论是面对重构还是添加新功能,它都能使项目保持良好的健康状态. Elm 架构的应用通常由三部分组成--模型.更新.视图.这三者之间使用 Message 来相互通信. 模型 模型通常是一个简单的 POJO 对象,包含了需要…
从某宝上购买了一份<Python神经网络深度学习>课程,按照视频教程,用python语言,写了一个简易的FTP服务端和客户端程序,以前也用C++写过聊天程序,编程思路差不多,但是python编程时更顺畅,代码量更少.没有很高深的理论知识,也不需要扎实的编程基础,知道需要用哪些库就行了. 两种语言对比,初次感受到python语言的易用之处,python的核心是简洁清晰,也是伪代码的最佳实践语言.可以理解为C语言的一些常用功能库的转义,所以普遍认为python语言带来编程便捷的同时,也会带来一部分…
学习Go语言的一些感受,不一定准确. 假如发生战争,JAVA一般都是充当航母战斗群的角色.一旦出动,就是护卫舰.巡洋舰.航母舰载机.预警机.电子战飞机.潜艇等等浩浩荡荡,杀将过去.(JVM,数十个JAR包,Tomcat中间件,SSH框架,各种配置文件...天生就是重量级的,专为大规模作战) 而GO语言更像F35战斗轰炸机单枪匹马,悄无声息,投下炸弹然后走人.专属轰炸机,空战也会一点点.实在搞不定,就叫它大哥F22.(GO是编译型语言,不需要依赖,不需要虚拟机,可以调用C代码并且它足够简单,却非常…
1. demo 地址:http://www.huchengchun.com:8127/porn_classification 接口说明: 1. http://www.huchengchun.com:8127/porn_classification 提供了一个简易的网页工具,用户可以上传若干张图片,服务端会传回每一张图片是否是色情图片的判定,结果的形式是json格式.截图如下: 返回结果的说明: 返回结果整体是一个json,key是加上时间戳后缀的上传图片名称,value是上传图片的色情的判定,其…
实现一个简易的Unity网络同步引擎Netgo 目前GOLANG有大行其道的趋势,尤其是在网络编程方面.因为和c/c++比较起来,虽然GC占用了一部分机器性能,但是出错概率小了,开发效率大大提升,而且应用其原生支持的协程很容易就能开发出高并发的服务端程序.笔者接触VR行业两年有余,接触了一些商业unity网络引擎,总觉的用的东西都落伍了,于是自己写了一个简单的引擎.目前实现了的基本功能: 支持房间概念. 支持灵活的数据同步方式,包括帧同步和RPC. 支持自定义事件的发送. 也实现了一个简单的de…
作者:DeppWang.原文地址 我通过实现一个简易的 Spring IoC 容器,算是入门了 Spring 框架.本文是对实现过程的一个总结提炼,需要配合源码阅读,源码地址. 结合本文和源码,你应该可以学到:Spring 的原理和 Spring Boot 的原理. Spring 框架是 Java 开发的,Java 是面向对象的语言,所以 Spring 框架本身有大量的抽象.继承.多态.对于初学者来说,光是理清他们的逻辑就很麻烦,我摒弃了那些包装,只实现了最本质的功能.代码不是很严谨,但只为了理…
前言 之前在 上篇 提到过会实现一个简易版的 IoC 和 AOP,今天它终于来了...相信对于使用 Java 开发语言的朋友们都使用过或者听说过 Spring 这个开发框架,绝大部分的企业级开发中都离不开它,通过 官网 可以了解到其生态非常庞大,针对不同方面的开发提供了一些解决方案,可以说 Spring 框架的诞生是对 Java 开发人员的一大福利,自 2004 年发布以来,Spring 为了解决一些企业开发中的痛点先后引入了很多的特性和功能,其中最重要的就是我们经常听到的 IoC 和 AOP…
前言 本文是「如何实现一个简易版的 Spring 系列」的第五篇,在之前介绍了 Spring 中的核心技术之一 IoC,从这篇开始我们再来看看 Spring 的另一个重要的技术--AOP.用过 Spring 框架进行开发的朋友们相信或多或少应该接触过 AOP,用中文描述就是面向切面编程.学习一个新技术了解其产生的背景是至关重要的,在刚开始接触 AOP 时不知道你有没有想过这个问题,既然在面向对象的语言中已经有了 OOP 了,为什么还需要 AOP 呢?换个问法也就是说在 OOP 中有哪些场景其实处…
大家好,我是三友~~ 最近突然心血来潮(就是闲的)就想着撸一个简单的配置中心,顺便也照葫芦画瓢给整合到SpringCloud. 本文大纲 配置中心的概述 随着历史的车轮不断的前进,技术不断的进步,单体架构的系统都逐渐转向微服务架构.虽然微服务架构有诸多优点,但是随着越来越多的服务实例的数量,配置的不断增多,传统的配置文件方式不能再继续适用业务的发展,所以急需一种可以统一管理配置文件应用,在此之下配置中心就诞生了. 所以配置中心就是用来统一管理各种服务配置的一个组件,本质上就是一个web应用. 配…
FileProvider构建了一个抽象文件系统,作为它的两个具体实现,PhysicalFileProvider和EmbeddedFileProvider则分别为我们构建了一个物理文件系统和程序集内嵌文件系统.总的来说,它们针对的都是"本地"文件,接下来我们通过自定义FileProvider构建一个"远程"文件系统,我们可以将它视为一个只读的"云盘".由于文件系统的目录结构和文件内容都是通过HTTP请求的方式读取的,所以我们将这个自定义的FileP…
来做个简易的字符识别 ,既然是简易的 那么我们就不能用任何的第三方库 .啥谷歌的 tesseract-ocr, opencv 之类的 那些玩意是叼 至少图像处理 机器视觉这类课题对我这种高中没毕业的人来说是一座高山 对于大多数程序员都应该算难度不小吧. 但是我们这里 这么简陋的功能 还用那些玩意 作为一个程序员的自我修养 你还玩个球.管他代码写得咋个low 效率咋个低 被高手嗤之以鼻也好 其实那些高手也就那样 把你的代码走起来  ,这是一件很好玩的事情. 以前一直觉着这玩意挺神奇 什么OCR o…
Angular 和 Vue 在对Angular的学习中,了解到AngularJS 的两个主要缺点: 对于每一次界面时间,Ajax 或者 timeout,都会进行一个脏检查,而每一次脏检查又会在内部循环检查,当界面绑定的model 很多,就会造成严重的性能问题 . Angular 混乱的模块,并不能起到命名空间的作用,因而在大项目中组织模块又是一件头疼的事. 但是 Angular 开发中小型的应用是很棒的,也是将 MVC 引入到前端的开始.定一个目标,两年时间理解 <Build Your Own…
自制一个简易资源管理器----TreeView控件 第一步.新建project,进行基本设置:(Set as StartUp Project:View/Toolbox/TreeView) 第二步.开始添加节点 添加命名空间using System.IO; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; usin…
一.引言 上一篇博文已经向大家介绍了AngularJS核心的一些知识点,在这篇博文将介绍如何把AngularJs应用到实际项目中.本篇博文将使用AngularJS来打造一个简易的权限管理系统.下面不多说,直接进入主题. 二.整体架构设计介绍 首先看下整个项目的架构设计图: 从上图可以看出整个项目的一个整体结构,接下来,我来详细介绍了项目的整体架构: 采用Asp.net Web API来实现REST 服务.这样的实现方式,已达到后端服务的公用.分别部署和更好地扩展.Web层依赖应用服务接口,并且使…
前言 经过不断的坚持和努力,ENode 2.0的第一个真实案例终于出来了.这个案例是一个简易的论坛,开发这个论坛的初衷是为了验证用ENode框架来开发一个真实项目的可行性.目前这个论坛在UI上是使用了最终一致性,也就是说当我们发帖或回帖后不会立马显示你的帖子或回复.当我们下一次刷新页面时,会显示出来.这点貌似很多人向我反馈不太习惯,接受不了,呵呵.我之所以这样做也是想看看最终一致性大家的接受程度如何,看来UI层面上的最终一致性,大部分人接受不了.回头我改进下效果,改为立即可以看到帖子或回复吧!另…
最近在做公司内部的运营管理系统,因为与日历密切相关,同时无需触发条件直接显示在页面上,所以针对这样的功能场景,我就用avalon快速实现了一个简易日历,毕竟也是第一次造日历这种轮子,所以这里记录下我当时的一些思路,一来做一些技术总结,二来也是给像我这样第一次做日历的前端工程师一些参考. 先来一起看下日历的界面: 日历功能包括:1.显示当前月.上个月后几天.下个月前几天的日期,2.切换到上个月,3.切换到下一个月,4.回到今天,5.点击某天弹出当天的年月日(如2014-10-26),同时不在当前月…