求1+2+…+n

2010年12月1日 没有评论

题目:求1+2+…+n,
要求不能使用乘除法、for、while、if、else、switch、case等关键字以及条件判断语句(A?B:C)。

一种java的实现方式,主要是使用异常来控制。

public class  T{
	//存放结果
	public static int rs=0;
 
	public static int sum(int n){
		try{
			//除0错误
			int i=1/n;
		}catch (Exception e) {
			return rs;
		}
		rs+=n;
		return sum(--n);
 
	}
 
	public static void main(String[] agrs){
		System.out.println(sum(100));
	}
}
分类: 高级民工 标签: ,

最近的面试经历

2010年11月25日 1 条评论

  最近一个月大大小小的面试也参加过10次左右了。有发挥比较好的也有被打击到的,不过总的来说还是长了见识。面试一般就三种情况,要嘛你看企业不顺眼,要嘛企业看你不顺眼,或者彼此都看不顺眼。总的来说搞IT这行大公司对基础要求比较高,小公司对实践要求相对高些,希望来就能上手干。

  选择公司上我个人觉得还是要想好自己的发展方向学会投资,不一定在工资上有太高的要求。也许进一个小公司,薪水低点但可以解除到核心的东西;进大公司薪水高,但往往大公司都相对稳定,在技术方面都有自己的固有流程,很难接触到整个项目,而且在职位晋升方面也不是很容易,很多时候都需要你上面的人走了,留出空位才有升职的可能。另外对于公司的评价,我发现在网上搜索出来的关于公司的评价一般都是相当的差,可能是因为那些在公司里受了委屈什么的人才会更多的到网上评论的原因造成的吧。

  参加了10来次IT行业的笔试,我唯一感到郁闷和不理解的就是有些公司笔试考的编程题,考非算法方面的。做java方面个人感觉要让自己在纸上完整的写出一个应用那简直是让人发疯的事情。对于此类问题我的解决方法是写出思路不写代码。。

分类: 生活 标签:

Android FTP命令行客户端

2010年9月26日 2 条评论

  虽然busybox中有ftpget与ftpput两个关于FTP的命令,但其功能太单一交互性也不强。还是linux下的ftp命令好用些。
  下面是把debian中的netkit-ftp移植到android中,netkit-ftp源码:http://packages.debian.org/source/lenny/netkit-ftp
  使用NDK R4编译,在编译过程中遇到一些错误,如:getpass()函数在android中不支持,rindex()不知为何也无法使用。getpass()最后改用fgets()代替,rindex()使用strrchr()代替。

编译好的netkit-FTP:ftp
修改后的netkit-FTP源码:ftp-source

分类: 高级民工 标签: ,

android读写内存

2010年7月6日 2 条评论

 前段时间由于特殊需要想修改android的property,即使用getprop与setprop命令所操作的属性。虽然提供了setprop命令,但这个命令无法修改以ro.开头的属性。android基于linux,那么读写内存就可以通过/dev/mem这个设备文件办到。下面是一个测试,用于读写ro.secure属性的值。

#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <memory.h>
#include <unistd.h>
#include <string.h>
 
#include <sys/mman.h>
#include <sys/types.h>
 
#include "ro.h"
 
#define	MEM_DEVICE	"/dev/mem"
 
 
int main()
{
	long size=1024;
	long offset=0x13400;//physical address of "ro." ,android 2.1 on emulator
	long offset_cut;
	long page_size=getpagesize();
	prop_info *data;
 
	//offset should be a multiple of the page size 
   	offset_cut=offset%page_size;
	offset-=offset_cut;
 
	//initialize
	data=init(size+offset_cut,offset);
 
	data+=offset_cut/sizeof(prop_info);
 
	printf("prop: %s=%s\n",data->name,data->value);//read
 
	memcpy(data->value,"0",1);//write
 
	printf("prop: %s=%s\n",data->name,data->value);
 
	munmap(data, size+offset_cut);
	return 1;
}
 
prop_info *init(long size,long offset)
{
	int fd;
	prop_info *data;
 
	fd=open(MEM_DEVICE,O_RDWR);
 
	if(fd<0)
 
	{
 
		printf("open file error!\n");
 
		close(fd);
		exit(-1);
 
	}
 
 
 
	data=(prop_info *)mmap(0, size, PROT_READ | PROT_WRITE, MAP_SHARED, fd, offset);
 
 
	if(data == MAP_FAILED){
		printf("map failed\n");
		close(fd);
		exit(-1);
	}
	close(fd);
	return data;
 
}

编译使用NDK,复制NDK中的例子修改后即可。ro.存放区域的内存物理地址为0×13400,测试在android 2.1 on emulator下。
虽然在模拟器中测试一切正常,但放到我的milestone中就出问题,报总线错误。
在milestone中操作/dev/mem时如命令:

cat /dev/mem /sdcard/mem

会出现错误,bad address!

不知道是因为milestone锁了一些东西,还是arm读取时所谓的对齐造成的影响。希望知道的留下答案,谢过!

源码下载:download 

分类: 高级民工 标签: , ,

关闭Milestone的四个触摸键背景灯

2010年5月16日 2 条评论

晚上用milestone看小说时,屏幕下方的四个触摸键实在是太刺眼了。下面的方法可以将这四个触摸键背景灯关闭.
需要root权限,最好使用Gscript来执行这样方便些。

关闭

echo 0 >/sys/devices/platform/button-backlight/leds/button-backlight/brightness
chmod 000 /sys/devices/platform/button-backlight/leds/button-backlight/brightness

打开

chmod 644 /sys/devices/platform/button-backlight/leds/button-backlight/brightness
echo 255 >/sys/devices/platform/button-backlight/leds/button-backlight/brightness

开关LED的shell:

#! /sytem/bin/sh
mpath="/sys/devices/platform/button-backlight/leds/button-backlight/brightness"
pr=`ls -l $mpath|busybox awk '{print $1}'`
if [ $pr != "----------" ]; then
	echo 0 >$mpath
	chmod 000 $mpath
	echo "LED closed"
else
	chmod 644 $mpath
	echo 255 >$mpath
	echo "LED opened"
fi

echo到/sys/devices/platform/button-backlight/leds/button-backlight/brightness这个文件里的值其实就是LED的亮度值,可以根据需要修改。
/sys/devices/platform/ 这个目录里还有控制键盘背景灯的相关文件可以用同样的方法设置亮度。

当然如果你想更方便一点可以下载LEDshack这个app。

分类: 高级民工 标签: ,