前面一周都在憋论文,终于到昨天出了一版,虽然还有很多工作要做,也准备要休息两天再改了。今天试着写了几道面试题,有段时间没有写代码了,生疏很多了,这里记录一下用golang解决wordladder这道题吧。

这道题理解很简单,

Given two words (beginWord and endWord), and a dictionary’s word list, find the length of shortest transformation sequence from beginWord to endWord, such that:
Only one letter can be changed at a time
Each intermediate word must exist in the word list
For example,

Given:
beginWord = “hit”
endWord = “cog”
wordList = [“hot”,”dot”,”dog”,”lot”,”log”]
As one shortest transformation is “hit” -> “hot” -> “dot” -> “dog” -> “cog”,
return its length 5.

Note:
Return 0 if there is no such transformation sequence.
All words have the same length.
All words contain only lowercase alphabetic characters.

阅读全文 »

一般来说,使用qsort能得到很快的速度,这也是它称之为快速排序的原因。但是在一些特定的情况下,可以继续特高快排的速度,今天这种情况就是:

  • 需要排序的数量特别大,如对百万级别的数据排序
  • 硬件能支持多线程(多核)

如果使用的是多核的机器,可能利用起多核计算的优势来加速排序,思路比较简单,就是将一个大的数组切分成和与机器逻辑线程数量相等的小数组再进行排序(小数组的个数也可以略多,但是过多的切分会导致频繁的线程调度)。下面的代码主要来自APUE 第11章线程屏障部分的示例代码,我只简单修改了一部分并添加上注释便于理解。

阅读全文 »

上午在社区看到有人分享自己的面试经历,正好有两道很有意思的题目,这里自己试试。

第一个是关于C中多进程的,fork的问题;第二个是位操作的,32位int按位反转的问题。

fork的问题

这个问题其实比较简单,就是考察对fork的理解。在apue的笔记中已经比较了解了。使用fork创建的新进程会得到父进程的代码、数据、堆、栈、缓存区和打开的文件列表的拷贝(实际上使用了写时复制COW技术,并不是一开始就执行父进程的完全副本),知道这个之后就能分析这个问题了,问题如下:

有下面的代码:

#include <stdio.h>
#include <unistd.h>

int main(void) {
int i;
for (i=0; i<2; i++) {
fork();
printf("-");
}
return 0;
}

假设fork()总是成功的,问打印出几个“-”?

根据上面的分析,在主线程运行到fork()的时候,产生了子进程,子进程有和父进程相同的i值,并在获得运行时接着从fork()往后运行,按照这样分析,主进程会fork出两个子进程,第一个子进程会fork出一个子进程,总共4个进程,主进程和第一个子进程打印两个”-“,后面两个进程分别可以打印一个”-“。这样分析可以打印出6个”-“。但显然这个问题没有这么简单。

阅读全文 »

今天给科委的项目加上自动上传的功能,把之前设计的自动功能彻底修改了。由于这个项目已经好几个月没有动了,把原来的功能重构之后,在调试模式下运行程序会报异常,System.TypeInitializationException。这个异常在运行时才会报错,编译生成项目是成功的。

以前开发时也遇到过这个问题,一直很奇怪,因为抛出异常的地方在整个项目的入口:

static class Program
{
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new MainForm()); // 在这里抛出异常
}
...
}

从VS的直接报错里面看不出什么有用的东西,查不到到底是哪里出的问题。可以知道的是,是构造 MainForm 类的实例的时候出了问题。

阅读全文 »

https和SSL介绍

对于http和https,一般人都不太陌生,随着互联网的发展,这几年越来越的站点开始进行全站https化。

早期只有牵涉到网上购物、网上银行这样的站点才会开启https,现在随着硬件性能的不断提升,全站起用https的开销已经可以接受了,所以最近两年,越来越多的大站开始向全站https过渡。比如前段时间去参加的infoq的一个百度技术分享会,就介绍了百度在全站转向https中的经验;像知乎也开了全站https。一般来说开启https的站点给用户一种放心的感觉,Chrome地址栏那一把绿色的锁在很多人心中就代表“安全”。

https简单地说就是http和ssl/tls的结合,所以https一般看作是http over ssl, http over tlshttp secure。http协议我们知道是一个不加密的,在计算机网络课程上一般都会进行详细的介绍,三次握手,四次挥手这些都比较熟悉了。但由于https传输的内容是不加密的,在网络上的嗅探、抓包工具抓到的数据可以直接被中间人解析甚至篡改!最典型就是无耻运营商流量劫持,可以说很多的站点趋向于全站https改造就是为了解决无法无天的运营商劫持问题。

