最后
我见过很多技术leader在面试的时候,遇到处于迷茫期的大龄程序员,比面试官年龄都大。这些人有一些共同特征:可能工作了7、8年,还是每天重复给业务部门写代码,工作内容的重复性比较高,没有什么技术含量的工作。问到这些人的职业规划时,他们也没有太多想法。
其实30岁到40岁是一个人职业发展的黄金阶段,一定要在业务范围内的扩张,技术广度和深度提升上有自己的计划,才有助于在职业发展上有持续的发展路径,而不至于停滞不前。
不断奔跑,你就知道学习的意义所在!
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
import java.util.List;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;
import com.suntek.contact.R;
import com.suntek.contact.model.SMSBean;
/**
-
短信适配器
-
@author Administrator
*/
public class SMSAdpter extends BaseAdapter {
private LayoutInflater mInflater;
private List smsList;
private Date date;
private SimpleDateFormat sdf;
public SMSAdpter(Context context) {
mInflater = LayoutInflater.from(context);
this.smsList = new ArrayList();
this.date = new Date();
this.sdf = new SimpleDateFormat(“MM/dd HH:mm”);
}
public void assignment(List smsList) {
this.smsList = smsList;
}
public void add(SMSBean bean) {
smsList.add(bean);
}
public void remove(int position) {
smsList.remove(position);
}
@Override
public int getCount() {
return smsList.size();
}
@Override
public Object getItem(int position) {
return smsList.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
if (convertView == null) {
convertView = mInflater.inflate(R.layout.sms_list_item, parent,
false);
holder = new ViewHolder();
holder.name = (TextView) convertView.findViewById(R.id.name);
holder.count = (TextView) convertView.findViewById(R.id.count);
holder.date = (TextView) convertView.findViewById(R.id.date);
holder.content = (TextView) convertView.findViewById(R.id.content);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.name.setText(smsList.get(position).getAddress());
holder.count.setText(“(” + smsList.get(position).getMsg_count() + “)”);
this.date.setTime(smsList.get(position).getDate());
holder.date.setText(this.sdf.format(date));
holder.content.setText(smsList.get(position).getMsg_snippet());
convertView.setTag(holder);
return convertView;
}
public final class ViewHolder {
public TextView name;
public TextView count;
public TextView date;
public TextView content;
}
}
Activity界面
/Contact_Demo/src/com/suntek/contact/SMSListActivity.java
package com.suntek.contact;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListView;
import com.suntek.contact.adapter.SMSAdpter;
import com.suntek.contact.model.SMSBean;
import com.suntek.contact.util.BaseIntentUtil;
import com.suntek.contact.util.RexseeSMS;
/**
-
短信列表
-
@author Administrator
*/
public class SMSListActivity extends Activity {
private ListView smsListView;
private SMSAdpter smsAdpter;
private RexseeSMS rsms;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.sms_list_view);
smsListView = (ListView) findViewById(R.id.sms_list);
smsAdpter = new SMSAdpter(SMSListActivity.this);
rsms = new RexseeSMS(SMSListActivity.this);
List list_mmt = rsms.getThreadsNum(rsms.getThreads(0));
// 注入短信列表数据
smsAdpter.assignment(list_mmt);
// 填充数据
smsListView.setAdapter(smsAdpter);
// 短信列表项点击事件
smsListView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
Map<String, String> map = new HashMap<String, String>();
SMSBean sb = (SMSBean) smsAdpter.getItem(position);
map.put(“phoneNumber”, sb.getAddress());
map.put(“threadId”, sb.getThread_id());
BaseIntentUtil.intentSysDefault(SMSListActivity.this,
MessageBoxList.class, map);
}
});
}
}
查询短信的工具类:
/Contact_Demo/src/com/suntek/contact/util/RexseeSMS.java
package com.suntek.contact.util;
import java.util.ArrayList;
import java.util.List;
import android.content.ContentResolver;
import android.content.Context;
import android.database.Cursor;
import android.net.Uri;
import com.suntek.contact.model.SMSBean;
public class RexseeSMS {
public static final String CONTENT_URI_SMS = “content://sms”; // 短信
public static final String CONTENT_URI_SMS_INBOX = “content://sms/inbox”;// 收件箱
public static final String CONTENT_URI_SMS_SENT = “content://sms/sent”; // 发送
public static final String CONTENT_URI_SMS_CONVERSATIONS = “content://sms/conversations”;
public RexseeSMS(Context mContext) {
this.mContext = mContext;
// TODO Auto-generated constructor stub
}
public static String[] SMS_COLUMNS = new String[] { “_id”, // 0
“thread_id”, // 1
“address”, // 2
“person”, // 3
“date”, // 4
“body”, // 5
“read”, // 6; 0:not read 1:read; default is 0
“type”, // 7; 0:all 1:inBox 2:sent 3:draft 4:outBox 5:failed
// 6:queued
“service_center” // 8
};
public static String[] THREAD_COLUMNS = new String[] { “thread_id”,
“msg_count”, “snippet” };
private Context mContext;
public String getContentUris() {
String rtn = “{”;
rtn += ““sms”:”" + CONTENT_URI_SMS + “”";
rtn += “,“inbox”:”" + CONTENT_URI_SMS_INBOX + “”";
rtn += “,“sent”:”" + CONTENT_URI_SMS_SENT + “”";
rtn += “,“conversations”:”" + CONTENT_URI_SMS_CONVERSATIONS + “”";
rtn += “}”;
return rtn;
}
public String get(int number) {
return getData(null, number);
}
public String getUnread(int number) {
return getData(“type=1 AND read=0”, number);
}
public String getRead(int number) {
return getData(“type=1 AND read=1”, number);
}
public String getInbox(int number) {
return getData(“type=1”, number);
}
public String getSent(int number) {
return getData(“type=2”, number);
}
public String getByThread(int thread) {
return getData(“thread_id=” + thread, 0);
}
public String getData(String selection, int number) {
Cursor cursor = null;
ContentResolver contentResolver = mContext.getContentResolver();
try {
if (number > 0) {
cursor = contentResolver.query(Uri.parse(CONTENT_URI_SMS),
SMS_COLUMNS, selection, null, "date desc limit "
- number);
} else {
cursor = contentResolver.query(Uri.parse(CONTENT_URI_SMS),
SMS_COLUMNS, selection, null, “date desc”);
}
if (cursor == null || cursor.getCount() == 0)
return “[]”;
String rtn = “”;
for (int i = 0; i < cursor.getCount(); i++) {
cursor.moveToPosition(i);
if (i > 0)
rtn += “,”;
rtn += “{”;
rtn += “”_id":" + cursor.getString(0);
rtn += “,“thread_id”:” + cursor.getString(1);
rtn += “,“address”:”" + cursor.getString(2) + “”";
rtn += “,“person”:”"
- ((cursor.getString(3) == null) ? “” : cursor
.getString(3)) + “”";
rtn += “,“date”:” + cursor.getString(4);
rtn += “,“body”:”" + cursor.getString(5) + “”";
rtn += “,“read”:”
- ((cursor.getInt(6) == 1) ? “true” : “false”);
rtn += “,“type”:” + cursor.getString(7);
rtn += “,“service_center”:” + cursor.getString(8);
rtn += “}”;
}
return “[” + rtn + “]”;
} catch (Exception e) {
return “[]”;
}
}
public List getThreads(int number) {
Cursor cursor = null;
ContentResolver contentResolver = mContext.getContentResolver();
List list = new ArrayList();
try {
if (number > 0) {
cursor = contentResolver.query(
Uri.parse(CONTENT_URI_SMS_CONVERSATIONS),
THREAD_COLUMNS, null, null, "thread_id desc limit "
- number);
} else {
cursor = contentResolver.query(
Uri.parse(CONTENT_URI_SMS_CONVERSATIONS),
THREAD_COLUMNS, null, null, “date desc”);
}
if (cursor == null || cursor.getCount() == 0)
return list;
for (int i = 0; i < cursor.getCount(); i++) {
cursor.moveToPosition(i);
SMSBean mmt = new SMSBean(cursor.getString(0),
cursor.getString(1), cursor.getString(2));
list.add(mmt);
}
return list;
} catch (Exception e) {
return list;
}
}
public List getThreadsNum(List ll) {
Cursor cursor = null;
ContentResolver contentResolver = mContext.getContentResolver();
List list = new ArrayList();
// try {
for (SMSBean mmt : ll) {
cursor = contentResolver.query(Uri.parse(CONTENT_URI_SMS),
SMS_COLUMNS, "thread_id = " + mmt.getThread_id(), null,
null);
if (cursor == null || cursor.getCount() == 0)
return list;
cursor.moveToFirst();
mmt.setAddress(cursor.getString(2));
mmt.setDate(cursor.getLong(4));
mmt.setRead(cursor.getString(6));
list.add(mmt);
}
return list;
// } catch (Exception e) {
// Log.e(“getThreadsNum”, “getThreadsNum-------------”);
// return list;
// }
}
}
上面是短信列表的实现,下面是会话消息的实现
界面布局:
/Contact_Demo/res/layout/message_list_view.xml
<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android=“http://schemas.android.com/apk/res/android”
android:layout_width=“fill_parent”
android:layout_height=“fill_parent”
android:background=“#000000” >
<ListView
android:id=“@+id/message_list”
android:layout_width=“fill_parent”
android:layout_height=“wrap_content”
android:background=“#00000000”
android:cacheColorHint=“#00000000”
android:choiceMode=“singleChoice”
android:soundEffectsEnabled=“true” />
/Contact_Demo/res/layout/list_say_he_item.xml
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android=“http://schemas.android.com/apk/res/android”
android:layout_width=“fill_parent”
android:layout_height=“wrap_content”
android:gravity=“left”
android:orientation=“horizontal”
android:paddingBottom=“10dip”
android:paddingLeft=“5dip”
android:paddingRight=“50dip”
android:paddingTop=“10dip” >
<LinearLayout
android:id=“@+id/layout_bj”
android:layout_width=“wrap_content”
android:layout_height=“wrap_content”
android:layout_gravity=“left”
android:background=“@drawable/incoming”
android:gravity=“center_vertical”
android:orientation=“vertical” >
<com.suntek.contact.view.CustomTextView
android:id=“@+id/messagedetail_row_text”
android:layout_width=“wrap_content”
android:layout_height=“wrap_content”
android:gravity=“top|left”
android:padding=“5dip”
android:textColor=“#000000” />
<TextView
android:id=“@+id/messagedetail_row_date”
android:layout_width=“wrap_content”
android:layout_height=“wrap_content”
android:layout_gravity=“right”
android:textAppearance=“?android:attr/textAppearanceSmall”
android:textColor=“#65879e” />
/Contact_Demo/res/layout/list_say_me_item.xml
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android=“http://schemas.android.com/apk/res/android”
android:layout_width=“fill_parent”
android:layout_height=“wrap_content”
android:gravity=“right”
android:orientation=“horizontal”
android:paddingBottom=“10dip”
android:paddingLeft=“50dip”
android:paddingRight=“5dip”
android:paddingTop=“10dip” >
<LinearLayout
android:id=“@+id/layout_bj”
android:layout_width=“wrap_content”
android:layout_height=“wrap_content”
android:layout_gravity=“right”
android:background=“@drawable/outgoing”
android:gravity=“center_vertical”
android:orientation=“vertical” >
<com.suntek.contact.view.CustomTextView
android:id=“@+id/messagedetail_row_text”
android:layout_width=“wrap_content”
android:layout_height=“wrap_content”
android:gravity=“top|left”
android:padding=“5dip”
android:textColor=“#000000” />
<TextView
android:id=“@+id/messagedetail_row_date”
android:layout_width=“wrap_content”
android:layout_height=“wrap_content”
android:layout_gravity=“right”
android:textAppearance=“?android:attr/textAppearanceSmall”
android:textColor=“#65879e” />
短信消息实体类:
/Contact_Demo/src/com/suntek/contact/model/MessageBean.java
package com.suntek.contact.model;
public class MessageBean {
private String name; // 联系人姓名
private String date; // 日期
private String text; // 文本
private int layoutID; // 布局id,区分是发送人还是接收人
public MessageBean() {
}
public MessageBean(String name, String date, String text, int layoutID) {
super();
this.name = name;
this.date = date;
this.text = text;
this.layoutID = layoutID;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDate() {
return date;
}
public void setDate(String date) {
this.date = date;
}
public String getText() {
return text;
}
public void setText(String text) {
this.text = text;
}
public int getLayoutID() {
return layoutID;
}
public void setLayoutID(int layoutID) {
this.layoutID = layoutID;
}
}
消息列表适配器:
/Contact_Demo/src/com/suntek/contact/adapter/MessageBoxListAdapter.java
package com.suntek.contact.adapter;
import java.util.List;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.graphics.Color;
import android.text.ClipboardManager;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnLongClickListener;
import android.view.View.OnTouchListener;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.LinearLayout;
import android.widget.TextView;
import com.suntek.contact.R;
import com.suntek.contact.model.MessageBean;
/**
-
消息列表适配器
-
@author Administrator
*/
public class MessageBoxListAdapter extends BaseAdapter {
private List mbList;
private Context ctx;
private LinearLayout layout_father;
private LayoutInflater vi;
private LinearLayout layout_child;
private TextView tvDate;
private TextView tvText;
public MessageBoxListAdapter(Context context, List coll) {
ctx = context;
vi = (LayoutInflater) ctx
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
this.mbList = coll;
}
public int getCount() {
return mbList.size();
}
public Object getItem(int position) {
return mbList.get(position);
}
public long getItemId(int position) {
return position;
}
public View getView(int position, View convertView, ViewGroup parent) {
MessageBean mb = mbList.get(position);
// 得到布局ID
int itemLayout = mb.getLayoutID();
layout_father = new LinearLayout(ctx);
vi.inflate(itemLayout, layout_father, true);
layout_father.setBackgroundColor(Color.TRANSPARENT);
layout_child = (LinearLayout) layout_father
.findViewById(R.id.layout_bj);
tvText = (TextView) layout_father
.findViewById(R.id.messagedetail_row_text);
tvText.setText(mb.getText());
最后
简历首选内推方式,速度快,效率高啊!然后可以在拉钩,boss,脉脉,大街上看看。简历上写道熟悉什么技术就一定要去熟悉它,不然被问到不会很尴尬!做过什么项目,即使项目体量不大,但也一定要熟悉实现原理!不是你负责的部分,也可以看看同事是怎么实现的,换你来做你会怎么做?做过什么,会什么是广度问题,取决于项目内容。但做过什么,达到怎样一个境界,这是深度问题,和个人学习能力和解决问题的态度有关了。大公司看深度,小公司看广度。大公司面试你会的,小公司面试他们用到的你会不会,也就是岗位匹配度。
选定你想去的几家公司后,先去一些小的公司练练,学习下面试技巧,总结下,也算是熟悉下面试氛围,平时和同事或者产品PK时可以讲得头头是道,思路清晰至极,到了现场真的不一样,怎么描述你所做的一切,这绝对是个学术性问题!
面试过程一定要有礼貌!即使你觉得面试官不尊重你,经常打断你的讲解,或者你觉得他不如你,问的问题缺乏专业水平,你也一定要尊重他,谁叫现在是他选择你,等你拿到offer后就是你选择他了。
金九银十面试季,跳槽季,整理面试题已经成了我多年的习惯!在这里我和身边一些朋友特意整理了一份快速进阶为Android高级工程师的系统且全面的学习资料。涵盖了Android初级——Android高级架构师进阶必备的一些学习技能。
附上:我们之前因为秋招收集的二十套一二线互联网公司Android面试真题(含BAT、小米、华为、美团、滴滴)和我自己整理Android复习笔记(包含Android基础知识点、Android扩展知识点、Android源码解析、设计模式汇总、Gradle知识点、常见算法题汇总。)
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
ackgroundColor(Color.TRANSPARENT);
layout_child = (LinearLayout) layout_father
.findViewById(R.id.layout_bj);
tvText = (TextView) layout_father
.findViewById(R.id.messagedetail_row_text);
tvText.setText(mb.getText());
最后
简历首选内推方式,速度快,效率高啊!然后可以在拉钩,boss,脉脉,大街上看看。简历上写道熟悉什么技术就一定要去熟悉它,不然被问到不会很尴尬!做过什么项目,即使项目体量不大,但也一定要熟悉实现原理!不是你负责的部分,也可以看看同事是怎么实现的,换你来做你会怎么做?做过什么,会什么是广度问题,取决于项目内容。但做过什么,达到怎样一个境界,这是深度问题,和个人学习能力和解决问题的态度有关了。大公司看深度,小公司看广度。大公司面试你会的,小公司面试他们用到的你会不会,也就是岗位匹配度。
选定你想去的几家公司后,先去一些小的公司练练,学习下面试技巧,总结下,也算是熟悉下面试氛围,平时和同事或者产品PK时可以讲得头头是道,思路清晰至极,到了现场真的不一样,怎么描述你所做的一切,这绝对是个学术性问题!
面试过程一定要有礼貌!即使你觉得面试官不尊重你,经常打断你的讲解,或者你觉得他不如你,问的问题缺乏专业水平,你也一定要尊重他,谁叫现在是他选择你,等你拿到offer后就是你选择他了。
金九银十面试季,跳槽季,整理面试题已经成了我多年的习惯!在这里我和身边一些朋友特意整理了一份快速进阶为Android高级工程师的系统且全面的学习资料。涵盖了Android初级——Android高级架构师进阶必备的一些学习技能。
附上:我们之前因为秋招收集的二十套一二线互联网公司Android面试真题(含BAT、小米、华为、美团、滴滴)和我自己整理Android复习笔记(包含Android基础知识点、Android扩展知识点、Android源码解析、设计模式汇总、Gradle知识点、常见算法题汇总。)
[外链图片转存中…(img-m9LxkPZc-1714981775338)]
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!