我应该比什么?

今天,yl打了一个电话过来,问我工作如何?我说就是原来说的那家公司,她问我工资待遇如何,我说不怎么样,她又问过了四k没有,我说没有,然后她就说那谁谁谁都4.8k,去了步步高教育电子,也就是我之前一直想去的那家公司,说实在的,我当时听到这个消息真的很不是滋味,就像你暗恋多年的妹子表白,十动然拒,选择了一个你看起来并不如你的男生,心里一定很气愤,平抚下心情,我发现如果我不知道这个消息,我觉得现在也不错啊,不是吗?虽然规模不如步步高,但是给你提供了很好的平台啊,也非常地重视你啊,不是吗?目前的工资真的不能说明什么,一定要在这一年内努力提升自己,一年以后要让现在的工资成为一个零头。要攀比,但不是过去,不是现在,而是更远的将来。

流水账:就职第一天

今天是就职第一天,首先以计流水账的方式记录一下,早上退掉床位,住了8天的时间,但也得按照10天的标准咯,还好我的收据丢掉了也还是能够返回押金咯。中午通过微信打的+快的打车从白石洲到公司,不仅不用花钱 ,司机倒给我10块钱(微信返15,快的反13,而计价器上只需18)。哈哈,打车司机还倒给钱?有没有一种毁三观的感觉?住的地方就在腾讯大厦旁边,中午盛哥带我去吃了个饭,对面是还有2美女,是人事方面的。我他妈的叫人家姐姐,结果后来发现原来有一个比我还小两个月。。。。。巨汗。

下午去办理的入职手续,办工行卡等等,见的人多了,好多都忘记了。办完手续给我拿了台电脑,那个配置实在一般,我直接格掉,装了win7.部署好环境,然后就到了晚上,有些事情真的该掌嘴,说研发部今晚聚餐,盛哥叫我去点餐,说人均消费50左右,然后发了一个他们那儿的热门菜给我,我过去直接点了一通,也没有问价格,尼玛就被那个小儿给坑大了幸亏后面没有再点了,一共吃了5000多,人均消费100多了。真的不知道动动脑子,次奥在这样下去,没得救了,不晓得盛哥付钱的时候怎么想的,据说后来寒总过来还加了几道菜,估计是吃的不怎么好,点菜还真的需要本事啊,估计下次再也不敢让我去点菜了吧。晚上回到宿舍铺床,换了一个房间,其中还出现特2b的一句回复,完全没经过大脑,嘴巴顺口就开了。具体事情我都不好意思说,说了估计都会说我是个傻子,神经病。(想着我都只想打个底洞钻进去)

今天的流水账就是这些。以后若无特殊情况每日一记。反正写在这里也没人看,若干年后自己再慢慢回忆。这是我最想要的,如果有缘看到希望不要感觉怪异,这只是真实的我。

 

反转单向链表

嗯,首先,说一件小事,昨天还在犹豫盒子支付还是海泰康,今天盒子支付经理给我回电话了,说他们也同样能达到海泰康给出的薪资。确实挺欣慰的。能力能够得到公司的认可,说明在深圳,真的是凭能力说话。话说昨天的一道笔试题,用c++实现单项链表的反转链表。我已经快3年没有写过c++了,写的一塌糊涂,不是思想不会而是语法几乎忘记了。
想到这个问题,我立马想到的一个思路就是遍历链表,用一个指针指向最尾节点,然后重新遍历,从第一个节点开始,将每一个节点插入最后一个节点末位。
步骤如下:
12345
23451
34521
45321
54321
今天没事实现了下(写了这么久的java,忽然转到写c++很不习惯,呵呵)

#include<iostream>
#include<set>
using
	namespace std;
struct	node{
	int data;
	 node *next;
};

//找到最后一个节点
node* findlast(node *head){
	while(head->next){
		head=head->next;
	}
	return	head;

}
//把目标结点插入到最后一个节点后面
void insert(node *aim,node * last){
	if(aim==NULL){return;}
	if(NULL==last->next){
		last->next=aim;
		aim->next=NULL;
	}else{
		node *temp=last->next;
		last->next=aim;
		aim->next=temp;
	}
}

//反转函数
void reverse(node *head){
	node *last=findlast(head);
	while(head!=last){
		node *temp=head->next;
		insert(head,last);
		head=temp;
	}
	cout<<head->data;
}

