精华内容
下载资源
问答
  • 大数据有一个特点,就是数据大,因此如果能提高代码本身的运行效率,或者是使得代码在分布式机器上能更好的进行计算,就会极大的...要先回答这个问题,我们得搞清楚hive代码的运行机制,有多少个步骤,在每个步骤上是

    大数据有一个特点,就是数据量大,因此如果能提高代码本身的运行效率,或者是使得代码在分布式机器上能更好的进行计算,就会极大的节省时间成本或者是资源成本。所以,本节想给大家分享下hive的优化。

    引言——优化思路

    首先是一个思路的问题。hive代码该怎么去优化呢?从哪里着手?
    显然这是代码跑的比较慢之后,最先想到的两个问题。要先回答这个问题,我们得搞清楚hive代码的运行机制,有多少个步骤,在每个步骤上是否有优化空间。
    其实HiveQL是一个映射器,将MapReduce过程映射成了HiveQL代码,因此代码的执行过程大致也就是三个步骤:将HiveQL代码解析成MP过程、Map阶段和Reduce阶段。
    所以我们hive代码的优化也是围绕着这三个阶段来进行的。

    hive优化总结

    最近看到了一篇博客,觉得还不错,给大家分享下:
    http://blog.csdn.net/liyaohhh/article/details/50697519

    文中讲到了几种优化策略:
    1、控制Hive中Map和reduce的数量。 Hive中的sql查询会生成执行计划,执行计划以MapReduce的方式执行,那么结合数据和集群的大小,map和reduce的数量就会影响到sql执行的效率。
    除了要控制Hive生成的Job的数量,也要控制map和reduce的数量。

    在此,博主提到了Map和Reduce个数的计算方式:
    Map的个数

    map的数量,通常情况下和split的大小有关系。 如果要减少map数量, 可以调大mapred.max.split.size,
    否则调小即可. 其特点是: 一个块至多作为一个map的输入,一个文件可能有多个块,一个文件可能因为块多分给做为不同map的输入,
    一个map可能处理多个块,可能处理多个文件。

    reduce的个数

    reduce数量由以下三个参数决定, mapred.reduce.tasks(强制指定reduce的任务数量)
    hive.exec.reducers.bytes.per.reducer(每个reduce任务处理的数据量,默认为1000^3=1G)
    hive.exec.reducers.max(每个任务最大的reduce数,默认为999) 计算reducer数的公式很简单N=min(
    hive.exec.reducers.max ,总输入数据量/ hive.exec.reducers.bytes.per.reducer )
    只有一个reduce的场景: a、没有group by 的汇总 b、order by c、笛卡尔积

    2、join和Group的优化
    2.1 对于普通的join操作,会在map端根据key的hash值,shuffle到某一个reduce上去,在reduce端做join连接操作,内存中缓存join左边的表,遍历右边的表,一次做join操作。所以在做join操作时候,将数据量多的表放在join的右边。
    当数据量比较大,并且key分布不均匀,大量的key都shuffle到一个reduce上了,就出现了数据的倾斜。
    2.2 对于Group操作,首先在map端聚合,最后在reduce端坐聚合,hive默认是这样的,以下是相关的参数
    · hive.map.aggr = true是否在 Map 端进行聚合,默认为 True
    · hive.groupby.mapaggr.checkinterval = 100000在 Map 端进行聚合操作的条目数目

    当然有的hive操作,不存在数据倾斜的问题,比如数据聚合类的操作,像sum、count,因为已经在map端做了聚合操作了,到reduce端的数据相对少一些,所以不存在这个问题。

    3、小文件的合并
    大量的小文件导致文件数目过多,给HDFS带来压力,对hive处理的效率影响比较大,可以合并map和reduce产生的文件。

    · hive.merge.mapfiles = true是否和并 Map 输出文件,默认为 True
    · hive.merge.mapredfiles = false是否合并 Reduce 输出文件,默认为 False
    · hive.merge.size.per.task = 256*1000*1000合并文件的大小

    4、in/exists(not)
    通过left semi join 实现 in操作,一个限制就是join右边的表只能出现在join条件中

    5、分区裁剪
    通过在条件中指定分区,来限制数据扫描的范围,可以极大提高查询的效率。

    6、排序
    order by 排序,只存在一个reduce,这样效率比较低。
    可以用sort by操作,通常结合distribute by使用做reduce分区键
    7、数据倾斜
    其实地2点已经讲到了数据倾斜,但是在此还是想再深化一下数据倾斜。
    大数据不怕大就怕倾斜,一旦数据倾斜了,相当于用一台机器或者少量的几台机器完成大量任务,完全没有发挥分布式的优势。

    数据倾斜就是由于数据分布不均匀,数据大量集中到一点上,造成数据热点。大多数情况下,分为一下三种情况:

    map端执行比较快,reduce执行很慢,因为partition造成的数据倾斜。
    某些reduce很快,某些reduce很慢,也是因为partition造成的数据倾斜。
    某些map执行很快,某些map执行很慢,这是因为数据本身的分布的不合理性造成的。

    造成上面reduce和map任务运行很缓慢本质上就两种情况:

    第一:reduce缓慢是因为partition造成滴;
    第二:map端缓慢是因为数据本身的分布不合理性。

    下面介绍map缓慢和reduce缓慢

    Reduce端缓慢:两个table的join操作会造成数据倾斜,会造成reduce缓慢,这个相对比较好解决,我们不是有三种解决join性能的方案吗?mapjoin,common join,smbJoin可以解决数据倾斜。另外,有些情况下造成的reduce缓慢无法解决,因为数据本身也不是服从均匀分布。大多数还是高斯分布。
    reduce性能本质上是由于groupby操作导致的,而count(distinct)内部本质也是有groupby实现

    map端缓慢:这种情况是由于每条数据的相对位置造成的。有两种方案:

    第一:设置在map端聚合,set hive.map.aggr=true 可以减小压力(默认开启)
    第二:可以set hive.groupby.skewindata=true(默认关闭),此时hive的执行在MR后台会存在两个map一个reduce,第一个map本质上就是先对数据进行shuffle,第二个map就可以对shuffle之后的数据进行操作。

    展开全文
  • 贝岭的matlab的代码项目 03:堆管理 这是 . 学生们 多默·麦克多默森 () 百合花 () 头脑风暴 以下问题可以帮助您思考如何实施 . 对于这个项目,不需要回答这些头脑风暴问题。 堵塞 释放Block : 你如何确定你释放的...
  • 第三,实践类的操作系统书籍还是太少了,以至于你要想看看别人是怎么做的,除了读以《操作系统:设计与实现》为代表的极少数书籍之外,就是一头扎进源代码中,而结果有时相当令人气馁。我自己也气馁过,所以我在第二...
  • 第三,实践类的操作系统书籍还是太少了,以至于你要想看看别人是怎么做的,除了读以《操作系统:设计与实现》为代表的极少数书籍之外,就是一头扎进源代码中,而结果有时相当令人气馁。我自己也气馁过,所以我在第二...
  • ”这些话,真烦人,写个程序做为我的 Proxy 吧,凡是接收到这些话都设置好了 自动的回答,接收到其他的话时再通知我回答怎么样,酷吧。 代理模式: 并由代理对象控制对源对象的引用。 代理模式 代理模式给某一...
  • 最拿手的计算机语言之一,代码量多少 C/C++,代码量在8-10W 语言 最拿手的计算机语言之一,代码量多少 Java,代码量在1-2W 软件实现 你有没有在别人的代码基础上进行改进,你是怎么读懂别人的代码,你采取什么...

    alpha阶段个人总结

    一、个人总结

    类型 具体技能和面试问题 现在的回答
    语言 最拿手的计算机语言之一,代码量多少 C/C++,代码量在8-10W
    语言 最拿手的计算机语言之一,代码量多少 Java,代码量在1-2W
    软件实现 你有没有在别人的代码基础上进行改进,你是怎么读懂别人的代码,你采取什么方法来保证你的新功能不会影响原来的功能,你在开发中遇到的最复杂的bug是什么,怎么解决,bug出现的原因,你在将来应该怎么去避免bug再出现 有过。如果有注释的代码会比较好读,没有注释的可以自己加注释帮助理解,还有就是反复读。因为改进别人的代码,所以只要将要加的功能以模块的方式实现即可。我在开发中遇到的bug太多了……也说不上什么是最复杂的,经常调bug调个一两天。自己多注意边界条件可以稍微减少bug的出现。
    软件测试 你是怎么测试自己的代码,怎么测试别人的代码。你掌握了多少种测试工具和方法?你写过测试工具吗?你如何对一个网站进行压力测试和效能测试?你如何测试一个软件的人机界面? 使用输出语句进行测试,因为我们老师说使用调试只会降低代码能力,他做项目的时候从来不用调试。使用输出测试用的最多,断点调试也有过。没写过测试工具。使用不同的用户数和并发数访问可以完成。有自动化工具随机生成点击和输入的动作可以测试软件的人机界面
    效能测试 你写过最复杂的代码是什么?你是如何测量和改进它的效能的,用了什么工具,如何分析的? poj 3266,一道分数规划的题目。通过poj的提交结果来测量效能。一开始的时间复杂度太高了,所以需要维护一个凸包来实现斜率优化。直接估算时间界来分析
    需求分析 你做过多少个有实际用户的项目,用户最多有多少?你的项目有什么创新的地方? 完整地做一个项目是个数据挖掘的,没有用户,只是研究和教学使用。也没有创新的地方,因为后来发现我的方法别人做过了。
    行业洞察力 你最感兴趣的领域是什么?这个领域过去10年经历了哪些创新?你分析过这个领域前10名的产品吗?请分析一下他们的优劣。你要进入这个领域,应该如何创新? 计算机图形学和数据挖掘。其实是两个。因为跟老师做项目,所以接触上就比较喜欢。但是因为现在还在学基础,对于前沿的东西了解甚少。大概知道搞深度学习的有TensorFlow、Caffe、Keras这些框架。我要进入这个领域,要创新先要好好学习,扎实基础。
    项目管理 你参加过项目管理吗,请描述一下两个当下流行的开发方法在你的项目中的具体应用情况。如何决定各个任务的优先顺序,有什么理论来支持你的做法?如果项目不能及时完成,你要怎么办? 经历了alpha阶段就参加过啊。我们这次要求就是敏捷开发的方法啊。按照任务的难度和重要性来决定优先顺序,没什么理论,只是觉得这样合适。如果项目不能及时完成,就加班。
    软件设计 你做过架构设计,模块化设计,接口设计吗?请说明一下你为何是这样设计的,你比较过不同的设计方式吗?你的设计取得了什么结果? 模块化设计和接口设计是有过的。因为写代码需求,所以需要这样设计,降低耦合度。没有比较过。取得的结果是写代码起来会比较优雅,易读性和可维护性也会好一些。
    质量意识 你是怎么做代码复审的 读代码、运行并测试。
    工具/社区 你再各种开发平台上都是用过什么样的工具?自己写过工具来改进工作效率?给社区贡献过什么工具和代码?Github有分享代码吗?你写的技术博客坚持了多久,读者最多的是哪一篇? VS上的番茄助手、皮肤管理器(换上老婆的照片),Eclipse的Git工具。没有自己写过工具。没有GitHub。写作业就得坚持写博客。读者最多的是被老师分享的结对编程的博客。
    团队协作 描述你在项目中如何说服同伴采取你更好的方案,或是听取别人的意见改进自己的方案,如何说服懒惰的同伴加紧工作 摆事实、讲道理。如果别人讲的自己觉得有道理就会改进。对于懒惰的同伴只会提醒一到两次,提醒不动就算了,很浪费时间。
    理论素养 你上过什么数学,计算机或是理论课,举出具体的例子,如何帮你解决问题 微积分、线性代数、概率论(很少的数理统计)、数论、离散数学(里面很多……)、数据结构、算法、操作系统、凸优化(自己看过一点点)、实分析(自己看过一点点)……在学习数据挖掘和三维重建的时候,很吃数学,觉得自己好像没学过数学。很多是线性代数吧(尤其是矩阵,emmm...我们又教得非常浅,只能自学……)
    自我管理 全年级你专业排名多少?你从刚入学(大学一年级)到现在的排名有变化吗?如何解释你的排名的变化? 1,没有,没什么好解释的,大家只是把时间花在了他们认为更重要的事情上去。无可厚非。然后我是一个书呆子,就这样。

    二、回答问题

    我之前提问的链接在这边
    问题1:我认为数据结构和算法作为选修课更好,我看大家的项目,确实跟算法没有多少关系。也就是说这个东西并不是开发项目的必要条件。但是我问这个问题最重要的目的是想知道老师是怎么想的。

    问题2:这个问题我没法回答。

    问题3:我觉得这些难以发现的好功能和认知阻力大的软件就是让专业使用人员使用的。但是还是希望老师或助教能够解答这里面我问的所有问题。

    问题4:我还是很想知道,在所有书差不多一种目录排版的情况下,为什么这本书却要在这个地方创新,我觉得这里面肯定是有原因的。

    问题5:我还是不知道怎么权衡,不知道以什么态度对待这门课,尤其是alpha阶段过去之后。

    其实我所有问题都是结合书本上下文的,但是相应的分数都么得,大概助教想让我专门单开一行告诉他们我是从这边这边引用的吧。

    助教打分的时候,请看一下我问的这些问题是否应该是完成了alpha阶段应该回答上来的问题。
    这部分的分拿不拿得到,我已经无所谓了。

    三、再提问题

    问题1:
    为什么问问题是个作业,还拿来评分?
    上下文:http://www.cnblogs.com/happyzm/p/8989064.html
    自己的看法:问了5个问题或者是更多的问题代表了什么?表示有好好看过书吗?我感觉是不是要打一个问号,问出来的问题真的是书里面抛出来的,但又没有解释的,还是仅仅只是因为自己草草地看了遍书,但是又没有自己的思考,所以觉得是个问题的?助教在评分的时候,有没有看这些问题是不是值得问呢?有没有觉得很难量化?好,那这个作业考察的到底是什么呢?

    问题2:
    这种软件工程新的教学方法,在不同的学校有没有具体问题具体分析?如果不需要差异化,请具体解释原因,顺便再解释一下为什么不同学校的其他科目的教学难度都有所区别,是否也觉得很不合理?相反,如果有差异化的话,请举例分析。
    上下文:这门课程就是上下文
    自己的看法:没什么自己的看法,因为我不知道这门课取得怎么样的教学结果是老师乐于看到的,觉得是理想的。还有其他学校的具体施行情况我也不知道,所以问一下。

    问题3:
    软件工程师开发软件和医生开刀为什么能够类比?
    上下文:“刚刚在书上看到你的病例,开刀的过程中非常认真严谨,时不时还要停下来翻书看看”
    自己的看法:没有看法,纯问问题。具体说明一下问题,需要解释什么样的软件工程师类比什么样的医生。

    问题4:
    为什么要把自己的杀手功能摆出来,到底什么是杀手功能?
    上下文:http://www.cnblogs.com/happyzm/p/8675401.html “分析自己项目的杀手功能是什么?”
    自己的看法:杀手功能是什么?书上说这是差异化,我有人无的优势。好,太抽象了。我们再细分一下,是别人没想到的,还是别人做不到的?我看了这次作业,我觉得好像是后者。因为前者显然不符合杀手功能,我把我自己的杀手功能说出来,然后告诉做相同项目的团队,来看啊,我们做了这个,有意思吧?想不到吧?而且看下时间,需求分析的时候就要摆出来,然后正好大家一起实现你绞尽脑汁的杀手功能,是这样吗?

    问题5:
    为什么必应还不改他们的实时单词解释?
    上下文:“……但是这个功能把鼠标所在的所有英语单词都解释一下,包括小学生都懂的‘啊a,of,at,on,and,the,he,she,...’”
    自己的看法:我没有看法,助教们评分的时候谈谈自己的看法。

    转载于:https://www.cnblogs.com/ljl36/p/9060269.html

    展开全文
  • 最拿手的语言之一,代码量多少 java,代码量大概两三千行吧 语言 最拿手的语言之二,代码量多少 python,代码量一千行 软件实现 你有没有在别人的代码的基础上改进?你是怎么读懂别人的代码,你采取什么...

    一、个人总结

    自我评价表

    类别 具体技能和面试问题 现在的回答 毕业找工作
    语言 最拿手的语言之一,代码量是多少 java,代码量大概两三千行吧
    语言 最拿手的语言之二,代码量是多少 python,代码量一千行
    软件实现 你有没有在别人的代码的基础上改进?你是怎么读懂别人的代码,你采取什么方法不影响原来的功能,遇到的bug是什么,怎么解决,bug出现的原因 1.有改进,在之前对学长学姐的代码进行重构的时候有对他们的代码进行改进;2.一般编程规范的人在代码的关键部分有注释,使我很容易看懂他们的代码;3.因为每个功能都对应着相应的函数,只要在函数内修改就好了,遇到的bug是原来就存在的bug,当出现bug的时候,可以在出错的地方用输出语句输出相关的值,可以起到调试的作用,bug的原因主要还是逻辑上的错误;
    软件测试 你是怎么测试自己的代码,怎么测试别人的代码 采用eclipse自带的测试工具,以及在关键点设置输出语句
    需求分析 你做过多少个有实际用户的项目,用户人数多少,你的项目有什么创新之处 目前没有
    行业洞察力 你最感兴趣的领域是什么,这个领域过去十年有什么创新,你分析过这个领域前十的产品吗,请分析一下他们的优劣,你要进入这个领域,如何创新 感觉自己感兴趣的领域很多,现的主攻方向是网络运维;在这个方面思科,华为,华三,还有锐捷都做的很好;感觉自己还才疏学浅,谈不上要如何创新
    项目管理 你参加过项目管理吗,如何决定各个任务的优先顺序,如果项目不能及时完成,你要怎么办 根据市场的调研情况对项目的所做的产品定下一个大概的方向,然后将整个项目分为若干个模块,团队中的每个人都会被分配到一个模块,然后有计划的完成一个又一个阶段的目标;如果没能完成,要考思考一下如何将项目没做完造成的损失降到最小,然后思考是哪个环节或哪些事情出了问题,导致没有按计划完成项目
    软件设计 你做过架构设计,接口设计,模块化设计吗?你比较过不同的设计方式吗?你的设计取得什么成果? 做过小项目的架构设计,接口设计等;没有比较过不同的设计方式;我的设计成果就是按之前的设计完成项目。
    质量意识 你是怎么做代码复审的?你加入团队后,能帮助提高代码质量吗?请具体说是怎么提高的? 首先代码必须成功编译,接着用专门的调试器进行测试;我写的代码可能不是特别的“好看”,每次还要队友指点,才能写得不是那么丑陋
    工具/社区 你在各开发平台用过什么样的工具?你自己写过什么工具提高效率?在社区有贡献过什么工具和代码?你的技术博客坚持了多久?读者最多的是那一篇? 比如DEV,sublime Text, C++,CodeBlocks,Eclipse,sqlserver,netbean等,自己还没写过一些工具提高工作效率,也没有写过一些技术博客
    团队协作 描述你在项目中如何说服同伴采取你更好的方案,或是听取别人的意见改进自己的方案,如何说服懒惰的同伴加紧工作 当自己有不同的意见时我会讲出自己的观点,并将自己的观点与原来的方案进行对比,讲出两者相比后其中的优劣,对于懒惰的同伴可能会督促他加紧工作
    理论素养 你上过什么数学,计算机或其他理论课,请举出具体的例子说明你把学到的理论知识应用到实际中 C语言,java,数据结构,操作系统;具体的应用可能很少,但是学习计算机后培养的逻辑思维在生活中给我的帮助倒是很多,对于数据结构中的一些算法,早就在实际生活中广泛应用了
    自我评价 全年级专业排名多少》你刚入学到现在的排名有变化吗?如何解释你排名的变化? 刚入学可能是70多名,现在是20多名;最大的变化还是思维上的,学习计算机专业后提高了自己的逻辑思维,有条理有计划的去对一件要做的事情进行规划,并努力完成它

    二、回答问题:我们在课程开始之初,曾经要求大家针对软件工程提出问题:个人阅读作业2,那么在经过alpha阶段,大家是否对软件工程有了一定的了解?请结合自己提出的问题进行回答

    Q1、p185第八章需求分析中,一个团队完成项目时可以采用“分而治之”的方法,对于这种方法,是做项目时的正常逻辑思维,但是将大的工程细化为一个又一个小的工程时,这些小的工程在做的时候又会存在千丝万缕的关系,我们应该如何处理呢?

    经过这次Alpha的冲刺阶段,着实是让我理解了分而治之的方法的重要性。在这次团队合作的过程中,我们的项目分为前端,后端,UI设计,调试与测试这几个部分,我与一位高大“威猛”的男同学负责后端,我俩又将编写后端这个任务细化为与前端的通信交互以及后端与数据库的交互两个方面,在冲刺过程中确实如我所提到的问题一样,这些细化后的工程仍然存在的千丝万缕的联系,我俩的工作更像是结对编程,大部分的代码都是与他在一起完成的,在编写过程中经常会相互交流,规定一些细节上的问题,所以针对我之前的问题,最好的解决方法就是“交流”,经常的与队友进行交流,避免自己做许多无用功。

    Q2、“如果某个看似不明显的交互操作解释过一次之后,就很容易理解,那么这就是一个好设计”,当所完成的软件不是那么容易理解,用户在按步骤操作了几步之后就可能会失去耐心转而寻找其他代替软件时,那么该如何进行UI的设计呢?

    这次在我们团队中,进行UI设计的同学真的是很厉害,细节方面设计的都很合理,使我觉得最好的方法就是在借鉴一些同类优秀产品设计方法的同时再加上自己的一些有趣的设计,尽可能得简化UI设计,能让大家一眼就看懂,这个按钮的作用是什么。

    Q3、除了“写了再改模式”其他的团队发模式是否真的适合大学生团队在学习软件工程这门课的初期进行团队开发?

    我认为如果大家努力将自己的项目的一个功能或两个功能完成好,那么就可以不会再遵循“写了再改模式”

    三、再提问题 大家一定会在实践过程中产生更多问题, 结合你的读书(教材,博客,参考书), 实践, 再提出关于软件工程的 5 个问题。

    Q1、在这次冲刺的过程中,我发现PM的工作至关重要,在任何一个项目中,如何才算是一个合格的PM?PM和其他人员的关系如何处理(尤其是在要有人员流动的情况下)?

    Q2、技术产品的发展周期(萌芽->成长->成熟->衰退->结束),但是目前看来例如像微信,淘宝,支付宝,这样的产品似乎不会衰退或者结束,那么这个发展周期的规律所对应的是哪些技术产品的发展周期?

    Q3、在遇到技术瓶颈的时候,如果一时没有什么好的解决方法该怎么办?

    Q4、在团队冲刺的过程中,发现站立会议有一些拘泥于形式,不是很理解站立会议的深刻意义?

    Q5、这次可能会换到其他的团队,该如何迅速在新的团队中找到自己的定位?

    转载于:https://www.cnblogs.com/JMUNJF/p/9060828.html

    展开全文
  • 个人作业4

    2019-09-25 08:16:40
    最拿手的计算机语言之一,代码量多少 java,代码量大概八千左右吧 语言 最拿手的计算机语言之二,代码量多少 C语言,代码量大概两千左右吧 软件实现 (阅读代码的能力,实现,单元测试)有没有在别人的...

    一、个人总结

    自我评价表

    类别 具体技能和面试问题 现在的回答 毕业找工作
    语言 最拿手的计算机语言之一,代码量有多少 java,代码量大概八千左右吧
    语言 最拿手的计算机语言之二,代码量有多少 C语言,代码量大概两千左右吧
    软件实现 (阅读代码的能力,实现,单元测试)有没有在别人的代码基础上进行改进,你是怎么读懂别人的代码,你采取什么方法不影响原来的功能?你在开发中遇到的最复杂bug是什么,怎么解决的?这个bug出现的原因是什么,你在未来应该怎么避免bug的再出现? 有;强行看,看不懂的百度;新功能避免占用原来功能的资源;最复杂的bug...想不起来了T T
    软件测试 (测试方法、测试工具、测试实践、代码覆盖率)你是怎么测试自己的代码?怎么测试别人的代码?你掌握了多少种测试工具和方法?你写过测试工具么?你如何对一个网站进行压力测试和效能测试?你如何测试一个软件的人机界面(UX/UI)? 添加测试用例;添加测试用例;勉强算一种吧;仅会在eclipse上进行简单测试;没有;不知;不甚了解
    效能分析 (效能分析,效能改进)你写过的最复杂的代码是什么?你是如何测量和改进它的效能的,用了什么工具,如何分析的? java课设写的学生管理系统吧;啊...没测
    需求分析 (需求分析、典型用户、场景、创新)你做过多少个有实际用户的项目,用户最多有多少?你的项目有什么创新的地方? 之前没做过,这次软工小程序做成的话就算一个,因为目前还未发布,用户数未知;便捷记录开支
    行业洞察力 你最感兴趣的领域是什么?这个领域过去十年有什么创新?你分析过这个领域前十的产品吗?请分析一下他们的优劣,你要进入这个领域,如何创新? 说实话,计算机这方面的都不怎么感兴趣(逃...)人工智能还是有点点兴趣的;正在不断发展,成为目前最火热的领域,没分析过;开发出全新的东西
    项目管理 你参加过项目管理吗?如何决定各个任务的优先顺序?如果项目不能及时完成,你要怎么办? 参与过;按时间紧急程度排序;将最主要的功能完成予以交付,后抓紧时间补救补充
    软件设计 你做过架构设计,模块化设计,接口设计么?请说明一下你为何是这样设计,你比较过什么不同的设计方式,你的设计取得了什么结果? 做过接口设计;更加简洁明了;只设计过一种,无法比较
    质量意识 (代码复审/代码规范/代码质量)你是怎么做代码复审的,你加入我们团队后,能帮我们提高代码质量么,请具体说明怎么提高? 保证功能的前提下将冗余代码删除,创建接口并使用Dao模式
    工具/社区 Software Tools(performance tool,version control,work item,TFS)你在各种开发平台(web,linux,PC,mobile,macheine learning)都使用过什么样的工具,自己写过什么工具来改进工作效率?给社区贡献过什么工具和代码?GitHub有分享代码么?你写的技术博客坚持了多久,读者最多的是哪一篇? CodeBlocks/Visual C++ 6.0/myeclipse/微信web开发者工具;没贡献过啥;没分享过;坚持了一年两个月,都是写作业的博客,阅读量平平
    团队协作 Work with others(协同合作,提供反馈,说服别人)请描述你在项目中如何说服同伴采取你更好的方案,或是听取别人的意见改进自己的方案?如何说服懒惰的同伴加紧工作 团队开会并讨论,口头劝说,若同伴不改进就将实际情况验证给他看(时间效率更高、前端设计大多数人更喜欢等等);让同伴意识到事情的重要性,deadline是第一生产力
    理论素养 你上过什么数学,计算机或是理论课,举出具体的例子,如何帮你解决问题 高数、离散、概率论、计算机组成原理、线性代数等;高数吧,比如斐波那契函数编写就需要用到高数知识
    自我管理 全年级你专业排名多少?你从刚入学(大学一年级)到现在排名有变化么?如何解释你的排名的变化? 大三上排名40多吧,具体记不得了;有变化大学一二年纪成绩都在二三十名左右;原因是:慢慢确定自己不向计算机方面发展,多放心思在自己更感兴趣的地方了

    1.(c) 保持高标准,不要受制于破窗理论(broken windows theory)[i]。当你看到不靠谱的设计、糟糕的代码、过时的文档和测试用例的时候,不要想 “既然别人的代码已经这样了,我的代码也可以随便一点啦。

    a)从来没听说过;

    b)我就是这样随便过来的;

    c)如果有明确要求,我可以做好。

    d)一直主动这样做

    e)不但主动做, 还会影响同事一起做好

    2.(c) 主动解决问题。当看到不靠谱的设计,糟糕的代码的时候,不要想“可能别人会来管这个事情” ,或者“我下个月发一个邮件让大家讨论一下”。要主动地把问题给解决了[ii]。

    a) 不懂啥是靠谱的设计;

    b) 随便应付一下即可;

    c) 如果有明确要求,我可以做好。

    d) 一直主动这样做

    e) 不但主动做, 还会影响同事一起做好

    3.(c) 经常给自己充电,身体训练是运动员生活的一部分,学习是软件工程师职业的伴侣。每半年就要了解和学习一些新的相关技术。通过定期分享(面对面的分享,写技术博客等)来确保自己真正掌握了新技术。

    a) 从来不看书;

    b) 看了就忘;

    c) 有时分享。

    d) 一直主动这样做

    e) 不但主动做, 还会影响同事一起做好

    4.(c) DRY (Don't Repeat Yourself)——别重复。在一个系统中,每一个知识点都应该有一个无异议的、正规的表现形式。

    a) 从来没听说过;

    b) 听说过,但是认为意思不大;

    c) 这要讲场合。

    d) 一直主动这样做

    e) 不但主动做, 还会影响同事一起做好

    5.(c) 消除不相关模块之间的影响,在设计模块的时候,要让它们目标明确并单一,能独立存在,没有不明确的外部依赖。

    a) 从来没听说过;

    b) 出了问题再说吧;

    c) 想做,但是不知道怎么衡量效果。

    d) 能够在多种语言和架构中做到

    e) 不但主动做, 还会影响同事一起做好

    6.(d) 通过快速原型来学习,快速原型的目的是学习,它的价值不在于代码,而在于你通过快速原型学到了什么。

    a) 从来没听说过;

    b) 把原型直接用于产品,不然就浪费了;

    c) 不用原型,一直在产品中直接改。

    d) 一直主动这样做

    e) 不但主动做, 还会影响同事一起做好

    7.(d) 设计要接近问题领域,在设计的时候,要接近你目标用户的语言和环境。

    a) 从来没听说过;

    b) 按我的想法设计,用户以后会适应的;

    c) 大概同意,但是怎么接近用户呢?

    d) 一直主动这样做

    e) 不但主动做, 还会影响同事一起做好

    8.(c) 估计任务所花费的时间,避免意外。在开始工作的时候,要做出时间和潜在影响的估计,并通告相关人士,避免最后关头意外发生。工作中要告知可能的时间变化,事后要总结。

    a) 做完了,就知道花费了,不用事先估计;

    b) 大概估一下,不必在意时间

    c) 如果有明确要求,我可以做好。

    d) 一直主动这样做

    e) 不但主动做, 还会影响同事一起做好

    9.(b) 图形界面的工具有它的长处,但是不要忘了命令行工具也可以发挥很高的效率,特别是可以用脚本构建各种组合命令的时候。

    a) 一直用鼠标和GUI;

    b) 到时候问牛人;

    c) 正在学习命令行工具。

    d) 一直主动这样做

    e) 不但主动做, 还会影响同事一起做好

    10.(a) 有很多代码编辑器,请把其中一个用得非常熟练。让编辑器可以实现自己的定制,可以用脚本驱动,用起来得心应手。

    a) 只用老师教的一个;

    b) 随意;

    c) 没有任何定制。

    d) 会定制,并且分享给其他人

    e) 还会学习和使用各种编辑器的扩展。

    11.(a) 理解常用的设计模式,并知道择机而用。设计模式不错,更重要的是知道它的目的是什么,什么时候用,什么时候不用。

    a) 从来没听说过;

    b) 模式没用;

    c) 每写100行程序,我就尽量用一个模式。
    d)有实际使用的经验

    e) 能用具体代码说明模式的利弊

    12.(b) 代码版本管理工具是你代码的保障,重要的代码一定要有代码版本管理。

    a) 从来没听说过;

    b) 用QQ,u盘即可;

    c) 领导要求才用。

    d) 经常用

    e) 不但主动做, 还会影响同事一起做好

    13.(b) 在debug的时候,不要惊慌,想想导致问题的原因可能在哪里。一步一步地找到原因。要在实践中运用工具,善于分析日志(log),从中找到bug。同时,在自己的代码里面加 log.

    a) 从来没听说过;

    b) 只会printf;

    c) 加log 太麻烦,我的代码不会有bug 的。

    d) 一直主动这样做

    e) 不但主动做, 还会影响同事一起做好

    14.(c) 重要的接口要用形式化的“合同”来规定。用文档和断言、自动化测试等工具来保证代码的确按照合同来做事,不多也不少。使用断言 (assertion) 或者其他技术来验证代码中的假设,你认为不可能发生的事情在现实世界中往往会发生。

    a) 从来没听说过;

    b) 太麻烦,不用;

    c) 想用,但没有时间。

    d) 一直主动这样做

    e) 不但主动做, 还会影响同事一起做好

    15.(c) 只在异常的情况下才使用异常 (Exception), 不加判断地过多使用异常,会降低代码的效率和可维护性。记住不要用异常来传递正常的信息。

    a) 从来没听说过;

    b) 抓住所有异常

    c) 如果有明确要求,我可以做好。

    d) 一直主动这样做

    e) 不但主动做, 还会影响同事一起做好

    16.(b)善始善终。如果某个函数申请了空间或其他资源,这个函数负责释放这些资源。

    a) 从来没听说过;

    b) 随缘;

    c) 有时这样做。

    d) 一直主动这样做

    e) 不但主动做, 还会影响同事一起做好

    17.(a)当你的软件有多种技术结合在一起的时候,要采用松耦合的配置模式,而不是要把所有代码都混到一起。

    a) 从来没听说过;

    b) 没有实践的机会;

    c) 代码都在一起比较好管理。

    d) 一直主动这样做

    e) 不但主动做, 还会影响同事一起做好

    18.(c) 把常用模块的功能打造成独立的服务,通过良好的界面 (API) 来调用不同的服务。

    a) 从来没听说过;

    b) 拷贝代码过来用也可以

    c) 如果有明确要求,我可以做好。

    d) 一直主动这样做

    e) 不但主动做, 还会影响同事一起做好

    19.(d) 在设计中考虑对并行的支持,这样你的API 设计会比较容易扩展。

    a) 从来没听说过;

    b) 并行不会出错的;

    c) 任何代码都应支持并行。

    d) 考虑在适当的层次支持并行

    e) 不但主动做, 还会影响同事一起做好

    20.(b) 在设计中把展现模块 (View) 和实体模块 (Model) 分开,这样你的设计会更有灵活性。

    a) 代码都在一起比较好改;

    b) 随缘啦;

    c) 没搞清楚啥是V,啥是M。

    d) 一直主动这样做

    e) 不但主动做, 还会影响同事一起做好

    21.(b) 重视算法的效率,在开始写之前就要估计好算法的效率是哪一个数量级上的(big-O)。

    a) 从来没听说过;

    b) 我的数据量不大,无所谓;

    c) 不会有效率问题的,现在CPU 都快了。

    d) 主动测试程序效率,以验证估算

    e) 不但主动做, 还会影响同事一起做好

    22.(b) 在实际的运行场景中测试你的算法,不要停留在数学分析层面。有时候一个小小的实际因素 (是否支持大小写敏感的排序,数据是否支持多语言)会导致算法效率的巨大变化。

    a) 从来没听说过;

    b) 想用,但不知道工具

    c) 主要靠肉眼观察算法效率。

    d) 一直主动这样做

    e) 不但主动做, 还会影响同事一起做好

    23.(b) 经常重构代码,同时注意要解决问题的根源。

    a) 从来没听说过;

    b) 任何修改都可以叫重构;

    c) 每天应该重构两次。

    d) 一直主动这样做

    e) 不但主动做, 还会影响同事一起做好

    24.(c) 在开始设计的时候就要考虑如何测试 ,如果代码出了问题,有log 来辅助debug 么? 尽早测试,经常测试,争取实现自动化测试,争取每一个构建的版本都能有某些自动测试。

    a) 从来没听说过;

    b) 我的代码不会出问题的;

    c) 项目没有安排时间,我也没有提这事。

    d) 一直主动这样做

    e) 不但主动做, 还会影响同事一起做好

    25.(b) 代码生成工具可以生成一堆一堆的代码,在正式使用它们之前,要确保你能理解它们,并且必要的时候能debug 这些代码。

    a) 从来没听说过;

    b) 从来不看那些代码;

    c) 那些代码没有bug。

    d) 一直主动这样做

    e) 不但主动做, 还会影响同事一起做好

    26.(d) 和一个实际的用户一起使用软件,获得第一手反馈。

    a) 从来没听说过;

    b) 用户太蠢,不值得听反馈;

    c) 想做但是没有机会。

    d) 一直主动这样做

    e) 不但主动做, 还会影响同事一起做好

    27.(c)在自动测试的时候,要有意引地入bug,来保证自动测试的确能捕获这些错误。

    a) 没听说过;

    b) 不必这么麻烦;

    c) 如果有明确要求,我可以做好。

    d) 一直主动这样做

    e) 不但主动做, 还会影响同事一起做好

    28.(b) 如果测试没有做完,那么开发也没有做完。

    a) 从来没听说过;

    b) 签入代码,就是做完了;

    c) 。

    d) 一直主动这样做

    e) 不但主动做, 还会影响同事一起做好

    29.(c) 适当地追求代码覆盖率:每一行的代码都覆盖了,但是程序未必正确。要确保程序覆盖了不同的程序状态和各种组合条件。

    a) 从来没听说过;

    b) 覆盖20% 就好了;

    c) 要覆盖至少60%。

    d) 一直主动这样做

    e) 不但主动做, 还会影响同事一起做好

    30.(d) 如果团队成员碰到了一个有普遍意义的bug, 应该建立一个测试用例抓住以后将会出现的类似的bug。

    a) 从来没听说过;

    b) 每个bug都是特殊的;

    c) 测试用例不值得加

    d) 一直主动这样做

    e) 不但主动做, 还会影响同事一起做好

    31.(c) 测试:多走一步,多考虑一层。如果程序运行了一星期不退出,如果用户的屏幕分辨率再提高一个档次,这个程序会出什么可能的错误?

    a) 从来没听说过;

    b) 如果有问题,用户会报告的,我们不用测这些;

    c) 如果有明确要求,我可以做好。

    d) 一直主动这样做

    e) 不但主动做, 还会影响同事一起做好

    32.(d)(带领团队)了解用户的期望值,稍稍超出用户的期望值,让用户有惊喜。

    a) 从来没听说过;

    b) 我们决定用户的期望;

    c) 如果有明确要求,我可以做好。

    d) 一直主动这样做

    e) 不但主动做, 还会影响同事一起做好

    33.(d) (带领团队) 不要停留在被动地收集需求,要挖掘需求。真正的需求可能被过时的假设、对用户的误解或其他因素所遮挡。

    a) 从来没听说过;

    b) 用户不说的,我们不做;

    c) 如果有明确要求,我可以做好。

    d) 一直主动这样做

    e) 不但主动做, 还会影响同事一起做好

    34.(b)(带领团队)把所有的术语和项目相关的名词、缩写等都放在一个地方。

    a) 从来没听说过;

    b) 都记在我脑子里;

    c) 大家看代码就好

    d) 一直主动这样做

    e) 不但主动做, 还会影响同事一起做好

    35.(c)(带领团队)不要依赖于某个人的手动操作,而是要把这些操作都做成有相关权限的人士都能运行的脚本。这样就不会出现因为某人休假而项目被卡住的情况。

    a) 从来没听说过;

    b) 我们没有休假的,没关系;

    c) 出了问题再说

    d) 一直主动这样做

    e) 不但主动做, 还会影响同事一起做好

    36.(c)(带领团队)要让重用变得更容易。一个软件团队要创造一种环境,让大家有轻松的心态来尝试各种想法 (例如,模块的重用,效能的提升,等)。

    a) 都听领导的;

    b) 团队严肃紧张最好;

    c) 不必尝试,失败的可能性太大。

    d) 一直主动这样做

    e) 不但主动做, 还会影响同事一起做好

    37.(c)(带领团队)在每一次迭代之后,都要总结经验,让下一次迭代的进度安排更可靠,质量更高。

    a) 没有时间总结,直接做下一版;

    b) 总结用处不大;

    c) 如果上级有要求,就做一下;

    d) 一直主动这样做

    e) 不但主动做, 还会影响同事一起做好

    38.(d)(带领团队)团队中往往会有矛盾产生,作为领头人,怎么办?

    a) 我没看见矛盾。

    b) 和稀泥,过得去就行 ;

    c) 如果没有捅到上级那里,就打哈哈,希望他们自己搞定;

    d) 有明确和一致的处理矛盾的原则

    e) 不但有明确和一致的处理原则,而且对于影响团队士气的任何事情追究到底

    二、回答问题

    ps:当时就整本书找出三个问题,如下:

    【问题一】 书中第四章4.4.2 代码复审的步骤 部分,第五个步骤说道:

    复审者有权提出很多看似吹毛求疵的问题,复审者不必亲自调查每一件事,开发者有义务给出详尽的回答 · · · · · ·
    要记住复审者是通过这些问题来确保软件质量的,而不是有意找碴儿。

    对于这句话,不知是自己理解能力欠佳还是语义有歧义。复审者可以提出吹毛求疵的问题,又不用亲自调查每一件事,不要找茬。那复审者是要仔仔细细阅读开发者的代码,提出非常细节的各种问题,还是观其大略了解通透,明白开发者大致的意思即可,并就不懂的地方提问?

    回答:复审在软件开发中非常重要的一个环节,就像测试一样。伊始我认为软件开发中写代码开发才是最重要的,但其实测试在某些时候比写代码还要重要。所以,私以为复审者复审时应该先自行读懂开发者的代码,就不懂的问题及时提问与改进,但问题不太过刁钻(比如那些根本不会发生的问题),开发者和复审者双方都抱着使软件更完善健壮的态度完成自己的本职工作。

    【问题二】 书中第十六章 迷思之二 大家都喜欢创新 部分。
    作者举出了许多例子来论证创新并非人人皆爱,但是我注意到这些例子距离当今已经有很长时间了,这就出现了一个时间的问题。在当今社会,生活中的方方面面都在飞速发展,发展迅猛以至于人类生活各方面的需求都已经被解决了。这不比从前,从前的创新都是飞跃性的,极大提高效率所以导致各种利益的冲突。在温饱已经有保证的情况下,我认为现代社会的创新我认为更加趋向提升人民的幸福感,譬如各样的按摩椅,代步滑轮车等等,这样的创新发明大家都是很喜爱的不是吗?所以我反对作者的观点,我认为应该说的表达更完整些,譬如:过去的时代创新会引起一些利益冲突,所以并非人人都爱,但是当今提升人民生活幸福感的创新是人人都喜欢的。
    回答:现在回看之前的问题感觉又有些片面了,hh,这次我支持在作者的观点(pia pia pia打脸...)譬如,各种游戏的创新开发,鱼龙混杂,其中不免掺杂一些不健康的内容,这样子的创新就是不受人喜爱的。创新是进步的不竭动力,但也应该加大对创新的监管力度,创新不是一拍脑袋既成的事,而是需要考虑方方面面,不能创造一些有所他人身心健康的东西出来。

    【问题三】 书中第十六章 迷思之四 创新者都是一马当先 部分。
    作者用很多实例论证了第一个提出想法的人并不是真正能将想法发扬光大的人。对此,我提出我的问题:在今后的学习工作生活中,若灵光一闪,有了一些自认为极妙的未被开发的想法时,到底应不应该付诸实践呢?还是应该等待他人与你有同一想法并实践后自己像那些后来崛起的公司一样不断“线性扩展”,后来追上呢?那如果等待他人提出想法后是否会丧失先机及时间优势,并因此丧失一些重要资源呢?或者换一个提问方式:当你有一个自认为很棒的想法时,怎样做才是最佳的办法?
    回答:私以为,当有一个自认为很棒的想法时,可以先广泛搜集资料,看看是否有与自己类似的想法相关的一些东西,或者请教自己值得信赖的好友专家等,吸取他人的意见,如果已经经过多方考量,我认为可以抓住机会just do it,做不做得出来是一回事,起码在过程中有所获就好。

    三、再提问题

    【问题一】 团队编程中关于PM的问题。
    课堂及书本上,我得到的关于PM的认知是:PM是做开发与测试之外的所有事情。但是在我们实际的团队项目中,在选定PM时,大家都是本着谁的编程能力最强而选择的,我们的理由是,学生团队中选择舵手时应该选择那个能力最强的同学(但不一定是领导能力最强的),这样的话大家在实际开发中遇见什么编程问题都可以联系PM寻求解决办法。请问这样的选择是正确的吗?因为我感觉在我们的团队项目中,PM似乎并不是起组织领导,统筹全局的作用,而是成为了编码最多最辛苦的那个人,导致大家都不情愿当PM。那如果重新选择PM的话,是应该选择编程方面最厉害的人还是应该选择领导能力比较强的人呢?(如果领导能力强但是编码能力弱的可以当PM吗?)

    【问题二】 关于需求调查的问题。
    需求调查中,询问用户关于自己将要开发的项目的想法时,若你调查了100个用户,其中20多个用户对你开发的项目持怀疑或者否定态度时(觉得没有用没有必要啊什么之类的),那项目还要继续进行吗,是否应该调整项目方向?还是应该加大需求调查范围,征求更多人的想法?

    【问题三】 团队编程中关于项目燃尽图的问题。
    燃尽图在我们本次项目中是有点棘手的事情。一开始我们团队的任务卡没有设置完善,导致后续几天冲刺的时候我们再进行添加任务卡等操作,导致燃尽图变得很奇怪,请问这样的燃尽图还有意义吗?还能正确反映团队项目的进度吗?关于燃尽图,是必须一开始就将任务卡设置完善吗,若冲刺当中遇到需要增加任务卡的情况该怎么处理?

    【问题四】 关于本课程博客撰写问题。
    这种新的教学方式是好的,比传统教学能学到更多东西,但是真的占用很多时间,是否博客量有点过多了呢?(不一定所有人的方向都是软件开发这方面,甚至有一些同学根本不打算走计算机这条路,要考研要考公的大有人在,是否能缩减一点任务量将一些博客时间出来给同学学习一些他们更想学的技术知识呢)

    【问题五】 关于提问题的数量。
    为什么一定要五个问题呢...真的没什么问题的怎么办?

    【附加题】: https://book.douban.com/annotation/56693463/

    转载于:https://www.cnblogs.com/guzhiling/p/9033239.html

    展开全文
  • 最拿手的语言之一,代码量多少? java,代码量在一万行左右 语言 最拿手的语言之二,代码量多少? C语言,代码量在五千行左右 软件实现 你有没有在别人代码的基础上改进,你是怎么读懂别人的代码?你在开发...
  • 最拿手的计算机语言之一,代码量多少?(偏前端) java 语言 最拿手的计算机语言之二,代码量多少?(偏后端) jsp 软件实现 你有没有在别人代码的基础上改进,你是怎么读懂别人的代码的,你采取了什么办法...
  • ,软工第四次作业

    2018-05-19 21:15:00
    最拿手的计算机语言之一(偏前端),代码量多少 C语言学的较为认真点,差不多一两千行这样 语言 最拿手的计算机语言之二(偏后端),代码量多少 也是C语言,代码量大概一两千行这样 软件实现 有没有在别人的...
  • alpha阶段个人总结

    2018-05-19 21:32:00
    最拿手的计算机语言之一,代码量多少? php,10000左右 语言 最拿手的计算机语言之二,代码量有多少 js+html+css,3000左右 软件实现 (代码阅读能力,实现,单元测试)你有没有在别的代码的基础上改进,你是...
  • 最拿手的计算机语言之一,代码量多少? 感觉自己没有最拿手的语言,而且拿手的在计算机网络这方面的,所以在软件变成这方面的代码量比较少 软件实现 (代码阅读能力,实现,单元测试)你有没有在别的代码的基础上...
  • 我做好了一个欢迎界面,并且做了下按钮触发,里面什么都还没有,我这边有一个游戏主程序,应该怎么样才能合理的添加进去呢? 添加的结果就是 点击这个按钮 就进入这个主程序。下面是代码 这个是我的欢迎界面的代码...
  • 毕设答辩的想法

    2020-06-10 15:41:57
    毕设答辩的时候老师问了个问题,这个代码多少是你自己写的吗? 我的回答是:大部分都有参考别人的代码,只有一小部分是自己写的。 但是其实我更想回答的是:这些代码我全部都有参考别人的代码和实现方法。不过这样...
  • 逛知乎时,看到一个问题:世界上有哪些代码量很少,但很牛的算法? 有一个回答提到了洗牌算法。(在此感谢程序员吴师兄的回答,原文链接找不到了)看完之后,惊为天人,特此记录,致敬一下发明算法的大神。 题目描述...
  •  谈到并发,一种很好的方式来形容当前的问题是来回答几个小问题以便更好的了解它:  它是一个数据处理任务么?如果是这样的话,它可以分解为独立的任务单元么?  操作系统、虚拟机和你的代码之间的关系是什么...
  • 其实 也就 是 在同一个action中实现CRUD多个操作方法的问题 这样引起的代码量过多 和代码逻辑混乱 但是 怎么分出来呢 如果分出修改 业务方法中修改有时候 也需要查询的 那这样可以吗 [b]问题补充:[/b] 针对于...
  • 另外,我获得过某某奖,我的 Github 上开源的某个项目已经有多少 Star 了。 如何介绍自己的项目? 如果有项目的话,技术面试第一步,面试官一般都是让你自己介绍一下你的项目。你可以从下面几个方向来考虑: 对项目...

空空如也

空空如也

1 2 3
收藏数 58
精华内容 23
关键字:

代码量多少怎么回答