ssl协议定义在应用程序协议(http,ftp等)和TCP/IP 协议之间,提供数据安全性分层的机制,SSL为TCP/IP连接提供数据加密、服务器认证、消息完整性验证以及可选的客户机认证。它的主要作用好似提高应用程序之间数据的安全性,对传送的数据进行加密和隐藏,确保数据在传送中不被改变。

ssl协议

阅读全文 »

整理来自英文版:https://github.com/tpunt/PHP7-Reference 和官方迁移文档
整理的中文版本: https://github.com/wuxu92/PHP7-Reference-cn

PHP 7 在 2015年12月3日 发布了. 它带来了大量的新特性,改变和一些不向后兼容的变更(backwards compatibility breakages),这些改变概述如下:

性能

特性

改动

FAQ

性能

毫无争议,PHP 7带来的最大的变化就是极大的性能提升,这得益于对Zend引擎的重构,新的引擎使用了更加紧凑的数据结构和更少的堆分配/回收操作。

在实际项目使用中,性能的提升效果不是固定的,虽然很多应用在使用PHP 7之后活的了超过100%的性能加速,同时还只使用更少的内存消耗!

重构后的代码基础也为将来的优化(比如JIT编译)提供了更多的可能,所以,可以预计在接下来的PHP版本仍然会看到不错的性能提升。

阅读全文 »

  1. 若有名为 owner (小写,未导出)的字段,其获取器应当名为 Owner(大写,可导出)而非 GetOwner。大写字母即为可导出的这种规定为区分方法和字段提供了便利。 若要提供设置器方法,SetOwner 是个不错的选择
  2. 按照约定,只包含一个方法的接口应当以该方法的名称加上-er后缀来命名,如 Reader、Writer。
  3. Go中约定使用驼峰记法 MixedCaps 或 mixedCaps
  4. Go的正式语法使用分号来结束语句;和C不同的是,这些分号并不在源码中出现。所以Go并不是没有分号,只是和JS一样会自动添加分号。
  5. 对于字符串,range 能够提供更多便利。它能通过解析UTF-8, 将每个独立的Unicode码点分离出来。错误的编码(非UTF8编码)将占用一个字节,并以符文U+FFFD来代替。
  6. switch 后面没有表达式,它将匹配值为 true 的case,因此,我们可以将 if-else-if-else 链写成一个 switch
  7. 被推迟函数的实参(如果该函数为方法则还包括接收者)在推迟执行时就会求值,而不是在调用执行时才求值。这样无需担心变量值在函数执行时被改变。// 记得JS中setInterval的一个例子吗?
  8. new(T) 会为类型为 T 的新项分配已置零的内存空间, 并返回它的地址,也就是一个类型为 *T 的值
    阅读全文 »

会 話
1. 失礼でしが「しつれいですが」 : 冒昧问一下,打扰一下、失陪,先行离开
2. お名前「なまえ」は。 (升调) 询问名字,请问您的名字是?
3. 初めまして。どうぞよろしくお 願「ねが」いします。 初次见面,请多多关照。
4. こちらわ~さんです。/こちらは山下智久「やました」さんです。日本から来「き」ました。 这是山下智久先生。来自日本。
5. お名前は/おなまえは。 您怎么称呼?

単 語「たんご」
国「くに」 
人「ひと」

阅读全文 »

みんなの日本語 第1課

文 型「ぶんけい」
1.わたしは マイ・ミラーでし.
2.サントスさんは 学生じや ありません
3.ミイーさんは 会社員でしか.
4.サントスさんも 会社員です.

例 文「れいぶん」

  1.  「あなだは」 マイク・ミラーでしか。
      ...はい、「わたしは」 マイク・ミラーでし。

  2.  ミラさんは 学生じでしか。
      ...いいえ、「わたしは」 学生じゃ ありません。

  3.  王さんは エンジニアでしか。
      ...いいえ、王さんはエンジニアじゃありません。医者「いしゃ」でし。

  4. あの 方は どなだですか。
      ...ワツトさんでし。さくら大学の 先生です。

  5. テレサちゃんは 何歳「なんさい」でしか。
      ...9歳です。

会 話「かいわ」

阅读全文 »