编程语言

用R做一些很酷的事情

r 用来做数据统计、分析和绘图。 但是 r 也可以做一些其他 cool 的事情,譬如计算微分,譬如生成随机数。

抽样方法

sample() 函数可以用来抽样, 也可以用来模拟随机事件,譬如:

Tags: 

Putty中文乱码

使用 putty 连接服务器的时候,有时候会遇到中文乱码问题。大体思路就是, putty 客户端的编码和服务器编码一致。首先,首先 me 们得知道服务器使用的编码, 可以通过下面命令查看:

  1. $ echo $LANG $LANGUAGE

Tags: 

Java序列化

先看一段代码:

Tags: 

一个 Servlet 的小例子

Servlet 在 Java Web 的 MVC 模型中主要担当控制器的角色,然而 Servlet 却不仅仅只能做控制器。最初动态页面技术是 CGI,每过来一个 url 请求,调用一个对应的 cgi 程序,也就是创建一个子进程;该子进程负责生成 html 文档然后传送给浏览器等客户端。cgi 程序的缺点就是每一个请求都要创建进程,占用资源比较多,响应效率也比较低,后来 Java 就有了 Servlet 的技术。Servlet 可以说和 CGI 类似,是将 url 请求交给对应的 Java class 处理,在第一次使用的时候加载内存和初始化,后面相同的请求则复用该 class 。

担当 View 角色的 JSP,实际上也是在 web 容器中生成了相应的 servlet,客户端接收到的 html 文档就是对应的 servlet 输出出来的。在 MVC 中担当视图的 JSP 应该将业务逻辑(比如将用户名和密码插入数据库和判断等)交给 Model 层,而自己完全负责显示数据。Servlet 可以担当 Model 的作用,虽然在 MVC 中其不需要那么做。

Tags: 

java并发编程

不堪回首的面试中,几乎都有问 Java,或是几乎都在问 Java,O__O"… Java 在企业中使用的太多,更重要的也许是因为它 open source 勒。相对来说,c++ 就不大成功,语言极其复杂;而 c# 的可移植性则是它的最大问题,虽然 linux 或是 mac 下也有移植的项目 Mono 。本篇就是关于 Java 并发多线程的部分,因为 me 最初面试的时候,人家问的就是多线程,而且 me 回答的很不好,O__O"…

  1. 创建线程
  2. 线程池
  3. 线程本地存储

A. 创建线程

Java 中创建线程有三种方式,一种是继承 java.lang.Thread 类,重写其中的 public void run() 方法;另一种是实现 java.lang.Runnable 接口,同样重写 public void run() 方法。这两种线程执行方法是不带返回值的,所以 java 另外提供了一种 Callable 的创建方法。

Tags: 

名不见经传的od命令

查看文本文件可以使用众多 app,也可以使用命令 cat、less、more、tail、head 等。然而对于非文本文件来说,前面的方法往往力不从心。而且存在一些场景,文本文件我们看不清楚真相,譬如 \r \n 这些空白字符。我曾经就遇到过一个在mac下多行显示的文本在windows下看是一行。当然这个问题更多的是不同系统换行符的差异。我还遇到另外一个场景,就是文本文件太大,有 200+M,如果用文本工具还未打开就卡死,真的很捉急。

这里就介绍一个查看文件的利器 —— od 。

让我们先一睹其主要用法:

Tags: 

pkill的简单实现

life is short.

生活中遇到一个问题:我要删除进程,然而我并不知道 pid, 只知道 name 或是 name 的一部分,譬如 nginx、 node 等。 如果有 pid 的话,直接 kill -9 pid 就可以了,现在只知道 name,那我想到的是首先在进程 table 中搜索一把,找到 pid 然后一一删除。因为需要经常操作,所以我就写了个 killp 的工具。后来不经意间发现原来 linux 下本就有个 pkill 的工具,名字还真是高度相似,←_←

pkill 的功能比较强,可以带很多参数,我也不想一一介绍,i dont care。我现在只知道 pkill yes 就可以删除所有 name 为 yes 的进程。如果想了解更多,直接 man pkill 去吧。

下面是我的 killp 的实现,一个 shell 脚本,供参考:

Tags: 

golang md5计算

消息摘要算法(message degist)

md5是经典的“消息摘要”算法之一,也就是生成一段文本的一个 hash 值,位数固定 128 位(16个字节)。消息摘要算法的几个特点:

  1. 单向不可逆:根据文本很容易计算hash值,但是根据hash值很难反推出文本;
  2. 反碰撞:给出既定的hash值,很难找到一段文本也是同一个hash值;

golang 计算 md5 方法甚是简单,可以看下面的 demo:

Tags: 

golang list sort

golang 的序列化容器有数组、slice 和 list,前两个是语言内置的,后一个是标准库提供的。用数组的场景并不多,因为其最大缺点是 —— 长度固定,所以我们更倾向于会动态增加长度的 slice 和 list。slice 底层是数组,所以是连续存储的结构;list 底层是链表,非连续存储结构。slice/list 相当于 java 中的 ArrayList/LinkedList ,或是 c++ 中的 vector/list。不同的储存结构结果就决定了它们的优缺点:

  • slice:特点:连续存储;优点:访问(第i个元素)方便,直接访问;缺点:删除和添加(第i个)元素不方便,需要大量移动数据;
  • list:特点:非连续存储;优点:删除和添加元素方便,不需要大量移动数据;缺点:访问(第i个元素)不方便,线性复杂度;

前面都是在说废话,现在入正题。排序算法很多:冒泡排序、希尔排序、堆排序、快速排序以及基数排序等。一般语言都提供快速排序 quicksort/qsort/sort 算法,其平均时间复杂度为 O(nlogn),采用的是递归分治的思想。关于快速排序可以看这篇文章

Tags: 

golang时间处理

时间处理是每一门语言的必备技能。关于时间处理其实有两部分,一个是日期相关的,一个是时间间隔相关。首先我们看下如何获取时间间隔,因为对于一个号称高性能的语言来说,对每一个 feature 的执行时间进行统计分析是非常重要的。

Tags: 

Pages