今天,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()); } }