vivo的软件研发工程师笔试.docx
《vivo的软件研发工程师笔试.docx》由会员分享,可在线阅读,更多相关《vivo的软件研发工程师笔试.docx(8页珍藏版)》请在冰豆网上搜索。
vivo的软件研发工程师笔试
竭诚为您提供优质文档/双击可除
vivo的软件研发工程师笔试
篇一:
(图片版)vivo20xx校园招聘软件笔试题
篇二:
20xxXX笔试题(软件研发工程师)
20xxXX笔试题(软件研发工程师)
一,简答题(本题共30分)
1.当前计算机系统一般会采用层次结构来存储数据,请介绍下典型的计算机存储系统一般分为哪几个层次,为什么采用分层存储数据能有效提高程序的执行效率?
(10分)
2.unix/linux系统的僵尸进程是如何产生的?
有什么危害?
如何避免?
(10)
3.简述unix/linux系统中使用socket库编写服务器程序的流程,请分别用对应的socket通信函数表示。
二,算法与程序设计题(本题共45分)
1,使用c/c++语言写一个函数,实现字符串的反转,要求不能用任何系统函数,且时间复杂度最小。
函数原型是:
char*reverse_str(char*str)(15分)
2,给定一个如下输入格式的字符串,(1,(2,3),(4,(5,6),7))括号内的元素可以是数字,也可以另一个括号,请实现一个算法消除嵌套的括号。
比如把上面的表达式变成:
(1,2,3,4,5,6,7),如果表达式有误请报错。
(15分)
3,相似度计算用于衡量对象之间的相似程度,在数据挖据,自然语言处理中使一个基础性计算,在广告检索服务中往往也会判断网民检索query和广告adword的主题相似度。
假设query或者adword的主题属性定义为一个长度为10000的浮点数据pr[10000](称之为主题概率数组),其中pr[i]表示query或者adword属于主题id为i的概率,而query和adword的相似度简化定义为两者主题概率数组的内积,即sim(query,adword)=sum(querypr[i]*adwordpr[i])(0 structtopic_info_t{
inttopic_id;
Floattopic_pr;
}
现在给出query的topic_info_t数组和n(n>=5000)个adwords的topic_info-t数组,现要求出query与adwords的相似度最大值,即max(sim(query,adword[i])(0
编写代码求时间复杂度最低的算法,并给出时间复杂度分析。
(15分)三,系统设计题(本题共25分)
在企业中,对生产数据进行分析具有很重要的意义。
但是生产数据通常不能直接用于数据分析,通常需要进行抽取,转换和加载,也就是业界常识的etl.
生产数据
为了便于开发和维护,并提高数据实时性,通常将一个完整的etl过程分析哼多个任务,组成流水线,如下图所示:
假设任务定义和任务之间的依赖关系都保存在文件中,文件格式分别如下:
问题:
1,下图是etl调度系统的模块图。
请描述各个模块的主要职责,以及各个线条的含义。
(10
分)
2,添加依赖关系时要避免产生环,假设系统同一个时刻只允许一个人添加任务依赖,请实
现一个函数来检查新的依赖是否导致环,如果该依赖的上游存在环会导致非正常的调度,因此也希望能避免。
(10分)
a)函数名:
checkcycle
b)输入:
pairs,已存在的依赖关系((pre,post)),newpair新的依赖关系(pre,post)c)输出:
true:
不存在环,False:
存在环
3,如果调度时,某个任务在其依赖的任务之前执行,必然导致错误,请实现调度算法,确
保任务按照依赖顺序执行?
(10分)
a)函数名schedule
b)输入1:
tasks,整型数组
c)输入2:
tasks-relations,二元组数组,每个二元组表示一组关系
d)输出:
task_id序列,并行执行的用“,”分隔,其他的用“;”分隔
4,给定一个任务,如何计算出他的最晚完成时间?
(10分)
a)函数名:
calmaxendtime
b)输入1:
tasks,3元组数组,(task_id,start_time,max_run_time);
c)输入2:
task-relations,2元组数组,每个二元组表示一组关系;
d)输入3:
task-id
e)输出:
最晚完成时间;
篇三:
一套软件开发工程师笔试题
(1)select*fromempewheree.noin(selecta.nofromampa)
select*fromempeewherenotexists(selecta.nofromampawheree.no=a.no)
(2)select*fromempe,anpawheree.no=a.no
2、用decoole重写下面的socl语句selectcount(*),sum(sal)FRomempwheRedept_no=0020andenamelikesmith%;selectcount(*),sum(sal)fromempwheredept_no=0030andenamelikesmith%;
selectcount(decode(dept_no,0020,x,null))d0020_count,count(decode(dept_no,0030,x,null))d0030_count,sum(decode(dept_no,0020,sal,0))d0020_sal,
sum(decode(dept_no,0030,sal,0))d0030_sal
fromempwhereenamelikesmith%;
3、下面哪几种sql不好。
2,4,5
(1)update语句
(2)in语句(3)子查询(4)多查等值查询(5)笛卡尔乘积4、请造出下列哪3种命名正确a,b,d
a、asdb、$abcc、constd、_asde、3_asd
5、texareajava
(1)写出文件名
(2)补充代码
6、型转换
example:
publicstringgetValue(objecta,objectb){}
当下列方法调用时将出现何种异常,如何修正stringc=newstring(“aaa”);intd=123;
my.getValue(c,d);
(1)integerd=newinteger(123);
(2)my.getValue(c,(string)d);
7、在jsp上显示araylist中的元素
arraylistal=request.getattribute(“arraylist”);
%>
%>
}
%>
序号姓名
8、解释
beam:
远程接口的具体实现
home:
管理和创建远程对象
Romate:
提供给用户的远程接口
9、解释javabean与ejb的区别
10、sessonbean与entitybean区别
11、解释commend、dao模式,试举例说明。
command定义
不少command模式的代码都是针对图形界面的,它实际就是菜单命令,我们在一个下拉菜单选择一个命令时,然后会执行一些动作,将这些命令封装成在一个类中,然后用户(调用者)再对这个类进行操作,这就是command模式,换句话说,本来用户(调用者)是直接调用这些命令的,如菜单上打开文档(调用者),就直接指向打开文档的代码,使用command模式,就是在这两者之间增加一个中间者,将这种直接关系拗断,同时两者之间都隔离,基本没有关系了.
显然这样做的好处是符合封装的特性,降低耦合度,command是将对行为进行封装的典型模式,Factory是将创建进行封装的模式,
喜欢在不同类中增加第三者,当然这样做有利于代码的健壮性可维护性还有复用性.
如何使用
具体的command模式代码各式各样,因为如何封装命令,不同系统,有不同的做法.下面事例是将命令封装在一个collection的list中,任何对象一旦加入list中,实际上装入了一个封闭的黑盒中,对象的特性消失了,只有取出时,才有可能模糊的分辨出:
典型的command模式需要有一个接口.接口中有一个统一的方法,这就是”将命令/请求封装为对象”:
程序代码:
publicinterfacecommand{publicabstractvoidexecute();}
//具体不同命令/请求代码是实现接口command,下面有三个具体命令
程序代码:
publicclassengineerimplementscommand{
publicvoidexecute(){//doengineerscommand}
}
publicclassprogrammerimplementscommand{
publicvoidexecute(){//doprogrammerscommand}
}
publicclasspoliticianimplementscommand{
publicvoidexecute(){//dopoliticianscommand}
}
按照通常做法,我们就可以直接调用这三个command,但是使用command模式,我们要将他们封装起来,扔到黑盒子list里去:
程序代码:
publicclassproducer{publicstaticlistproduceRequests(){listqueue=newarraylist();
queue.add(newdomesticengineer());
queue.add(newpolitician());queue.add(newprogrammer());returnqueue;}
}
这三个命令进入list中后,已经失去了其外表特征,以后再取出,也可能无法分辨出谁是engineer
谁是programmer了,看下面如何调用command模式:
程序代码:
publicclasstestcommand{
publicstaticvoidmain(string[]args){
listqueue=producer.produceRequests();
for(iteratorit=queue.iterator();it.hasnext();)
//取出list中东东,其他特征都不能确定,只能保证一个特征是100%正确,//他们至少是接口command的”儿子”.所以强制转换类型为接口
command((command)it.next()).execute();
}}
dao:
由此可见,调用者基本只和接口打交道,不合具体实现交互,这也体现了一个原则,面向接口编程,这样,以后增加第四个具体命令时,就不必修改调用者testcommand中的代码了.
12、谈一下对“保障软件质量”的理解。
有效的软件质量管理
一、引言随着社会信息化水平的不断提高,信息行业急速膨胀,信息企业快速成长,随之带来的信息市场竞争激烈,企业为了求生存,满足客户要求则成为各行各业的首要责任。
依赖于质量、成本和进度的客户满意度,质量则是重点支撑之一,这样要求我们对质量管理需要加强认识。
我们都知道pmbok把项目管理划分为9个知识领域,即范围管理、时间管理、成本管理、质量管理、人力资源管理、沟通管理、采购管理、风险管理和综合管理。
质量管理作为9大知识领域之一,可见其重要性。
质量管理包括:
质量计划编制、质量保证和质量控制三个过程域。
质量计划是质量管理的第一过程域,它主要结合各个公司的质量方针,产品描述以及质量标准和规则通过收益、成本分析和流程设计等工具制定项目相关人员了解在项目进行中如何实施质量保证和控制提供依据,为确保项目质量得到保障提供坚实的基础。
质量保证则是贯穿整个项目全生命周期的有计划和有系统的活动,经常性地针对整个项目质量计划的执行情况进行评估、检查与改进等工作,向管理者、顾客或其他方提供信任,确保项目质量与计划保持一致。
质量控制是对阶段性的成果进行检测、验证,为质量保证提供参考依据,它是一个pdca循环过程。
二质量管理责任分配
我们公司在开发项目上按照规范化软件的生产方式进行生产,在生产流程上采用iso9000的标准进行。
每个项目除配备了项目开发所需角色外,还专门配备了配置管理小组、测试小组和质量保证小组确保质量管
理的实施,下面针对这三种角色进行说明:
配置管理小组是保证项目开发完毕的同时,内部文档和外部文档都同时完成。
内部文档的及时产生和规范,是保证项目开发各小组能够更好的接口和沟通的重要前提,从另一个方面讲,也是保证工程不被某个关键路径所阻塞而延滞的前提。
如上所述,配置管理小组还是保证质量保证小组得以发挥作用的基础。
配置管理小组的主要职责包括:
完善各个部门发送需要存档和进行版本控制的代码、文档(包括外来文件)和阶段性成果;对代码、文档等进行单向出入的控制;对所有存档的文档进行版本控制;提供文档规范,并传达到开发组中。
2、测试小组职责
测试小组作为质量控制的主要手段,负责软件的测试设计和执行工作。
如同软件开发一样,测试在执行之
前,同样需要进行测试计划和测试策略的设计,通常情况下测试可以分为如下几种类型,如:
正确性测试、功能性测试、性能测试、安全测试和系统测试等。
而这些测试均需要在测试计划和测试策略中进行描述用确保程序编译、运行正确。
测试人员根据详细设计的文档对软件要实现的功能进行一一测试,保证软件的执行正确的实现设计要求,在此也只证明了软件正确的反映了设计思想,但是否真正反映了用户的需求仍需要进一步的功能性测试。
测试人员只有根据软件需求规格说明书所提及的功能进行检测,才能确保项目组开发的软件产品满足用户需求。
在正确性测试完成之后,需要测试的是软件的性能,软件的性能在本项目中占有重要的地位,性能要求有可能改变软件的设计,为避免造成软件的后期返工,测试在性能上需要较大的侧重。
如果有必要的话,测试小组还需要做安全测试,以确保系统使用安全可靠。
3、质量保证小组职责
质量保证小组作为质量保证的实施小组,主要职责是保证软件透明开发的主要环节。
在项目开发的过程中几乎所有的部门都与质量保证小组有关。
质量保证小组对项目经理提供项目进度与项目真正开发时的差异在项目进度被延滞或质量保证小组认为某阶段开发质量有问题时,提请项目经理、项目负责人等必要的相关人员举行质量会议。
解决当前存在的和潜在的问题。
质量保证是建立在文档的复审基础之上,因而文档版本的控制,特别是软件配置管理,直接影响软件质量保证的影响力和力度。
质量保证小组的检测范围包括:
系统分析人员是否正确的反映了用户的需求;软件执行体是否正确的实现了分析人员的设计思想;测试人员是否进行了较为彻底的和全面的测试;配置管理员是否对文档的规范化进行的比较彻底,版本控制是否有效。
三质量管理实施
有了良好的资源配备,又如何在项目全生命周期内实施质量保证,让我们从以下几个方面来看质量保证的实施过程:
1、项目进度的质量保证
项目进度是项目进行是否顺利的最直观表现。
显然在项目开始之前,项目开发计划是必须的。
如果项目开
发计划的制定的是完全合理的,那项目进度也就真正表达了项目与最终的交付使用之间的距离,然而要制定完全合理的项目开发计划几乎不太可能。
可见要保证项目进度,首先要保证项目开发计划尽可能合理。
能够预
见潜在的阻碍,这样要求项目计划制定者需要集众人之力来完善计划。
当项目计划制定初期,由质量保证小组组织召开的项目计划评审会,邀请公司技术专家、用户以及项目组小组成员一起讨论项目计划的可行性,会议通常采用头脑风暴法,各抒己见,会后由指定的记录员形成质量记录,发送给相关人员,对其计划中不合理的地方进行修改完善,并由质量保证人员对其结果跟踪,以确保项目计划完整性、可行性,完善后的计划交由配置管理人员进行版本控制。
然而在计划实施过程中,计划不是“固定化”。
常有人道,“计划赶不上变化”,但“要跟上变化”。
项目计划以里程碑为界限,将整个开发周期划分为若干阶段。
根据里程碑的完成情况,适当的调整每一个较小的阶段的任务量和完成的任务时间,这种方式非常有利于整个项目计划的动态调整。
也利于项目质量保证的实施。
实际运作中,当质保小组发现计划实施的差异后,报告项目经理,由项目经理组织负责对计划进行周期性维护,对于已经变动的计划由质保小组协助配置管理小组完成版本控制。
本公司已经开发湖南移动的集中客服系统,开发中的子项目多达六个,历时十个月,目前多数项目已经开发完毕,系统正在试运行阶段,项目金额数千万元。
在这样的项目中,从管理者到开发人员到测试人员都积累了较为丰富的经验,特别是项目开发计划的制定,和项目进度的控制。
2、项目开发各阶段的质量保证