Navigation Menu

Skip to content

Instantly share code, notes, and snippets.

View lqt0223's full-sized avatar

lqt0223 lqt0223

  • Shanghai, China
View GitHub Profile
@lqt0223
lqt0223 / gist:6c66f6c0f9304e9d0b9acc7cbd505390
Created February 17, 2017 13:18
01 Write a mapReplace() function in Java(comparing to JavaScript)

用Java写一个mapReplace函数 (与JavaScript的比较)

前言

我个人目前比较熟悉的是JavaScript。因此,这个系列计划通过对比学习的方式,将JavaScript中自己比较熟悉的部分,迁移到Java中实现,并顺带记录和学习Java中的实现方式。

需求

写一个函数,函数名为mapReplace,函数的参数1是一个字符串,其中包含不定数量的数字,参数2是一个函数。该函数的功能是:将参数1的字符串中的数字全部用参数2作同一个算术处理,并将结果替换到字符串原来的位置上

@lqt0223
lqt0223 / g.md
Created February 23, 2017 13:44
02 Relationship between CPU, memory, hard disk and directives

CPU、内存、硬盘与指令的关系

  • 硬盘中存储需要持久保存的数据,容量大速度慢。
  • 内存中以堆或栈的结构形式存储着CPU计算所需要的数据,容量较小速度较快。内存中的数据又是来源于硬盘。
  • CPU主要负责计算,但也有一定的暂存功能。CPU从内存中读取数据作为操作数存到其寄存器(register)中,然后调用运算器(arithmetic logic unit)作计算。CPU还有控制器(control unit)用以控制系统其他部分(如其他硬件)。
  • 指令(directive),是和数据(data)相对的。指令和数据被保存在内存中,CPU读取内存中的指令并执行。
@lqt0223
lqt0223 / g.md
Created February 25, 2017 06:20
03 Reviewing Binary Tree and it's Java implement

二叉树的重新学习

在编程提高群的本周作业中,有一项是”自己实现一个二叉树(BinaryTree)“。老师简单的讲解了二叉树大概是什么,并针对这个作业将模板代码写给了我们,让我们自己去实现。虽然完成了,但自己觉得很多地方还是没有很好理解。

于是后面去 https://www.youtube.com/watch?v=M6lYob8STMI 找到了一个老外的不错的视频,内容是关于二叉树的概念以及用Java实现二叉树的节点(Node),以及节点的增加和查找。

可以科学上网,以及英文无压力的同学建议看一下。该视频还有Part2,讲解比较复杂的如何删除一个二叉树中的节点。

以下是我对这个视频中内容的整理:

@lqt0223
lqt0223 / g.md
Last active March 2, 2017 15:02
05 XML Parsing - Using SAX

XML解析 - Using SAX

本周的编程提高群大作业中涉及到了XML的解析问题。

我在自学JavaScript的过程中,已经使用了N次JSON.parse()这样的函数了。但以前只是这样轻轻松松地调用一下,未去细细思考。其实无论是JSON还是XML还是其他的结构化的文档,其解析的实现方法都是很值得讨论的话题。

尝试思考得深层次一点

在动手开始码本次作业的代码之前,我还在设想自己能不能实现一个自己的XML Parser,但考虑了一下代码量以及需要实现一个完备的Parser所需要考虑的复杂的情形,还是放弃了,转而去寻找合适的库来完成。

@lqt0223
lqt0223 / g.md
Created March 6, 2017 15:12
06 Super tiny static file server using Node.js

Node.js超短代码实现静态文件服务器 

许久不写JS了,今天来留一段自己写得非常精炼的代码。Node.js,后端的。

功能为静态文件服务器,具体指的是:

  • 把本地硬盘上的一个文件夹作为根目录,放到 http://localhost:XXXX/上
  • 通过服务器url访问文件的层级,与本地硬盘上该文件夹中文件的层级完全一样
  • 服务器不作路由,不接受参数,不返回数据,只返回相应位置的文件
@lqt0223
lqt0223 / g.md
Last active March 15, 2017 15:59
06 Thread Interference - from Oracle official documentation

Oracle官方文档节译:Java并发 - 线程干扰

小白初学Java的多线程编程,一下子遇到了海量的新知识点。一方面,Java中要想灵活使用多线程编程,需要了解concurrecy, Thread 等包和类中的很多实现的类的使用方法;另一方面,自己之前学习的比较多的JS是一个单线程的世界,很多多线程背后的原理我是不能理解的。所以这次的文章,用翻译的形式来细读一些基础的Java多线程编程的教程,顺便分享给大家,希望对各位能有帮助。

以下内容翻译自Thread Interference (The Java™ Tutorials > Essential Classes > Concurrency)

线程间干扰

假设有一个简单的类叫做Counter

@lqt0223
lqt0223 / g.md
Last active March 19, 2017 02:15
08 Basic command pattern implementation in Java

设计模式之“命令模式”初体验

起因

今天研究了设计模式里的“命令模式”,起因是自己写的基于Vue的webapp上,需要实现一个允许用户编辑数据时undo/redo的功能。

一开始以为这个实现起来应该很简单,只要用一个列表保存好每次变化的一些参数,再在需要的时候执行出来就是redo,反向执行出来就是undo。但实际开始写之后却发现问题不断,自己的类的拆分不佳,导致多余的代码很多,而且越写自己也越感觉混乱了(大概自己还是太菜了吧)。

于是上网查阅这种undo/redo功能的实现的思路,许多文章提到了“命令模式”(command design pattern),遂研究之。

@lqt0223
lqt0223 / heap.js
Last active April 5, 2017 09:36
12 Implementation of Heap in JavaScript
class Heap {
constructor() {
/* A heap is a tree-based data structure with the following features
- Child nodes for a node in the heap is always greater(or smaller) than
the parent node(which can be categorized as min-heap or nax-heap)
- A heap is a complete tree. Because of this feature, we can keep records
of a heap by array and refer to all nodes by index manipulation
- For example, in the case of a binary heap where a node has an index of
i, then its children indexes should be ((i + 1) << 1) - 1 and
(i + 1) << 1
@lqt0223
lqt0223 / trie.js
Last active April 6, 2017 02:22
09 Implement of the data structure - Trie in ES6 JavaScript
/*
用JavaScript实现字典树(Trie)。
该数据结构是由节点组成的树,每个节点的数据是一个单字
每个节点拥有N个字节点,为一对多的关系
*/
// 字符节点类
class Node{
@lqt0223
lqt0223 / graph.js
Last active April 6, 2017 02:22
15 Basic graph implementation, DFS & BFS traversal in JavaScript
// unweighted undirectional graph implementation
// TODO directional and weighted graph implementation; travelling salesman's problem
class Graph {
constructor() {
this.vertices = [];
this.edges = [];
}
add(){