int main(){
	node *nd=NULL,*head=NULL;	
	for(int i=0;i<5;i++)
	{
		node *temp=(node *)malloc(sizeof(node));
		temp->data=i;
		temp->next=NULL;
		if(NULL!=nd){
		   nd->next=temp;
		   nd=temp;
		} else{
		   head=nd=temp;
		}	 
 	}

	reverse(head);
	system("pause");
return 0;
}

关于最近找工作

这些天发生了很多事情。。。。

一直以为,自己能够去BAT之类的企业,可是,在经历过网上投递的简历的过程,没有一家曾经一直看好的大型企业给我回电。包括小米,果壳网,douban,金山,华为,联想等等, 个中滋味谁能懂?我也在反思。既然不能选择好的企业,那就选择自己想去的城市,在微信上看到eebbk的现场面试,我想都没多想,22号开题答辩完,第二天我就坐高铁赶到深圳,租了一个床位,20元一天,就开始了找工作之旅。

首先安顿好后,我借助百度地图来到了eebbk的面试地点。在填了一些表格,提交简历之后,在一个房间等候了一段时间,然后就是和技术面,技术面问了我很多关于android的知识,问我有没有android中间件的开发,我当然没有相关的开发经验,结果没戏。晚上回到宿舍,有一家叫盒子支付的创业公司邀我面试,过去做了下笔试题,感觉做得并不好,不过和技术经理面谈停愉快得。也过了,不过是作为实习岗去的,月薪是2k,可以包住。一开始,真的接受不了,2k的工资在这边租房都不够,不过看到移动支付的行业我觉得是有前景的,也就答应了,但10天内给他答复具体的时间,顺便看一下其他的工作机会,晚上在网上看到27号有人才招聘会。

第三天,杨怀林就过来了,原本他是准备和我一道过来的,但是不晓得他有什么事情,就退掉了,他过来在网上投的简历也一个电话也没有回。上午去了ob哥那儿玩了下,下午我们又去了一趟,深圳湾,其实在前一天我也去过,一个人去的,在车上我想了很多,为什么要来这座城市,是工资或者是小时候他没有带我过来?都不是,是海和风。我喜欢这里的环境,不似长沙那样酷热或寒冷,也不似北京那样干燥和地域歧视。

第四天,我和杨怀林去参加了深圳人才市场的招聘会。人很多,几家招聘android的公司我都去面试了,结果都让我去复试,其实在那儿招聘的公司大都不怎么样。我就选择了南山区的一家叫做海泰康的公司,和我们一起竞争的人也有很多,我由于去参加一个小笔试去了,只有怀林参加了他们的笔试,他电话叫我下去帮他做题目,我也就下去了,其实当时我已经准备去盒子支付了的。但是被杨怀林一怂恿就去参加海泰康的面试了,他们之前是一家做芯片,微处理器的公司,现在准备在智能盒子方面发力,主要是面向低层嵌入式的。这也是我做android需要加强的地方,上层应用我觉得没什么太大问题,但对于android框架我其实并不熟悉,也想学习一下底层的东西。抱着这个想法我去了那家公司面试,面试结果很顺利。也答应录用,我当时也一直在犹豫是去盒子支付还是在这里,后来这边给我提供的工资是3.5k ,包住宿。相比优势就明显了。后来我打电话给盛哥(盒子支付面我的那个),把想法告诉了他,其实如果盒子支付能够稍微给我涨点工资,我大概也就还是会选责盒子,毕竟是第一家能看上我(也是我能够看上的公司),盛哥说帮我问问人事,再回复,估计后来没戏了。

再说说住宿吧,住在这里有大6天了,这里都是20出头刚出来找工作的人,大部分是高中毕业后学习一门技术谋生的,虽然不知道对方名字,但相处的还算融洽,有一个高中毕业后去培训了3个月的游戏开发,现在从事flash游戏,其实他对技术是很着迷的那类,每天看他不是知乎就是csdn,我都没有他逛得多,也关注流行技术和框架,我再想要是当初我没考上大学也会不会是这样呢。还有一个大学生,胖胖的,在我隔壁床的下床,做的是物流专业,每周工作6天,目前工作1年了,我的下床是一个厨师,每天起得很晚,而最奇葩得是我隔壁床上铺,他好像没什么正式工作,看他有时在看一本宝石鉴定方面得书。哦 还有一个搞.net的 ,一个做通讯行业的,我们这个房间一共8个人。隔壁房间貌似还有一个程序员,应该是做java的,目前也是在找工作,上次去晾衣服路过,居然听他在全英文电话面试,顿时觉得自己。。总之这是一个鱼龙混杂的地方,也是让我初次接触到社会的残酷。

