您的位置:首页 > 职场人生

【工作】面试和工作

2016-06-30 09:04 351 查看
        从5月的22号开始,我就开始了面试,自然而然,面试官会问我很多的问题,现在想起来的,大多是我回答的不好,或者直接就没有回答出来的。根据你要干的职位,面试官会很好的问你一些关于他们项目中的问题。同时我也已经工作了好几天了,现在说一说。
 
[面试]   
 
     现在工作的项目主体是一个CS的项目,也有一些BS的部分,同时也有一些是app和支持硬件的服务的部分。根据这个项目的内容,面试官问了我如下的问题:
  1、写过控件吗?写过服务吗?
     来了后才知道,这个项目的很多控件都是他们自己写的,包括报表、对硬件提供了很多的服务,包括app。
  2、存储过程怎么样?写的有多复杂?
     这个项目一共有好几百个存储过程,而且功能的逻辑几乎都在存储过程中体现,同时在存储过程中用到了游标、事务等东东,短一点的存储过程还好,但是遇到了二三百行的存储过程,里面的很多关键字我都不认识,需要去查,感觉还是有一点吃力的。
  3、你写一个接口,他是向数据库中多表插入3000行的数据,而且这个接口客户访问的时间就差几秒而已,该怎么写?
     这个问题,我提到了多线程和事务,但是面试官说,他们是用队列实现的。
  4、连表查询,查询的是几千万条的数据,这个接口你该怎么写?从代码实现和数据库设计的角度考虑。
     我记得我说了好多,就是围绕sql语句怎么写比较优化,比较性能高,但是面试官说,在他们的项目中,提高查询效率比较快的手段是建立索引。
 
   也许这是我刚刚经历过的面试,记忆比较深刻,我记得,好几次的电话面试,我也有好多的问题答不上来。

   1、我们现在的tree加载比较慢,该怎么解决?
      我现在记得,我直接说了加异步。具体他们想要什么答案,我不知道,我那时候也不知道该怎么解决。
   2、存储过程中写循环该怎么写?
      首先,sql server中是没有for循环这样一说的,我记得我当时说的好像就是for循环,在实际的应用中,好多都是用的while和游标来实现循环的。
      mysql中是while循环、loop循环和repeat循环。
      oracle中,很多时候也是用游标来实现的,根据参数的不同,查询方式也分为俩种。
   3、游标了解多少?
   4、where和having的区别?
      
     (1)用的地方不一样
     where可以用于select、update、delete和insert...into语句中。
     having只能用于select语句中
     (2).执行的顺序不一样
      where的搜索条件是在执行语句进行分组之前应用
      having的搜索条件是在分组条件后执行的
      即如果where和having一起用时,where会先执行,having后执行
     (3).子句有区别
      where子句中的条件表达式having都可以跟,而having子句中的有些表达式where不可以跟;having子句可以用集合函数(sum、count、avg、max和min),而where子句不可以。
 
     有些地方两者都可以用,比如

      select studentid, avg(score)
      from studentScore
      group by studentid
      having left(studentid, 1)='0'

     select studentid, avg(score)
      from studentScore
     where left(studentid, 1)='0'
     group by studentid

    这种情况下哪个会快一点?

    解析:

    select studentid, avg(score) from studentScore groupby studentid having left(studentid, 1)='0'

   (1)、分组汇总

   (2)、过滤非法项

     left(studentid, 1)='0'是个效率不很高的过滤条件,如果分组会使数据量极大减少(比如每个人有几十门课),而且要过滤掉的只是很小一部分学生,这种写法会有比较高的效率

     select studentid, avg(score) from studentScore whereleft(studentid, 1)='0' group by studentid

   (1)、过滤非法项

   (2)、分组汇总

    虽然left(studentid,1)='0'是个效率不很高的过滤条件,但是如果你要从几百万学生中找到几十个学生3-5门功课的平均分,还是应该很明智的选择它
 
    面试了这多,好多的问题都不记得了,就先这些吧。
 
 
 [工作]
 
    刚来这几天,我还是比较随意的,没有任务,每天就是看代码,吃饭,第一天早上6点20起来的,八点到的公司,公司是八点半上班的。剩下的这几天,我都是6点40起来的,然后7点10分出发,8点10分到公司。
 
    公司的同事都很热情,我们这个开发屋是三个安卓,三个java,我一个net。
 
    由于我负责的这个项目已经在上百家医院上线了,所以我要做的就是用户的需求变了,我改动代码。由于用户比较多,所以需求变更也是比较频繁的。
 
    这个系统无论是对网页版系统、app系统、硬件等提交的服务都写到了存储过程和触发器中,而且业务逻辑都在里面,面对好几百行的这些,刚刚开始我还是很有压力的。同时我问了项目组长,为什么不直接拼接sql,却要用这些呢?他说,上百家医院,他们的很多业务其实都不太一样的,于是我们保证程序是一个版本,但是根据不同的用户,我们用不同的存储过程,也就是数据库不是一个版本的。
 
    昨天遇到了一个需求,我和组长说了一下我的思路,组长根据我说的思路,直接说用触发器啊,写三四百行左右就可以解决了。我直接说简单的我还行,就像这样复杂的,我不会写。组长比较好,和我说:需求还不定,你先学习一下,写第一个肯定慢,慢慢就快了。给我吃了一颗定心丸啊。
 
    今天已经是周四了,时间好快啊,一些都是刚刚开始,加油!!!!!
 
    
 
 
      
 
 
 
     
  
 

 

 

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: