- 博客(160)
- 收藏
- 关注
原创 理解Closure--记一次JS代码Debug过程
刚入门前端开发, 写一个页面时遇到一次Closure 导致的问题, 花了一些功夫才解决, 这里记录下。问题描述:JS 代码根据后台返回的数据列表来渲染form 呈现, 每一条Item 对应一个form , form 里面有link , 绑定了click 事件, 事件响应函数要接收Item 里面的数据:function displayDevice(data) { de...
2018-03-10 11:24:02
882
原创 TinySTL设计与实现
最近个人博客(huqijun.org) 改版, 一些非创造性的文章迁移到CSDN概述学习和理解template 和STL 的最好方式就是自己用template 造一个STL(俗称造轮子),然后不断对比自己版本的STL与标准版本的STL(sgi STL 或者其它版本),不断重构自己的版本,使自己的版本达到或者超过标准库版本。计划实现Containers Libr
2017-11-23 18:11:34
1122
原创 新的开始--MarkDown初体验
个人博客(huqijun.org) 全新改版, 一些非原创性的,记录性的博文迁移到csdn迁移到独立的个人博客花了点时间,新博客的第一篇文章准备学习与总结下MarkDown,一方面是博客本身就是托管在有浓厚MarkDown氛围的GitHub上,另一方面MarkDown 确实非常优秀!(●'◡'●)这篇文章本身也是用MarkDown写的!一 认识MarkDownMa
2017-11-23 18:05:08
339
原创 深入理解Java虚拟机读书笔记--第十二章 Java 内存模型与线程
第十二章Java内存模型与线程物理机为了尽可能利用多处理器, 采取了以下措施:1.高速缓存2.对代码进行乱序执行优化高速缓存解决了处理器与内存的速度矛盾(参考wiki 说明: https://zh.wikipedia.org/wiki/CPU%E7%BC%93%E5%AD%98)但是引入了一个新的问题, 缓存一致性
2017-10-08 20:00:07
990
1
原创 Redis 使用入门
1.安装gccRedis 在实际的生产环境中都部署在Linux 系统上, 所以先准备一台LinuxRedis 安装需要gcc , 先确保Linux 上已安装了gcc输入gcc , 提示找不到命令, 说明系统上没有安装gcc.使用yum安装gcc:#root账户下,安装gcc、c++编译器以及内核文件su rootyum-yinstall
2017-10-03 11:50:27
337
原创 Core Java Volume I 读书笔记---第十四章 多线程
第十四章: 多线程进程与线程的本质区别: 每个进行有自己独立的变量空间, 而线程则共享数据(FYI:回忆下Java的运行时内存布局, Java 堆是线程共享的)14.1 什么是线程Java 标准类库中的线程类 java.lang.Thread, Thread 类的内容非常多, 这里截取一些常用的, 更多信息参考 java.lang.Thread.jav
2017-09-30 14:09:02
318
原创 Spring入门之IOC,AOP
Spring是目前最流行的Java开发框架, Java 企业开发中的SSH或者SSM都与Spring有关。 Spring最根本的使命是简化Java开发。基于这一使命,Spring有了以下4中关键策略:1.基于POJO 的轻量级和最小侵入式编程;2.通过依赖注入和面向接口编程实现松耦合;3.基于切面和惯例进行声明式编程;4.通过切面
2017-09-28 09:29:39
488
1
原创 Core Java Volume I 读书笔记---第十三章 集合
第十三章: 集合13.1 集合接口Java 集合类库将接口与实现分离。集合类的基本接口是Collection接口, 其定义如下:public interface CollectionE>extends IterableE> {//Query Operationsint size(); // 返回当前存储在集合中的元素个
2017-09-25 23:18:00
329
原创 MyBatis使用入门
MyBatis使用入门1.没有ORM的时代在实际Java开发过程中,ORM 是不可或缺的一种工具。没有ORM工具是, Java 程序中访问数据库比较麻烦: 通过JDBC 执行SQL 语句, 然后还要负责将SQL 语句的结果转换为对象。下面是一段使用JDBC的示例代码:try(Connection c =DriverManager.getC
2017-09-25 16:06:38
296
原创 Core Java Volume I 读书笔记---第十二章 泛型程序设计
第十二章: 泛型程序设计12.1 为什么要使用泛型程序 泛型能避免重复代码, 没有泛型之前同样的功能比较比较大小, 整型需要一个实现, 字符串需要一种实现。泛型的核心是将类型参数化。泛型节省的是程序员写的代码, 最终实际运行时实际没有那么节省, 生成重复代码的过程都由编译器干了, 无论是C++ 还是Java的泛型系统都是这样。12.2 定义简单泛
2017-09-24 20:41:35
464
原创 深入理解Java虚拟机读书笔记--第七章 虚拟机类加载机制
第七章 虚拟机类加载机制虚拟机类加载机制:虚拟机把类的数据从Class文件加载到内存,并对数据进行校验,转换解析和初始化,并最终形成可以被虚拟机直接使用的Java类型这里的类包括了类和接口的可能性,Class文件指一串二进制的字节流,无论以何种形式存在。类加载是在程序运行期间完成的。类的生命周期包括加载,验证,准备,解析,初始化,使用和协作7个阶段:
2017-09-23 17:42:47
480
原创 Core Java Volume I 读书笔记---第六章 接口与内部类
第六章: 接口与内部类6.1接口接口不是类,是对类的一组需求描述public interfaceComparable{ int compareTo(Objecto);}类声明实现某个接口, 使用关键字implements:class Employee implements Comparable然后类需要实现接口中声...
2017-09-22 12:03:50
480
原创 Core Java Volume I 读书笔记---第五章: 继承
第五章: 继承5.1 类,超类,子类继承:通过扩展已存在的类来定义新的类, Java 中使用关键字extends“is a “ 是继承关系的明显特性, 子类is a 父类;继承的本质是复用已有类的方法和域, 是聪明的偷懒。子类一般拥有比超类更加丰富的功能超类中有些方法对子类不适用, 子类可以覆盖(override)超类中的方法子类中可...
2017-09-21 19:59:42
459
原创 深入理解Java 虚拟机读书笔记--第三章 垃圾收集器与内存分配策略
1960 年诞生与MIT的LISP 是第一门真正使用内存动态分配和垃圾收集技术的语言;GC需要完成的3件事情:1.哪些内存需要回收(what)2.什么时候回收(when)3.如何回收(how)程序技术器,虚拟机栈,本地方法栈随线程而生,随线程而灭, 不需要回收。Java堆和方法区需要回收, GC主要的工作范围是Java堆;...
2017-09-21 16:26:38
522
原创 深入理解Java虚拟机读书笔记--第二章 Java 内存区域与内存溢出异常
第二章Java 内存区域与内存溢出异常Java 虚拟机运行时数据区域1.程序计数器当前线程所执行的字节码的行号指示器, 线程私有在虚拟机的概念模型中, 字节码解释器就是通过改变这个计数器的值来选择下一条需要执行的字节码指令,分支,循环,调转,异常处理,线程恢复等基础功能都需要依赖这个计数器完成2.Java 虚拟机栈线程私有描述Ja...
2017-09-21 16:25:12
518
原创 深入理解Java 虚拟机 读书笔记
深入理解Java虚拟机第一章 走进Java第二章Java 内存区域与内存溢出异常Java 虚拟机运行时数据区域1.程序计数器当前线程所执行的字节码的行号指示器, 线程私有在虚拟机的概念模型中, 字节码解释器就是通过改变这个计数器的值来选择下一条需要执行的字节码指令,分支,循环,调转,异常处理,线程恢复等基础功能都需要依赖这个计数器完成
2017-09-19 14:21:43
615
1
原创 Core Java Volume I 读书笔记--第4章 对象与类
4.1 面向对象程序设计概述算法 + 数据结构 = 程序传统的结构化程序设计通过设计一系列过程(即算法)来解决问题, 算法是第一位的, 数据结构是第二位的;OOP中优先考虑数据结构, 先设计数据的结构(类),其次再向类中添加一系列操作;类是构造对象的模板或者蓝图。 由类构造对象的过程称为创建实例。封装:将数据和行为组合在一个包中,并对对象的使用的者隐藏数据的实现方式...
2017-09-18 17:42:57
626
原创 Core Java Volume I 读书笔记--第3章 Java的基本程序设计结构
更多关于编程语言, 数据库,算法等精品内容, 请访问我的个人博客 huqijun.org3.1 Hello World 入门public class FirstSample {publicstatic void main(String[] args){ System.out.println("we will not use 'Hello world!'...
2017-09-01 20:23:53
867
转载 原码,反码,补码---计算机中负数的表示
原码:将一个整数,转换成二进制,就是其原码。 如单字节的5的原码为:0000 0101;-5的原码为1000 0101。 反码:正数的反码就是其原码;负数的反码是将原码中,除符号位以外,每一位取反。 如单字节的5的反码为:0000 0101;-5的反码为1111 1010。 补码:正数的补码就是其原码;负数的反码+1就
2017-02-05 21:29:45
433
原创 C/C++位结构(位域)
位结构是一种特殊的结构, 在需按位访问一个字节或字的多个位时, 位结构比按位运算符更加方便。位结构定义的一般形式为:struct位结构名{数据类型 变量名: 整型常数;数据类型 变量名: 整型常数;} 位结构变量;其中: 数据类型必须是int(unsigned或signed)。整型常数必须是非负的整数, 范围是0~15, 表示二进制位的个数, 即表示有多少位。变
2016-12-26 23:12:12
300
转载 一致性哈希算法(consistent hashing)
一致性哈希算法在1997年由麻省理工学院提出的一种分布式哈希(DHT)实现算法,设计目标是为了解决因特网中的热点(Hot spot)问题,初衷和CARP十分类似。一致性哈希修正了CARP使用的简 单哈希算法带来的问题,使得分布式哈希(DHT)可以在P2P环境中真正得到应用。 一致性hash算法提出了在动态变化的Cache环境中,判定哈希算法好坏的四个定义:1、平衡性(B
2016-11-13 13:13:18
179
原创 字符串Hash:ELFhash 函数及其变体
实际项目中经常用到HASH 算法,这里介绍一种简单实现, 将任意字符串HASH映射到0到某一指定的范围内#include<iostream>#include<string>const int maxHashValue = 20000;int stringHash(std::string & str){ int key = 0; int isum = 0; for(std:
2016-10-09 00:05:59
518
转载 不带缓冲IO和带缓冲IO
先来看看不带缓存的I/O和标准(带缓存的)I/O都有那些不带缓存的I/O: read,write,open......标准(带缓存的)I/O: fgets,fread,fwrite.....这里使用两个对应的函数进行比较:ssize_t write(int filedes, const void *buff, size_t nbytes)size_t fwrit
2016-09-20 23:59:36
244
原创 常见关系型数据库对比
工作中也陆续接触了Oracle ,SQLite,PostgreSQL 等数据库, 大体的总结下这几个数据库的差异点:从上面的对比,可以知道三中数据库各自不同的适用项目: 1. Oracle 商业产品,功能最为强大,适合数据量极大,并发要求极高的项目,一把都是特大型和大型项目; 2. Postgre 开源产品, 功能和性能都还不错,不过和Oracle 还是有一定差距,适合数据量和并发要求没有那么高
2016-07-31 10:40:58
3283
原创 C/C++工程实践
最近看公司产品代码时,发现了几种没见过的用法本贴持续总结这些工程中的时间技巧1. struct test{int a ;float b;char c[0]; };作用: 柔性数组 C99的标准形式如下struct sample{ int a; double b; char c[]
2016-07-04 23:51:28
782
原创 时间管理,轻重缓急
本文首发于个人博客http://huqijun.com ,转载需获得作者授权!概述时间管理是现代职场人士的必备技能。 现代人如何在快节奏的职场中做好工作? 如何平衡好工作和个人生活,家庭生活的关系? 事分轻重缓急, 轻重指的是事情的重要性这一维度, 缓急指的是事情的迫切性这一个维度 尽量多的做重要不紧急的事情, 这个是时间管理的核心象限分析从轻重,缓急两个维度来分析, 就可以画出
2016-06-26 11:55:21
1078
原创 main函数的第三个参数envp
本文首发于个人博客http://huqijun.com, 转载需或者作者授权!main函数两种常见形式在C/C++ 程序中, 操作系统通过main函数来调用程序,main函数是从程序的入口。常见的main 函数定义有如下两种方式: int main(void) int main(int argc,char * argv[])第一种方式main 不接受参数,第二种方式可以在通过shell调
2016-06-17 00:15:53
5736
原创 GDB常用
本文写给主要工作在Windows操作系统下而又需要开发一些跨平台软件的程序员朋友,以及程序爱好者。GDB是一个由GNU开源组织发布的、UNIX/LINUX操作系统下的、基于命令行的、功能强大的程序调试工具。GDB中的命令固然很多,但我们只需掌握其中十个左右的命令,就大致可以完成日常的基本的程序调试工作。 命令 解释 示例file 加载被调试的
2016-06-15 21:55:48
384
原创 WireShark 检测不到网卡的问题
第一步1、打开windows设备管理器。2、查看-显示隐藏的设备3、非即插即用驱动程序4、NetGroup Packet Filter Driver 右键属性—驱动程序—启动类型,修改类型为“系统”第二步:在cmd下输入net start npf,打开网络抓包服务第三步:运行wireshark ,此时网卡已经可以正常检测到了
2016-05-28 21:41:37
1421
原创 爬虫基础--大数据时代的生产工具
本文首发于个人博客http://huqijun.com,欢迎访问!概述说起‘爬虫’,大家第一映像是这是个很酷的东西,听起来很厉害的样子。一般人对爬虫的理解就是这样了,不会对爬虫有一些深入的思考。 我眼中爬虫的意义:爬虫是我们在信息化社会中获取信息最有效的工具. 大数据的时代已经来临,基于大数据的数据挖掘,个性化推荐等领域都如火如荼。爬虫是个人获取大数据非常有效的工具。 大学毕业设计时
2016-05-24 00:04:05
1197
原创 linux下C 和 C++ include搜索的路径
C语言中中可以通过#include 和#include "stidio.h",区别是:#include ,直接到系统指定目录去查找头文件。#include "stidio.h",会先到当前目录查找头文件,如果没找到在到系统指定目录查找。C++中类似, 区别在于C++中尖括号一般用户标准库头文件,而引号用于用户自己头文件gcc编
2016-05-05 23:25:56
5464
原创 Unix 基础知识
经典的Unix操作系统系统结构:最里面最核心的是操作系统内核(kernel),内核的接口即为系统调用(system call). shell 是一个命令行解释器(命令行解释程序),它读取用户输入,然后执行命令。。用户程序(application)可以在Shell上运行,可以调用Library运行,也可以直接调用system calls 运行。
2016-04-26 23:39:58
831
原创 C++ 那些反人类直觉的tricks
注释嵌套std::cout << /* "*/" /* "/*" */;这个语句会输出 /* , 难道注释的查找是从右往左查找的? 即先找到 */ ,然后往前匹配最近的一个 /* ,认为这两者之间为注释内容? 据说C++ 一些编译的词法分析是正则做的,有空可以研究下这个问题。
2016-04-26 22:55:03
498
原创 常用网络相关命令(ping,nbtstat,netstat等)
一,ping它是用来检查网络是否通畅或者网络连接速度的命令。作为一个生活在网络上的管理员或者黑客来说,ping命令是第一个必须掌握的DOS命令,它所利用的原理是这样的:网络上的机器都有唯一确定的IP地址,我们给目标IP地址发送一个数据包,对方就要返回一个同样大小的数据包,根据返回的数据包我们可以确定目标主机的存在,可以初步判断目标主机的操作系统等。下面就来看看它的一些常用的操作。先看看帮助吧,在DO
2016-04-25 22:16:04
10550
原创 Jmap 和MAT结合分析JAVA 内存问题
jmap 命令: dump heap jamp -dump:format=b pid然后使用MAT工具分析heap dump
2016-04-22 22:53:30
597
原创 使用文件重定向
在重新看 C++ Primer 5th 时,注意到了一个以前忽视的细节(page 19): 当你测试程序时,反复从键盘输入数据是非常乏味的。 大多数操作系统支持文件重定向,这种机制允许我们将标准输入和标准输出与命令文件管理起来: $ addItem < infile >outfilr 以上命令会将infile 内容作为程序的输入,输入写到outfile 文件中.测试代码:
2016-04-22 00:19:27
992
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人