利用java反射机制实现对象值拷贝

首先需求是这样的 ,我把它简化一下:

User user1=new User();
user1.setUserName("wxn");
User user2=new User();
user2.setUserName("kkkk");
User user3=user2;

接下来的操作我想让user2中的值和user1中的值全部相等。我们知道可以通过 user2=user1.clone()方法去获得一个新的对象,这种方法的详细介绍在这里可以学习。http://www.cnblogs.com/yxnchinahlj/archive/2010/09/20/1831615.html

但是这样clone出来的是一个新的对象,user2就是user1的一个新对象的拷贝,虽然user2中的值可以和user1中的值相等,但是 user3就已经不是user2之前的对象了,我需要user3中的值也跟着改变。

于是最简单的方法就是在User类中增加一个方法

public void copy(User user){
    this.setUserName(user.getUserName);
    this.setUserId(user.setUserId);
     .....
}

如果user中的属性太多怎么办?那写起来太麻烦了,除了方法名get和set有区别之外没什么区别, 于是我想起了之前看过的java反射机制来批量处理,顺便巩固一下java的反射机制,实现代码如下

public void copy(User user) {
//获得User类中所有的方法
		Method[] methods = user.getClass().getMethods();
		try {
		for (int i = 0; i < methods.length; i++) {
				String mName = methods[i].getName();
				if (mName.startsWith("set")) {
					String nName =null;
					//若为boolean的属性则没有get方法 只有 isXXX方法
					 if(boolean.class.equals(methods[i].getParameterTypes()[0]) ){
						  nName=mName.replace("set", "is");
					  }	else{
						  nName=mName.replace("set", "get");
					  }
					Method method = user.getClass().getDeclaredMethod(nName,
							null);
					methods[i].invoke(this, method.invoke(user, null));
				}

			} 
		} catch (IllegalArgumentException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IllegalAccessException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (InvocationTargetException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (NoSuchMethodException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

全部代码如下


import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

/**
 * 
 * @author ahsiu
 * 
 */

public class User {
	private int userId;
	private String userName;
	private String password;
	private String email;
	private String phone;
	private int loginState;
   private boolean flag;
	public int getUserId() {
		return userId;
	}

	public void copy(User user) {
		Method[] methods = user.getClass().getMethods();
		try {
			for (int i = 0; i < methods.length; i++) {
				String mName = methods[i].getName();
				if (mName.startsWith("set")) {

					String nName =null;
					//若为boolean的属性则没有get方法 只有 isXXX方法
					 if(boolean.class.equals(methods[i].getParameterTypes()[0]) ){
						  nName=mName.replace("set", "is");
					  }	else{
						  nName=mName.replace("set", "get");
					  }

					Method method = user.getClass().getDeclaredMethod(nName,
							null);
					methods[i].invoke(this, method.invoke(user, null));

				}

			}
		} catch (IllegalArgumentException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IllegalAccessException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (InvocationTargetException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (NoSuchMethodException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	public void setUserId(int userId) {
		this.userId = userId;
	}

	public String getEmail() {
		return email;
	}

	public void setEmail(String email) {
		this.email = email;
	}

	public String getPhone() {
		return phone;
	}

	public void setPhone(String phone) {
		this.phone = phone;
	}

	public int getLoginState() {
		return loginState;
	}

	public void setLoginState(int loginState) {
		this.loginState = loginState;
	}

	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}

	public String getUserName() {
		return userName;
	}

	public void setUserName(String userName) {
		this.userName = userName;
	}

	public boolean isFlag() {
		return flag;
	}

	public void setFlag(boolean flag) {
		this.flag = flag;
	}

	public static void main(String[] args) {
		User user1=new User();
		user1.setUserName("wxn");
		User user2=new User();
		user2.setUserName("kkkk");
		User user3=user2;
		System.out.println(user1.getUserName());
		System.out.println(user2.getUserName());
		System.out.println(user3.getUserName());	
		System.out.println("");
		user2.copy(user1);
		System.out.println(user1.getUserName());
		System.out.println(user2.getUserName());
		System.out.println(user3.getUserName());
		System.out.println("");
		user3.setUserName("ahsiu");
		System.out.println(user1.getUserName());
		System.out.println(user2.getUserName());
		System.out.println(user3.getUserName());
	}
}