上午去科技园面试.Net程序员,趁如今尚未忘记和你们分享面试的经历。到公司后前台MM给了一份面试题,我可以记住的题目大体是这样:html
一、用C# StringBuild 类实现1到10000的整数拼接,数与数之间用逗号分隔,例如1,2,3,...。java
二、用Java 构造一个int类型的队列,生成10000个1(含)到100(含)之间的整数,而后插入到队列中。程序员
三、用C/C++实现N(N是常数)个int类型的内存空间,而后释放它,这块内存空间是连续的吗?面试
四、用C++/C#/Java(选一种)代码实现OOP(Oriented-Object Programming)中的多态。算法
五、用T-SQL建立一张只包含一个int类型字段的表,将1到10000插入到表中,而后对这个字段的全部行求和。数据库
六、写出C#代码的输出:dom
Console.WriteLine(32.ToString("F01"));
Console.WriteLine(32.ToString("X"));ide
七、写出Java代码的输出:函数
System.out.println(Math.round(10.5));
System.out.println(Math.round(-10.5));
System.out.println(Math.round(5 & 10));工具
八、以下C代码中foo函数有什么做用?这段代码有什么缺陷?
int foo(const char* p)
{
const char* q = p;
while (*p != '\0' && *p != '0')
p++;
return (*p != '\0') ? -1 : (p -q);
}
九、用你熟悉的语言实现字符串反转,不能使用语言自身提供的工具函数。
十、递归实现费波拉契数列的第N项。
作题大概用了一个小时左右吧,这里有一个细节须要注意的是进入公司后要把手机静音或者关机。面试官看了个人答题说作的不错,而后开始问其余问题,我按照时间前后来讲。
一、简单介绍下本身。
我主要是从项目经从来回答的,具体是这三个方面:
a) 项目的业务流程。
b) 项目使用的基本技术、工具。
c) 开发项目的团队规模和本身在项目中的职责。
我简历上写的是有两年工做经验,分别在两个公司待过,每一个公司工做的时间都是整整一年。
2 问我为何要离开第一个公司?
第一个公司是用VB作开发,我不喜欢因此就直说了。
3 问我为何要离开第二个公司?
两份工做都是C/S结构开发的,如今想作B/S结构开发。
这里须要注意的是无论什么缘由离职,最好很差说一些敏感的缘由。另外,频繁跳槽会让面试官以为求职者不踏实,面试官看到我两年跳槽两次,担忧我在公司待上一年会离开,因此在简历上几年以内出现不少份工做是不可取的,能够灵活处理下。
聊了一会聊处处理大数据和数据库优化上,因为我在处理大数据上没有什么经验能够提供,我只回答了优化数据库的通常思路,这里须要说明的是若是本身没有某方面(如处理大数据)的经验就如实谦虚的回答,若是你感兴趣能够问下面试官。
4 数据库优化的通常思路,(若有不对的地方劳烦你们指出)
a) 物理I/O
b) 编译时间
c) 执行计划
b) 表设计
d) 语句级别
目前我对数据库的优化认识很肤浅,只能从我所知道的方面来回答了,若是你们有兴趣能够看徐海蔚写的书。
和面试官大概聊了一个小时,问我期待的薪水,能够从本身目前的薪水和行业的薪水标准给出一个大概的范围。这里提醒你们的是在谈薪水的时候最好是给一个范围。
5 期待的薪水是多少?
根据本身目前的薪水和深圳软件行业两年工做经验的薪酬平均水平,我期待的月薪是XXXX到YYYY。最后面试官问我有没什么要问的,我问的是本身会负责哪方面的工做。
下午回来收到面试经过的邮件了,靠谱的公司会把薪资和各项福利待遇以邮件的方式来通知面试者。
下面是题目的答案思路,仅供参考。
一、用C# StringBuild 类实现1到10000的整数拼接,数与数之间用逗号分隔,例如1,2,3,...。
using System.IO; using System; using System.Text; class Program { static void Main() { StringBuilder sb = new StringBuilder(); int i = 1; for (i = 1; i < 10000; i++) { sb.Append(i.ToString() + ","); } sb.AppendLine(i.ToString()); Console.WriteLine(sb.ToString()); } }
2 用Java 构造一个int类型的队列,生成10000个1(含)到100(含)之间的整数,而后插入到队列中。
import java.util.Queue; import java.util.concurrent.LinkedBlockingQueue; public class HelloWorld{ public static void main(String []args){ Queue<Integer> q = new LinkedBlockingQueue<Integer>(); for (Integer i = 1; i <= 10000; i++) { q.offer((int)(Math.random() * 100 + 1)); } for(Integer x : q) { System.out.println(x); } } }
三、用C/C++实现N(N是常数)个int类型的内存空间,而后释放它,这块内存空间是连续的吗?
#include <stdio.h> #include <stdlib.h> #define N 10 int main() { int* p = malloc(sizeof(int) * N); printf("use the memory ...\n"); free(p); return 0; }
通常是连续的,可是编译器不能保证向操做系统申请的空间必定是连续的。
四、用C++/C#/Java(选一种)代码实现OOP(Oriented-Object Programming)中的多态。
多态能够从覆盖和重载两个方面来考虑,我是从覆盖的角度实现的。
using System.IO; using System; namespace myNameSpace { public class Animal { public virtual void Jiao() { } } public class Dog : Animal { public override void Jiao() { Console.WriteLine("bark..."); } } public class Cat : Animal { public override void Jiao() { Console.WriteLine("meow..."); } } class Program { static void Main() { Dog g = new Dog(); g.Jiao(); Cat c = new Cat(); c.Jiao(); } } }
五、用T-SQL建立一张只包含一个int类型字段的表,将1到10000插入到表中,而后对这个字段的全部行求和。
CREATE TABLE t1 ( i INT PRIMARY KEY NOT NULL ) DECLARE @i int SET @i = 1 WHILE(@i <= 10000) BEGIN INSERT INTO t1(i) VALUES(@i) SET @i = @i + 1 END ;WITH cte AS ( SELECT i,'1' 'GroupingCondition' FROM t1 ) SELECT SUM(i) 'sum' FROM cte GROUP BY GroupingCondition
六、写出C#代码的输出:
Console.WriteLine(32.ToString("F01"));
Console.WriteLine(32.ToString("X"));
关于C#中ToString()方法能够参考这篇博客:http://www.cnblogs.com/jacktu/archive/2007/11/30/978293.html
七、写出Java代码的输出:
System.out.println(Math.round(10.5));
System.out.println(Math.round(-10.5));
System.out.println(Math.round(5 & 10));
round(n):对n进行四舍五入,其算法等价于 n+0.5后向下取整。
八、以下C代码中foo函数有什么做用?这段代码有什么缺陷?
int foo(const char* p)
{
const char* q = p;
while (*p != '\0' && *p != '0')
p++;
return (*p != '\0') ? -1 : (p -q);
}
做用: 当p指向的字符串包含字符'0'时,返回-1,不然返回p指向字符串的字节数(长度)。
缺陷: 指向常量的指针p的地址被改变了,若是须要使用p指向的内容,那么p指向的内容是NULL。(这里有几个概念须要区分:指向常量的指针,常指针,指向常量的常指针)
九、用你熟悉的语言实现字符串反转,不能使用语言自身提供的工具函数。
我处理的思路是:使用头尾指针交换,T(N) = O(N)
十、递归实现费波拉契数列的第N项。
经过解齐次方程求递归的时间复杂度,T(N)=O(((1+√5)/2 )^N),几年没看线性代数了,这题解错了。