- 浏览: 45872 次
- 性别:
- 来自: 上海
最新评论
-
腹黑君:
Erlang不是分布式么。你试试分布式,开几条线程,那肯定很快 ...
erlang入门系列(4) for循环,尾递归 -
腹黑君:
yanyu510 写道可以参考以下代码for(Max, Max ...
erlang入门系列(4) for循环,尾递归 -
yanyu510:
可以参考以下代码for(Max, Max) -> Max ...
erlang入门系列(4) for循环,尾递归 -
fuliang:
搜索提示一般使用trie的结构进行前缀匹配。
基于二分查找的搜索提示实现
文章列表
之前做java开发的时候,遇到进程卡住的情况都会用jstack来打印一个进程里的线程活动情况。到了安卓开发,发现没有这个命令了,很不习惯。
google了一下,发现还是有办法的。
% adb shell ps | grep android.calendar
u0_a6 2596 127 912804 48296 ffffffff b6f62c10 S com.google.android.calendar
2596就是进程ID
% adb shell kill -3 2596
成功的话logcat里可以看到下面这样的输出:
引用I/dalvikvm( 2596): Wro ...
看下面的代码:
String s= "1-2-|4";
for(String str: StringUtils.split(s, "-|")){
System.out.println(str);
}
我期望输出的是:引用1-2
4
但很遗憾,输出的是:
引用1
2
4
换个方法就好了:
String s= "1-2-|4";
for(String str: StringUtils.splitByWholeSeparator(s, "-|")){
System.out.prin ...
log4j DEBUG工具类
- 博客分类:
- java
<%@ page language="java" contentType="text/html;charset=UTF-8"%>
<%@ page import="org.apache.log4j.Level"%>
<%@ page import="org.apache.log4j.LogManager"%>
<%@ page import="org.apache.log4j.Logger"%>
<%@ page import=&q ...
public static void main(String[] args) {
int count=10000;
long start = System.currentTimeMillis();
for(int i=0;i<count;i++){
"abc".split("b");
}
long mid = System.currentTimeMillis();
for(int i=0;i<count;i++){
StringUtils.split("abc",'b'); ...
使用方法:
public static void main(String[] args) {
SimpleTreeFilter filter = new SimpleTreeFilter();
filter.addKeyword("禁词1");
filter.addKeyword("禁词2");
filter.addKeyword("其它禁词");
System.out.println(filter.contains("我是合法的"));
S ...
使用方法:
[root@localhost mping]# ./m.pl 172.16.4.71:11211
ping 172.16.4.71:11211 val=Some value use(2.840ms)
ping 172.16.4.71:11211 val=Some value use(0.874ms)
ping 172.16.4.71:11211 val=Some value use(0.796ms)
ping 172.16.4.71:11211 val=Some value use(0.716ms)
ping 172.16.4.71:11211 val=Some value use( ...
用过百度或GOOGLE的人应该都有印象,当你在搜索框输入一些关键字之后,会提示相关的搜索关键词,比如,我输入"g",会提示"google","gmail"一类以"g"开头的关键词。本文讨论的就是这样的一个功能,在后台算法上应该如何实现。
首先我们会有一个关键词列表,包含了 关键词 和它的搜索次数,如:
good,5
nid,1
google,10
gmail,100
apple, 22
mail,500
把上面的词条是按照编码值从小到大排序,结果如下:
apple, 22,0
good,5,0
google,10,3 ...
因为Erlang里的变量只能一次赋值,所以并没有循环语句,只能用递归。所以所谓的Erlang for循环,也是用递归模拟的。看下面的求和代码:
for(Max, Max,Sum) ->
Sum+Max;
for(First, Max,Sum) ->
Sum2=Sum+First,
for(First + 1, Max, Sum2).
值得注意的是,如果循环次数过多,我们必须使用 尾递归。否则你的内存很快就会用光。尾递归我的理解是,调用了自身后,再没有别的代码要执行,概念上要说清楚还是比较 麻烦,各位意会吧。
下面是一个 非尾递归的示例 ...
erlang并没有switch这个关键词,只有case,来看代码:
#!/usr/bin/env escript
main(Args) ->
[T|_]=Args,
case T of
"1" ->
io:format("1 match ~n");
"2" ->
io:format("2 match~n");
_ ->
io:format("other match ~n")
end.
保存为switch_case ...
事实上erlang没有else这个关键词
#!/usr/bin/env escript
main(Args) ->
[T,T2|_]=Args,
Name=list_to_integer(T),
Name2=list_to_integer(T2),
if
Name==1;Name2==1 ->
io:format("first match ~n");
Name==2,Name2==2 ->
io:format("second match~n");
true ->
...
-module(hello).
-export([start/0]).
start() ->
io:format("hello word~n").
把上面的代码保存为hello.erl,文件名必须跟module名一致,这点跟JAVA是类似的
然后编译:erlc hello.erl
然后运行:erl -noshell -s hello start -s init stop
好的,这样erlang的Hello World总算是完成了。
以下是引申部分:
如果我想给这个start方法传个参数,那怎么办?小改一下
-module(hello).
- ...
我们用下面的方式来取得当前时间的时间戳:
import time
print time.time()
输出的结果是:
1285041535.86
这个结果是1970年到现在时间相隔的秒数
time.time()返回的是浮点数,所以如果需要对时间进行加减的话,就是一个简单的浮点运算
...
VINT 类型lucene给出了定义是一个可变长度的byte组合来表示一个正整数
VInt lucene给出了一个例子表格
Value
First byte
Second byte
Third byte
0
00000000
1
00000001
2
00000010
...
127
0 ...
定时器是个好东西,然而最近发现一个问题,程序运行了一段时间后,Timer就失效了。仔细研究才发现不是Timer失效了,而是异常没有处理,来看一段简单代码
public class Test extends TimerTask {
public static void main(String[] args) throws SQLException, IOException {
long period=5*1000;
Timer timer = new Timer(true);
timer.schedule(new Test(), 0,period);
Syst ...
最近挺想认真学一下python,同时把一些实用的代码和思路跟大家分享一下,也方便自己以后查看。
今天先开个头吧,不一定能写完,写多少算多少。
先列个大纲吧
字符串
类型转换
正则表达式
数组,列表
字典哈希表
文件操作
调用系统命令,可执行程序
网络爬虫
数据库
如果网友觉得上面的大纲不完善,欢迎补充
- 2009-05-30 12:39
- 浏览 778
- 评论(0)