9月25日,下着雨又去面试了,这日子过得真是辛苦。是个美国公司,韩国、印度都有网点。中国这个办事处刚建。这面试到也简单。填一份表格(全英文)。做了一套题。比我在北京面试的那些骚动公司的题简单多了,都是些原则性的题,还有就是对于你项目经历的描述。没想到还有这么考的。又是英语又是韩语的以为会经受什么考验,呃。没想到被mm带到一个madam的办公室,开始考英文。当然了上来是一些情况介绍。工资给的不高。然后是他们公司的简介,让俺念又让俺译。幸亏没让俺自己创造几句鸟语。磕磕绊绊总算过关。(居然问我为什么不会开车,俺的神呀!你就给俺那几k,是车开俺还是俺开车呀!)
大头儿在后边,正式考试原来是发个项目回家做。第一次遇到这样公司。大老美就是新鲜。不过正和吾意。俺这离了机器不会编程的傻子,这次终于也能畅快一把了。
题目还行,不难但能见点儿功力。
大概需求是做一个类似资源管理器一样的东东。将指定folder和他所有的subfolders全部列出到一个listView中,显示为:“foldername,size,path”,当计算时按stop就停下来。
这个题有几个考点俺觉的还行:
1。算folders的size;(这个考了个第归的东东)
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
/**//// <summary>
/// calculate folder size of Folder specified and its subfolders
/// They are listed in the list view(lvFolders).
/// Each row have 3 columns - Folder Name, Size (Bytes), Full Path Name
/// </summary>
/// <param name="rootDirectory">source path</param>
/// <returns>folder size</returns>
private long GetFolderList(string rootDirectory)
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
{
long size = 0;
foreach (string tempDirectiory in Directory.GetDirectories(rootDirectory))
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
size += GetFolderList(tempDirectiory);
}
foreach (string tempFile in Directory.GetFiles(rootDirectory))
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
size += new FileInfo(tempFile).Length;
}
string[] oneFolderInfo = new string[3];
oneFolderInfo[0] = Path.GetFileName(rootDirectory);
oneFolderInfo[1] = size.ToString("###,###,##0");
oneFolderInfo[2] = rootDirectory;
this.Invoke(new DealWithControlDelegate(DealWithControl), new ListViewItem(oneFolderInfo));//insert one folder infomation into the listView.
return size;
![](/Images/OutliningIndicators/InBlock.gif)
}
2.按stop停止。(多线程问题。其实这个东东2005以后就有一个什么什么backprocess的组件了,但是他是2003,那就用Thread也不难,有个线程间数据同步问题用invoke这个方法也就能搞定了。)
calculateProcThread = new Thread(new ThreadStart(CalculateProcessMethod));
this.SetControlState(ControlStatement.beforeCalculate);
calculateProcThread.Start();
![](/Images/OutliningIndicators/None.gif)
就这new一个,然后start就行了。别忘了kill了它:
if(this.calculateProcThread.IsAlive)
this.calculateProcThread.Abort();
![](/Images/OutliningIndicators/None.gif)
3.listViewa按列排序(这个没啥,msdn上有例子,实现个ICompare就行了):
public class ListviewItemComparer : IComparer
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
{
private int col;
![](/Images/OutliningIndicators/InBlock.gif)
private SortOrder sorting = SortOrder.Ascending;
![](/Images/OutliningIndicators/InBlock.gif)
public SortOrder Sorting
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
set
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
sorting = value;
}
get
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
return sorting;
}
}
![](/Images/OutliningIndicators/InBlock.gif)
public ListviewItemComparer()
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
col = 0;
}
![](/Images/OutliningIndicators/InBlock.gif)
public ListviewItemComparer(int column)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
col = column;
}
![](/Images/OutliningIndicators/InBlock.gif)
public int Compare(object x, object y)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
if (col != 1)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
if (sorting == SortOrder.Ascending)
return String.Compare(((ListViewItem)x).SubItems[col].Text, ((ListViewItem)y).SubItems[col].Text);
else
return String.Compare(((ListViewItem)y).SubItems[col].Text, ((ListViewItem)x).SubItems[col].Text);
}
else
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
if (sorting == SortOrder.Ascending)
return long.Parse(((ListViewItem)x).SubItems[col].Text, System.Globalization.NumberStyles.Any) > long.Parse(((ListViewItem)y).SubItems[col].Text, System.Globalization.NumberStyles.Any) ? 1 : -1;
else
return long.Parse(((ListViewItem)x).SubItems[col].Text, System.Globalization.NumberStyles.Any) < long.Parse(((ListViewItem)y).SubItems[col].Text, System.Globalization.NumberStyles.Any) ? 1 : -1;
![](/Images/OutliningIndicators/InBlock.gif)
}
![](/Images/OutliningIndicators/InBlock.gif)
}
![](/Images/OutliningIndicators/InBlock.gif)
}
![](/Images/OutliningIndicators/None.gif)
ok了,这个小玩印儿就这样被我搞定了哈。
完整项目下载