面试杂谈,题目记录
2013-03-27 12:40
316 查看
昨天面试了一天,笔试后hr面试,然后再面试,然后再机试,然后技术面试。虽然最后被pass掉了,但是这次面试还是受益匪浅的。
没有什么面试经验,能有次这样的面试,虽然结果令人沮丧的想诅咒人,但是过程还是值得玩味。现在记录一下昨天没有回答出来的面试题,当做是一种积累吧。
1:property和attribute的区别
attribute属于OOA/OOD的概念,而property属于编程语言中的概念。
在OOA/OOD中的使用Attribute表示属性,指对象(Object)的特征(Feature)。我们 在一些编程语言(如C#、Delhpi等)中遇到的“属性”一词。
下面我们来说明它们的异同。
Attribute
Attributes是Microsoft .NETFramework文件的元数据,可以用来向运行时描述你的代码,或者在程序运行的时候影响应用程序的行为。
Property
属性是面向对象编程的基本概念,提供了对私有字段的访问封装,在C#中以get和set访问器方法实现对可读可写属性的操作,提供了安全和灵活的数据访问封装。
2:Socket 与 Webservice 的通信区别
socket是一种协议,采用tcp或udp协议通信。
Tcp、udp属于网络层,上边各层的应用都需要我们自己实现,例如端口的定义,数据包的定义,数据包的加密解密等。
webservice是一种服务,采用HTTP协议通信,Soap作为数据格式。
HTTP协议属于应用层,通过服务器才可以发布,这样内部定义的端口,数据包,加解密都做好了,可以直接使用。
webservice基于HTTP协议,因此可以利用现有非常成熟的Web集群来提供高负载,同比之下 socket就非常难。
网络七层协议从低到高:
1、物理层(Physical Layer)、
2、数据链路层(Data Link Layer)、
3、网络层(Network Layer)、
4、传输层(Transport Layer)、
5、会话层(Session Layer)、
6、表示层(Presentation Layer)、
7、应用层(Application Layer)
webservice一般分为http webservice ,soap webservice两种,都是基于http通信协议的,一般返回xml格式的数据,所以也可以叫做xml webservice.
http webservice 通过get post 两种方法来调用远程的数据服务,适合简单参数的传递(get 直接在url里带上参数);soap webservice通过soap协议传输数据,soap是基于xml标准的,也是就说可以用xml结构的数据来传输参数,这样参数类型可以很复杂,处理远程返回的xml数据时也更方便.
其实soap协议也是基于http协议的.
webservice离不开web服务器(apache),web服务器是一个在公网上提供http通信的服务器.webservice 一般都建立在web服务器上,以供别人调用.
socket 是基于传输层的,http基于应用层,socket是一切通过端口通信的基础(包括http),http://baike.baidu.com/view/13870.htm
使用中,http常用于b/s通信,如web服务器就是用http做传输协议的,socket用于c/s(还有现在的富客户端),应用服务器中常用.socket穿防火墙有问题,而http几乎可以穿过任何防火墙(屏80的不多吧),socket通信的即时性比http好.
4:简述 private、 protected、 public、 internal 修饰符的访问权限
这一题是公司拿来面试别人的题目,结果这次自己面试居然没写对
5:visibility: hidden和display: none 有什么不同?
这一题答对了,但是还是放在这个记录里面吧
6:简述装饰模式
最近刚好在看设计模式结果装饰模式还没看到,这次面试居然被问到了,杯具
这个问题先保留着,等设计模式看完写个笔记好了
7:同一个用户组里面不同的用户登录到后台权限不一样怎么设计
这种权限没弄过,接触的都是同一个用户组权限一样的情况,后来在群里聊讨论结果如下
先说说几种权限管理方案
一,简单session控制
实现原理和方法:
用户登录后台,输入用户名和密码,对用户的用户名和密码进行验证,验证通过后,可以把用户的一些基本信息放到session里面当用户访问后台的其他页面时,去判断一下session是否存在,并且没有过期。不过,后台管理员权限一样,没有区分
1,后台页面共用的基本类,我们可以在基本类的里加以判断,或者在基本类外面在extends一层,加以判断,去check一下session。
2,直接重写一个check_login.php每个后台页面都包涵这个页面,通过这个页面加以判断,check一下session。
二,菜单控制
自己系统里面就是三级菜单控制
实现原理和方法:
菜单控制比简单session控制要高级一点,不光判断用户是否登录,还对用户的权限进行了控制,不同的人看到不同的东西。
1,在显示菜单的地方加以判断,不同的用户显示不同的菜单。这种方法用户虽然看不到菜单,但是可以通过输入url,进入没有显示的菜单页面,前提是用户用户知道url才行。
2,建立一个用户和菜单内容的关系表,把用户所能看到的内容,放到数据库内,当要显示菜单的地方,用数据库进行读取,如果用户是通过输入url进入的话,我们也可以根据用户和url,到关系表中进行查找,如果没有找到的话,就不准许进入,这种方法可以避免上面一种方法的弊端了。
三,页面元素控制
上面说的菜单控制,可以设置权限到页面的级别,但是如果我有这样的需求又怎么办呢,所有的人都可以访问一个页面,一部分可以进行添加操作,一部分人可以进行删除操作,一部分可以进行审核工作。这样的需求,菜单控制很难实现的。现在的权限管理中好多都用的这种方式。例如:一些开源的论坛,cms系统。个人想了一个方法,觉得可以实现页面元素控制。看一下下面的图片。
解释一下:
A表,成员组表。这个表里面存的是一个一个组,财务组,开发组,发货组,定单审核组,退货组等。
B表,成员表。这个表里面存的是一个一个成员,张三,财务组。李四,开发组,王五,发货组,王五定单审核组。
C表,元素权限表。这个表里面存的是一个一个虚拟的权限。比如浏览权限,财务查看权限,发货权限,定单审核权限等。
D表,类别和元素权限的关系表,或者是页面和元素权限的关系表。也就是说,一个类别拥有什么权限,或者某个页面拥有什么权限。
E表,是成员组表和D表的关系表。表示这个成员组拥有那些权限,成员组拥有什么权限,表成成员也拥有什么权限。
为了表达清楚我的意思,我把这一套,分成了5张表,可以精减一下,去掉一到二张表。
实现原理和方法:
页面元素控制可以说是菜单控制的更进一步,更细一点了。对页面里面的具体操作也进行了控制。实现原理和菜单控制差不多。
1,和菜单管理一样,在显示菜单的地方,根据用户所在组进行显示。例如:张三,财务组,他进去看能看到财务的菜单,这个菜单下面也许会有很多页面,每个页面会有很多操作,查看一下E表,表找一下这个组能操作的类或者页面。我把这个方法叫做提前做法,就是有就显示,没有不显示。
2,还有一种办法就是加载页面时把页面中的操作都显示出来,在经过统一的接口来把不能操作的选项去掉。这样的话,可以把页面代码和权限代码分开。这样我觉得不至于把代码搞得太复杂。我把这个方法叫做马后炮做法。
了解完权限管理方案后,开始想怎么设计同一组里面不同成员的管理权限,额,忘记怎么昨天怎么说了,先发上来再说。
8:大批量数据查询优化解决方法
1、先批量查出所有数据,例子中是一万条一批。
2、在查出数据之后把每次的数据按一定规则存入本地文件。
3、获取数据时,通过批次读取,获得大批量数据
真心没有海量数据优化的经验,平时用的都是分页,几十万条数据而已。 附上一链接大量数据优化 /article/3511445.html
没有什么面试经验,能有次这样的面试,虽然结果令人沮丧的想诅咒人,但是过程还是值得玩味。现在记录一下昨天没有回答出来的面试题,当做是一种积累吧。
1:property和attribute的区别
attribute属于OOA/OOD的概念,而property属于编程语言中的概念。
在OOA/OOD中的使用Attribute表示属性,指对象(Object)的特征(Feature)。我们 在一些编程语言(如C#、Delhpi等)中遇到的“属性”一词。
下面我们来说明它们的异同。
Attribute
Attributes是Microsoft .NETFramework文件的元数据,可以用来向运行时描述你的代码,或者在程序运行的时候影响应用程序的行为。
Property
属性是面向对象编程的基本概念,提供了对私有字段的访问封装,在C#中以get和set访问器方法实现对可读可写属性的操作,提供了安全和灵活的数据访问封装。
2:Socket 与 Webservice 的通信区别
socket是一种协议,采用tcp或udp协议通信。
Tcp、udp属于网络层,上边各层的应用都需要我们自己实现,例如端口的定义,数据包的定义,数据包的加密解密等。
webservice是一种服务,采用HTTP协议通信,Soap作为数据格式。
HTTP协议属于应用层,通过服务器才可以发布,这样内部定义的端口,数据包,加解密都做好了,可以直接使用。
webservice基于HTTP协议,因此可以利用现有非常成熟的Web集群来提供高负载,同比之下 socket就非常难。
网络七层协议从低到高:
1、物理层(Physical Layer)、
2、数据链路层(Data Link Layer)、
3、网络层(Network Layer)、
4、传输层(Transport Layer)、
5、会话层(Session Layer)、
6、表示层(Presentation Layer)、
7、应用层(Application Layer)
webservice一般分为http webservice ,soap webservice两种,都是基于http通信协议的,一般返回xml格式的数据,所以也可以叫做xml webservice.
http webservice 通过get post 两种方法来调用远程的数据服务,适合简单参数的传递(get 直接在url里带上参数);soap webservice通过soap协议传输数据,soap是基于xml标准的,也是就说可以用xml结构的数据来传输参数,这样参数类型可以很复杂,处理远程返回的xml数据时也更方便.
其实soap协议也是基于http协议的.
webservice离不开web服务器(apache),web服务器是一个在公网上提供http通信的服务器.webservice 一般都建立在web服务器上,以供别人调用.
socket 是基于传输层的,http基于应用层,socket是一切通过端口通信的基础(包括http),http://baike.baidu.com/view/13870.htm
使用中,http常用于b/s通信,如web服务器就是用http做传输协议的,socket用于c/s(还有现在的富客户端),应用服务器中常用.socket穿防火墙有问题,而http几乎可以穿过任何防火墙(屏80的不多吧),socket通信的即时性比http好.
3:利用反射DataSet转换成List 泛型
/// <summary> /// DataSet装换为泛型集合 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="p_DataSet">DataSet</param> /// <param name="p_TableIndex">待转换数据表索引</param> /// <returns></returns> /// 2008-08-01 22:46 HPDV2806 public static IList<T> DataSetToIList<T>(DataSet p_DataSet, int p_TableIndex) { if (p_DataSet == null || p_DataSet.Tables.Count < 0) return null; if (p_TableIndex > p_DataSet.Tables.Count - 1) return null; if (p_TableIndex < 0) p_TableIndex = 0; DataTable p_Data = p_DataSet.Tables[p_TableIndex]; // 返回值初始化 IList<T> result = new List<T>(); for (int j = 0; j < p_Data.Rows.Count; j++) { T _t = (T)Activator.CreateInstance(typeof(T)); PropertyInfo[] propertys = _t.GetType().GetProperties(); foreach (PropertyInfo pi in propertys) { for (int i = 0; i < p_Data.Columns.Count; i++) { // 属性与字段名称一致的进行赋值 if (pi.Name.Equals(p_Data.Columns[i].ColumnName)) { // 数据库NULL值单独处理 if (p_Data.Rows[j][i] != DBNull.Value) pi.SetValue(_t, p_Data.Rows[j][i], null); else pi.SetValue(_t, null, null); break; } } } result.Add(_t); } return result; } /// <summary> /// DataSet装换为泛型集合 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="p_DataSet">DataSet</param> /// <param name="p_TableName">待转换数据表名称</param> /// <returns></returns> /// 2008-08-01 22:47 HPDV2806 public static IList<T> DataSetToIList<T>(DataSet p_DataSet, string p_TableName) { int _TableIndex = 0; if (p_DataSet == null || p_DataSet.Tables.Count < 0) return null; if (string.IsNullOrEmpty(p_TableName)) return null; for (int i = 0; i < p_DataSet.Tables.Count; i++) { // 获取Table名称在Tables集合中的索引值 if (p_DataSet.Tables[i].TableName.Equals(p_TableName)) { _TableIndex = i; break; } } return DataSetToIList<T>(p_DataSet, _TableIndex); }
4:简述 private、 protected、 public、 internal 修饰符的访问权限
这一题是公司拿来面试别人的题目,结果这次自己面试居然没写对
private : 私有成员, 在类的内部才可以访问。 protected : 保护成员,该类内部和继承类中可以访问。 public : 公共成员,完全公开,没有访问限制。 internal: 在同一命名空间内可以访问。
5:visibility: hidden和display: none 有什么不同?
这一题答对了,但是还是放在这个记录里面吧
visibility: hidden----将元素隐藏,但是在网页中该占的位置还是占着。 display: none----将元素的显示设为无,即在网页中不占任何的位置。
6:简述装饰模式
最近刚好在看设计模式结果装饰模式还没看到,这次面试居然被问到了,杯具
这个问题先保留着,等设计模式看完写个笔记好了
7:同一个用户组里面不同的用户登录到后台权限不一样怎么设计
这种权限没弄过,接触的都是同一个用户组权限一样的情况,后来在群里聊讨论结果如下
先说说几种权限管理方案
一,简单session控制
实现原理和方法:
用户登录后台,输入用户名和密码,对用户的用户名和密码进行验证,验证通过后,可以把用户的一些基本信息放到session里面当用户访问后台的其他页面时,去判断一下session是否存在,并且没有过期。不过,后台管理员权限一样,没有区分
1,后台页面共用的基本类,我们可以在基本类的里加以判断,或者在基本类外面在extends一层,加以判断,去check一下session。
2,直接重写一个check_login.php每个后台页面都包涵这个页面,通过这个页面加以判断,check一下session。
二,菜单控制
自己系统里面就是三级菜单控制
实现原理和方法:
菜单控制比简单session控制要高级一点,不光判断用户是否登录,还对用户的权限进行了控制,不同的人看到不同的东西。
1,在显示菜单的地方加以判断,不同的用户显示不同的菜单。这种方法用户虽然看不到菜单,但是可以通过输入url,进入没有显示的菜单页面,前提是用户用户知道url才行。
2,建立一个用户和菜单内容的关系表,把用户所能看到的内容,放到数据库内,当要显示菜单的地方,用数据库进行读取,如果用户是通过输入url进入的话,我们也可以根据用户和url,到关系表中进行查找,如果没有找到的话,就不准许进入,这种方法可以避免上面一种方法的弊端了。
三,页面元素控制
上面说的菜单控制,可以设置权限到页面的级别,但是如果我有这样的需求又怎么办呢,所有的人都可以访问一个页面,一部分可以进行添加操作,一部分人可以进行删除操作,一部分可以进行审核工作。这样的需求,菜单控制很难实现的。现在的权限管理中好多都用的这种方式。例如:一些开源的论坛,cms系统。个人想了一个方法,觉得可以实现页面元素控制。看一下下面的图片。
解释一下:
A表,成员组表。这个表里面存的是一个一个组,财务组,开发组,发货组,定单审核组,退货组等。
B表,成员表。这个表里面存的是一个一个成员,张三,财务组。李四,开发组,王五,发货组,王五定单审核组。
C表,元素权限表。这个表里面存的是一个一个虚拟的权限。比如浏览权限,财务查看权限,发货权限,定单审核权限等。
D表,类别和元素权限的关系表,或者是页面和元素权限的关系表。也就是说,一个类别拥有什么权限,或者某个页面拥有什么权限。
E表,是成员组表和D表的关系表。表示这个成员组拥有那些权限,成员组拥有什么权限,表成成员也拥有什么权限。
为了表达清楚我的意思,我把这一套,分成了5张表,可以精减一下,去掉一到二张表。
实现原理和方法:
页面元素控制可以说是菜单控制的更进一步,更细一点了。对页面里面的具体操作也进行了控制。实现原理和菜单控制差不多。
1,和菜单管理一样,在显示菜单的地方,根据用户所在组进行显示。例如:张三,财务组,他进去看能看到财务的菜单,这个菜单下面也许会有很多页面,每个页面会有很多操作,查看一下E表,表找一下这个组能操作的类或者页面。我把这个方法叫做提前做法,就是有就显示,没有不显示。
2,还有一种办法就是加载页面时把页面中的操作都显示出来,在经过统一的接口来把不能操作的选项去掉。这样的话,可以把页面代码和权限代码分开。这样我觉得不至于把代码搞得太复杂。我把这个方法叫做马后炮做法。
了解完权限管理方案后,开始想怎么设计同一组里面不同成员的管理权限,额,忘记怎么昨天怎么说了,先发上来再说。
8:大批量数据查询优化解决方法
1、先批量查出所有数据,例子中是一万条一批。
2、在查出数据之后把每次的数据按一定规则存入本地文件。
3、获取数据时,通过批次读取,获得大批量数据
真心没有海量数据优化的经验,平时用的都是分页,几十万条数据而已。 附上一链接大量数据优化 /article/3511445.html
相关文章推荐
- 值得记录的面试题目(算法工程师)
- 面试题目记录2
- 面试题目记录5
- 面试题目记录
- 面试题目,记录一下而已。
- 公司面试题目之取出数据库中重复的记录
- 公司面试题目之取出数据库中重复的记录 (转帖)
- 公司面试题目之取出数据库中重复的记录
- 面试题目记录
- 面试题目记录3
- Java笔试、面试中常见的题目记录
- 公司面试题目之取出数据库中重复的记录
- 公司面试题目之取出数据库中重复的记录
- 庞统的求职记录 — 杂谈大学生面试
- 记录自己的java面试题目
- 前端·面试 记录一些有意思的题目
- 公司面试题目之取出数据库中重复的记录
- 记录一些webservice面试题目
- 面试题目记录
- 「前端 · 面试」记录一些有意思的题目(一)