欢迎来到加倍考研网! 北京 上海 广州 深圳 天津
微信二维码
在线客服 40004-98986
推荐适合你的在职研究生专业及院校
2019软件工程跨考计算机专业研究生,复试如何准备?这几点很重要三物

2019软件工程跨考计算机专业研究生,复试如何准备?这几点很重要

计算机科学与技术专业是一个软硬件都要学习的一大专业,如果本科是软件工程的话,对计算机硬件知识是不会涉及的,软件工程对应的就是平常所说的码农,主要是进行软件开发或者软件维护工作的,作为软件工程这个专业目前还是比较吃香的,应用范围比较广泛,薪酬较高,但由于其学习难度较大,很多本科生在选择考研的时候,可能会换专业,比如软工转计算机专业的话,复试该如何准备的问题,下面小编给大家简单的分析一下。软件工程与计算机专业在大部分的课程设置上基本相差不大,计算机要学的课程软件工程也一样不会少,软件工程在软件这一块的学习内容可能会更多一些,因为专业方向的原因,特别是数据处理、编程等课程会学得更深入,这也为学生未来更好的做好软件开发工作做准备,当然在本科阶段的学习也是比较笼统的,方向并不太明确,在很多双非一本高校,甚至可以说与计算机专业所学的内容区别不大。计算机专业则是软硬兼收的一个专业,所学专业课也根据学校的不同而有差异。有的学校会只学数电,有的专业会学模电和电路分析,硬件方面肯定也会涉及,一句话,计算机专业更注重的是对互联网等知识的整体的掌握,既有硬件的学习,也有软件的讲解,本科阶段所学也不是太专一,除非是实力较强的高校,比如北航、国科大等传统软件工程实力特别强的高校。作为软工出身,若初试分数还算说的过去,老师一般不会为难你,只要根据所报目标院校的要求准备就好了,另外可以向往届学长讨教,从而在准备面试的时候做到心中有数,至于单片机,这些硬件方面的知识大概率不会提问,那是电子信息工程方向导师会问的,结合你做过的项目来答就可以了。鉴于软工专业的方向,导师可能会问数据库和操作系统方面的问题,其实完全可以看一下往年和今年的初试、复试题目,好好复习一遍,很多题目都是导师从里面挑出来的,换汤不换药。总的来说,两个专业的课程差不多,所以复试问题都不会太大,大家对跨考计算机专业怎么看?

段青

21年考软件工程硕士:看看这几所性价比高的院校

21年考软件工程硕士:看看这几所性价比高的院校软件工程是一门研究用工程化方法构建和维护有效的、实用的和高质量的软件的学科。它涉及程序设计语言、数据库、软件开发工具、系统平台、标准、设计模式等方面。软件工程考试科目一般为:外国语(100分)、政治理论(100分)、数学一(150分)、专业课(150分)。其中专业课考试内容包括:数据结构、计算机组成原理、操作系统和计算机网络,其中数据机构占45分;计算机组成原理占45分;操作系统占35分;计算机网络25分。题型:单选题40题,每题2分,共计80分;综合应用题70分,共计150分。由于最近计算机考研会比较热门,软件工程专业是属于计算机所有专业中比较容易考的一门专业,所以报考人数比较多,那报考软件工程专业有哪些性价比高的学校呢?来跟着老师了解一下吧!1、北京邮电大学北京邮电大学简称北邮,是中华人民共和国教育部直属、工业和信息化部共建的全国重点大学,位列国家“世界一流学科建设高校”、“211工程”、“985工程优势学科创新平台”。北京邮电大学的软件工程是实力非常不错的专业,招生人数也多,不过推免人数也比较多,北京邮电大学的地理位置和院校综合实力都是很不错的,专业课题目比较简单,认真复习的话问题不大,所以北邮算是性价比很不错的一所学校了。2、南京邮电大学南京邮电大学简称“南邮”(NJUPT),是教育部、工业和信息化部、国家邮政局与江苏省共建高校,首批国家“双一流”世界一流学科建设高校,江苏高水平大学建设高校。软件工程专业在南京邮电大学专业评估为B,也是南邮的王牌专业,考研难度并不大,南京的公共课也不压分,招生人数也比较多,在南邮学习软件工程专业的话就业前景是非常好的。3、江苏大学江苏大学坐落在国家历史文化名城—江苏省镇江市,是2001年8月经教育部批准,由原江苏理工大学、镇江医学院、镇江师范专科学校合并组建的以工科为特色的重点综合性研究型大学,是江苏省人民政府和农业农村部共建高校、首批江苏省高水平大学建设高校、全国本科教学工作水平优秀高校、首批全国50所毕业生就业典型经验高校。江苏大学的软件工程在全国专业排名为C+,专业实力也是很强的,如果以后想在江苏省就业的同学可以考虑这所学校。4、上海理工大学上海理工大学是一所以工学为主,工学、理学、经济学、管理学、文学、法学、艺术学等多学科协调发展的应用研究型大学;是国家国防科技工业局与上海市人民政府共建高校、上海市重点建设大学、上海市高水平地方高校建设试点单位。上海理工大学的软件工程为C,实力虽然没有北邮等知名高校好,但是上海理工的工科类都很不错,师资力量强大,是一所考研难度不大而且地理位置和就业都有优势大院校。5、南京信息工程大学南京信息工程大学于南京江北新区,是一所以大气科学为特色的全国重点大学,南京信息工程大学是以气象学为优势专业的院校,不过它的软件工程在全国评估为C+,软件工程专业教学也会围绕着它的优势专业的,所以对大气科学这方面感兴趣的可以选择这所院校。6、东华大学东华大学位于上海市,是中华人民共和国教育部直属的全国重点大学,是国家“世界一流学科建设高校”、“211工程“建设高校,入选国家“2011计划”牵头高校。东华大学的软件工程专业为B-,虽然东华大学优势专业为服装设计相关专业,不过软件工程这方面学校也是极其重视的,作为上海好考的211高校,软件工程专业的性价比也是很高的。2021备考软件工程硕士私信付老师:考研

罪行累累

武汉大学计算机招60人,59个给保研,剩1个名额值得报考吗?

查询一些学校的招生目录的时候,我们经常会发现有的学校只招一个人,当然不是总共招一个人,是留给考研生的名额只有一个,大部分名额则用来招收保研的学生。比如武汉大学2019年的招生计划上就有说明,计算机科学与技术专业一共招收60个人,其中59个留给了推免,只有一个留给考研。很多人就有疑问“只招收一个人的专业是真心的想招学生吗”?作为考生是否值得报考呢?对于只招一个人的专业我们不能一棒子把学校打死,有些比较冷门的专业招一个人也是正常的。比如北京大学的古生物专业连续6年每年只招一个本科生,像这种情况学校确实是诚心招人,只是方向比较冷门,不需要那么多的学生。平常一群教授只给一个人上课,拍毕业照的时候也是只有一个人,考试的时候学生即是第一名也是最后一名。判断一个学校是否诚心招人要看学校有没有提前说明,如果学校提前就说我们这个专业只招1个考研的学生,如果报考风险很大,那么考生坚持报考就算没考上也就没有任何问题。但是从我个人的角度而言,不管是哪个学校如果只招一个考研的学生,还是建议大家不要报考,毕竟这个风险太大了。比如天津大学在招生计划中有说明软件工程考研只招一个人,专业划线是368分,那么这个分数是怎么确定的呢?我们可以看到软件工程进入复试名单的也只有一个人,这个人刚好考368分,所以分数线就是368分。因为只招一个人,所以学校也没有让更多的人进入复试,不出意外这个同学100%会被录取。如果不录取那么这个专业今年可能就一个考研的人也没有了。当然事情并不是绝对的,也不并不是说只招一个人,也只有一个人进入复试学校就一定会录取。最终能否被录取还要看这个考生的发挥以及学校是否诚心招人。因为对于学校来说一个人都不招人实在太难看,实在不行就招1个人吧,你愿意报就报,不愿意报拉倒。学校也根本不在乎最终有没有人报考,反正靠保研的学生已经基本上招够了,最终少一个人或者多一个人对学校来说无关紧要。就算只有一个人进入复试,学校也可以把你刷掉,理由也可以很充足,叫“宁缺毋滥”!

严复

软件工程师的试炼之地:53道Python面试问答题

全文共7439字,预计学习时长32分钟图源:unsplash不久前我才通过面试,入职成为了“数据科学家”,但我实际上做的却是“Python工程师”的工作。如果能提前复习Python线程生命周期的知识,而不是推荐系统,我可以准备得更好。出于这种想法,我整理了python面试或准备求职用的问题和答案。大多数数据科学家会编写大量代码,因此这均适用于数据科学家和软件工程师。无论你是准备面试抑或是复习Python知识,这份清单都将能够帮到你。问题不分先后,我们开始吧!1.列表和元组有什么区别?每次python或数据科学面试中,我都被问到过这个问题。求职者应对这个答案了如指掌。· 列表是可变的。创建后可被修改。· 元组是不可变的。一旦创建了元组,就不能更改· 列表有顺序,是有序序列,通常是相同类型的对象。即:按创建日期排序的所有用户名,[" Seth"," Ema"," Eli"]· 元组有结构。每个索引中可能存在不同的数据类型。即:内存中的数据库记录,(2," Ema"," 2020–04–16")#id, name,created_at2."is"和" =="有什么区别?在我初学python时,我以为它们是相同的……却出现了一些bug。因此,为了记录,is表示检查身份,而==表示检查相等性。可通过一个例子来解释。创建一些列表并将其分配给名称。请注意,b指向与下面的a相同的对象。a = [1,2,3]b = ac = [1,2,3]检查是否相等,并注意它们是否全都相等。print(a == b)print(a == c)#=> True#=> True但是它们具有相同的身份吗?不。print(a is b)print(a is c)#=> True#=> False我们可以通过打印其对象ID进行验证。print(id(a))print(id(b))print(id(c))#=>4369567560#=> 4369567560#=>4369567624c与a和b具有不同的ID。3.什么是装饰器?这个问题每次面试都会问到。问题本身值得再写一篇文章,但是如果可以逐步编写自己的示例,那么就已经准备好回答这个问题了。图源:unsplash装饰器允许通过将现有函数传递给装饰器,从而将功能添加到现有函数,该装饰器将执行现有函数以及其他代码。编写一个装饰器,该装饰器会在调用另一个函数时记录日志。编写装饰器函数。这需要一个函数func作为参数。它还定义了一个函数log_function_called,该函数调用func()并执行一些代码print(f'{func}called。')。然后返回定义的函数deflogging(func):def log_function_called():print(f'{func} called.')func()return log_function_called编写其他函数,最终将装饰器添加进去(但尚未)。def my_name():print('chris')def friends_name():print('naruto')my_name()friends_name()#=> chris#=> naruto现在将装饰器添加到两者。@loggingdef my_name():print('chris')@loggingdef friends_name():print('naruto')my_name()friends_name()#=> <function my_name at 0x10fca5a60> called.#=> chris#=> <function friends_name at 0x10fca5f28> called.#=> naruto了解现在如何仅通过在其上面添加@logging就能轻松地将日志添加到编写的任何函数中。4.如何实现字符串插值?在不导入Template类的情况下,有3种实现字符串插值的方法。name = 'Chris'# 1. f stringsprint(f'Hello {name}')# 2. % operatorprint('Hey %s %s' % (name, name))# 3. formatprint("My name is {}".format((name)))5.解释range函数Range生成一个整数列表,有3种使用方式。该函数接受1到3个参数。请注意,将每种用法都包装在列表解析中,以便看到生成的值。range(stop):生成从0到"stop"整数的整数。[i for i in range(10)]#=> [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]range(start,stop):生成从" start"到" stop"整数的整数。[i for i in range(2,10)]#=> [2, 3, 4, 5, 6, 7, 8, 9]range(start,stop,step):以" step"为间隔生成从" start"到" stop"的整数。[i for i in range(2,10,2)]#=> [2, 4, 6, 8]6.定义一个名为car的类,具有2个属性,即"颜色"和"速度"。然后创建一个实例并返回速度。class Car :def __init__(self, color, speed):self.color = colorself.speed = speedcar =Car('red','100mph')car.speed#=> '100mph'7.python中的实例方法,静态方法和类方法之间有什么区别?实例方法:接受self参数并与类的特定实例相关。静态方法:使用@staticmethod装饰器,与特定实例无关,并且是独立的(请勿修改类或实例属性)类方法:接受cls参数并可以修改类本身举例说明一个虚构的CoffeeShop类的区别。class CoffeeShop:specialty = 'espresso'def __init__(self, coffee_price):self.coffee_price = coffee_price# instance methoddef make_coffee(self):print(f'Making {self.specialty}for ${self.coffee_price}')# static method @staticmethoddef check_weather():print('Its sunny') # class method@classmethoddef change_specialty(cls, specialty):cls.specialty = specialtyprint(f'Specialty changed to{specialty}')CoffeeShop类具有specialty的属性,默认情况下设置为" espresso"。CoffeeShop的每个实例都使用属性coffee_price初始化。它还有3种方法,实例方法、静态方法和类方法。图源:unsplash 以coffee_price为5初始化咖啡店的实例。然后调用实例方法make_coffee。coffee_shop = CoffeeShop('5')coffee_shop.make_coffee()#=> Making espresso for $5现在调用静态方法。静态方法无法修改类或实例状态,因此通常用于实用程序功能,例如,添加两个数字。我们用其来检查天气。Its sunny。真棒!coffee_shop.check_weather()#=> Itssunny现在使用类方法来修改咖啡店的特色菜,然后再修改make_coffee。coffee_shop.change_specialty('dripcoffee')#=> Specialty changed to drip coffeecoffee_shop.make_coffee()#=> Making drip coffee for $5请注意,make_coffee以前是用来制作espresso 的,但现在却可以制作drip coffee!8.解释filter函数的运行原理顾名思义,Filter函数的运行原理是按顺序过滤元素。每个元素都传递给一个函数,如果函数返回True,则按输出顺序返回;如果函数返回False,则将其丢弃。def add_three(x):if x % 2 == 0:return True else:return Falseli =[1,2,3,4,5,6,7,8][i for i in filter(add_three, li)]#=> [2, 4, 6, 8]请注意如何删除所有不能被2整除的元素。9.python是按引用调用还是按值调用?如果已经搜索了这个问题并阅读了前几页,请准备好深入了解语义。最好仅了解其工作原理。不变的对象,如字符串,数字和元组是按值调用的。请注意,在函数内部进行修改后,name的值不会在函数外部发生变化。name的值已分配给该功能范围内的内存中的新块。name = 'chr'def add_chars(s):s += 'is'print(s)add_chars(name) print(name)#=> chris#=> chr可变对象,如list,按引用调用。注意在函数外部定义的列表是如何在函数内部被修改的。函数中的参数指向内存中存储li值的原始块。li = [1,2]def add_element(seq):seq.append(3)print(seq)add_element(li) print(li)#=> [1, 2, 3]#=> [1, 2, 3]10.如何撤消列表?请注意如何在列表上调用reverse()并对其进行突变。它不会返回变异列表本身。li = ['a','b','c']print(li)li.reverse()print(li)#=> ['a', 'b', 'c']#11.说明map函数的工作原理map通过将函数应用于序列中的每个元素,返回由返回值组成的列表。def add_three(x):return x + 3li = [1,2,3][i for i inmap(add_three, li)]#=> [4, 5, 6]上面,列表中的每个元素都添加了3。12.字符串乘法如何工作?让我们看看将字符串‘cat’乘以3的结果。'cat' * 3#=> 'catcatcat'该字符串将自身连接3次。13.列表乘法如何工作?我们来看看将列表[1,2,3]乘以2的结果。[1,2,3] * 2#=> [1, 2,3, 1, 2, 3]1输出包含重复两次的[1,2,3]内容的列表。14.在类上"self"指的是什么?self是指类本身的实例。这就是我们赋予方法访问权限并能够更新方法所属对象的能力。图源:unsplash 下面,将self传递给__init __()使我们能够在初始化时设置实例的颜色。class Shirt:def __init__(self, color):self.color = colors = Shirt('yellow')s.color#=> 'yellow'15.如何连接python中的列表?将2个列表加在一起并进行串联。请注意,数组的功能不同。a = [1,2]b = [3,4,5]a + b#=> [1, 2, 3, 4, 5]16.浅拷贝和深拷贝之间有什么区别?在可变对象(列表)的情境下进行讨论。对于不可变对象,浅与深并不重要。这里介绍3种情况。一是引用原始对象。这将新名称li2指向li1在内存中指向的相同位置。因此,对li1所做的任何更改也会在li2中发生。li1 = [['a'],['b'],['c']]li2 = li1li1.append(['d'])print(li2)#=> [['a'], ['b'], ['c'], ['d']]二是创建原始文档的浅拷贝。可以使用list()构造函数来做到这一点。浅拷贝会创建一个新对象,但会引用原始对象来填充它。因此,将新对象添加到原始集合li3中不会传播到li4,但是修改li3中的一个对象将传播到li4。li3 = [['a'],['b'],['c']]li4 = list(li3)li3.append([4])print(li4)#=> [['a'], ['b'], ['c']]li3[0][0] = ['X']print(li4)#=> [[['X']], ['b'], ['c']]三是创建一个深拷贝。这是通过copy.deepcopy()完成的。现在,这两个对象是完全独立的,并且对其中任何一个做出更改不会对另一个对象产生影响。import copyli5 =[['a'],['b'],['c']]li6 = copy.deepcopy(li5)li5.append([4])li5[0][0] = ['X']print(li6)#=> [['a'], ['b'], ['c']]=>17.如何连接两个数组?请记住,数组不是列表。数组来自Numpy和算术函数,例如线性代数。需要使用Numpy的连接函数来实现。import numpy as npa =np.array([1,2,3])b = np.array([4,5,6])np.concatenate((a,b))#=> array([1, 2, 3, 4, 5, 6])18.喜欢Python的原因?Python非常易读,并且有一种Python方式可以处理几乎所有事情,这意味着它是一种简洁明了的首选方式。将其与Ruby相比,后者通常有很多方法来做某事,而没有指南来说明哪个是首选。图源:unsplash19.最喜欢使用Python的哪个库?当处理大量数据时,没有什么比pandas库那么实用了,这使得操作和可视化数据变得轻而易举。20.命名可变和不可变的对象不可变表示创建后无法修改状态。例如:int、float、bool、string和tuple。可变表示状态在创建后可以进行修改。比如列表、字典和集合。21.如何将数字四舍五入到小数点后三位?使用round(value,decimal_places)函数。a = 5.12345round(a,3)#=> 5.12322.如何分割列表?切片符号采用3个参数list [start:stop:step],其中step是返回元素的间隔。a =[0,1,2,3,4,5,6,7,8,9]print(a[:2])#=> [0, 1]print(a[8:])#=> [8, 9]print(a[2:8])#=> [2, 3, 4, 5, 6, 7]print(a[2:8:2])#=> [2, 4, 6]23.列表和数组有什么区别?注意:Python的标准库有一个数组对象,但在这里专门指的是常用的Numpy数组。· 列表存在于python的标准库中,数组由Numpy定义。· 列表可以在每个索引处填充不同类型的数据,数组需要齐次元素。· 列表上的运算可以从列表中添加或删除元素,数组函数进行线性代数运算。· 数组占用内存少,功能更多。有关数组的知识值得再写一篇文章。24.什么是pickling?picking是在Python中序列化和反序列化对象的协助方法。在下面的示例中,对字典列表进行序列化和反序列化。import pickleobj = [{'id':1, 'name':'Stuffy'},{'id':2, 'name': 'Fluffy'}]with open('file.p', 'wb') as f:pickle.mp(obj, f)withopen('file.p', 'rb') as f:loaded_obj =pickle.load(f)print(loaded_obj)#=> [{'id': 1, 'name': 'Stuffy'}, {'id': 2, 'name': 'Fluffy'}]25.字典和JSON有什么区别?Dict是python数据类型,是已索引但无序的键和值的集合。JSON只是遵循指定格式的字符串,用于传输数据。26.在Python中使用了哪些ORM?ORM(对象关系映射)将数据模型(通常在应用程序中)映射到数据库表,并简化了数据库操作。SQLAlchemy通常在Flask的上下文中使用,而Django拥有自己的ORM。['c', 'b', 'a']27.any()和all()如何工作?Any接受一个序列,如果序列中的任一元素为true,则返回true。仅当序列中的所有元素均为true时,All才返回true。a = [False, False, False]b = [True, False, False]c = [True, True, True]print( any(a) )print( any(b) )print( any(c) )#=> False#=> True#=> Trueprint( all(a) )print( all(b) )print( all(c) )#=> False#=> False#=> True28.字典或列表的查找速度更快吗?在列表中查找值需要O(n)时间,因为需要遍历整个列表直到找到值为止。在字典中查找键需要O(1)时间,因为它是一个哈希表。如果值很多,时间可能会相差很大,因此通常建议使用字典来提高速度。但是它们确实还有其他限制,例如需要唯一键。图源:unsplash 29.如何返回整数的二进制?使用bin()函数。bin(5)#=>'0b101'30.如何从列表中删除重复的元素?可以通过将列表转换为集合然后返回列表来完成。a = [1,1,1,2,3]a = list(set(a))print(a)#=> [1, 2, 3]31.如何检查列表中是否存在值?使用in。'a' in ['a','b','c']#=> True'a' in [1,2,3]#=> False32.append和extend有什么区别?append将值添加到列表,而extend将另一个列表中的值添加到这个列表。a = [1,2,3]b = [1,2,3]a.append(6)print(a)#=> [1, 2, 3, 6]b.extend([4,5])print(b)#=> [1, 2, 3, 4, 5]33.如何取整数的绝对值?这可以通过abs()函数来完成。abs(2)#=> 2abs(-2)#=> 234.如何将两个列表组合成一个元组列表?可以使用zip函数将列表组合成一个元组列表。这不仅限于仅使用两个列表。也可以用3个或更多来完成。a = ['a','b','c']b = [1,2,3][(k,v) for k,v in zip(a,b)]#=> [('a', 1), ('b', 2), ('c', 3)]35.如何按字母顺序对字典排序?无法对字典进行"排序",因为字典没有顺序,但是可以返回已排序的元组列表,其中包含字典中的键和值。d = {'c':3, 'd':4, 'b':2,'a':1}sorted(d.items())#=> [('a', 1), ('b', 2), ('c', 3), ('d', 4)]36.一个类如何从Python中的另一个类继承?在下面的示例中,Audi继承自Car。继承带来了父类的实例方法。class Car():def drive(self):print('vroom')class Audi(Car):passaudi = Audi()audi.drive()37.模块和包装之间有什么区别?模块是可以一起导入的文件(或文件集合)。importsklearn包是模块的目录。from sklearnimport cross_validation因此,包是模块,但并非所有模块都是包。38.如何在Python中递增和递减整数?可以使用+-和-=进行递增和递减。value = 5value += 1print(value)#=> 6value -= 1value -= 1print(value)#=> 439.如何从字符串中删除所有空格?最简单的方法是在空白处分割字符串,然后重新连接而没有空格。s = 'A string with white space'''.join(s.split())#=> 'Astringwithwhitespace'40.为什么要在迭代序列时使用enumerate()?enumerate()允许在迭代序列时跟踪索引。它比定义和递增代表索引的整数更具Python感。li = ['a','b','c','d','e']foridx,val in enumerate(li):print(idx, val)#=> 0 a#=> 1 b#=> 2 c#=> 3 d#=> 4 e41.pass、continue和break之间有什么区别?pass意味着什么都不做。之所以常使用它,是因为Python不允许在其没有代码的情况下创建类、函数或if语句。图源:unsplash 在下面的示例中,如果i > 3 中没有代码,则会引发错误,因此使用pass。a = [1,2,3,4,5]for i in a:if i > 3:passprint(i)#=> 1#=> 2#=> 3#=> 4#=> 5continue 继续到下一个元素,并暂停执行当前元素。因此对于i <3的值,永远不会达到print(i)。for i in a:if i < 3:continueprint(i)#=> 3#=> 4#=> 5break打破了循环,序列不再重复。因此,不会打印3以后的元素。for i in a:if i == 3:breakprint(i) #=> 1#=> 242.举例说明三元运算符。三元运算符是单行if / else语句。句法看起来像a if condition else b.。x = 5y = 10'greater' if x > 6 else 'less'#=> 'less''greater' if y > 6 else 'less'#=> 'greater'43.检查字符串是否仅包含数字。可以使用isnumeric().'123a'.isnumeric()#=> False'123'.isnumeric()#=> True44.检查字符串是否仅包含字母。可以使用isalpha().'123a'.isalpha()#=> False'a'.isalpha()#=> True45.检查字符串是否仅包含数字和字母。您可以使用isalnum().'123abc...'.isalnum()#=> False'123abc'.isalnum()#=> True46.从字典返回键列表。这可以通过将字典传递给python的list()构造函数list()来完成。d = {'id':7, 'name':'Shiba','color':'brown', 'speed':'very slow'}list(d)#=> ['id', 'name', 'color', 'speed']47.如何对字符串进行大写和小写?可以使用upper()和lower()字符串方法。small_word = 'potatocake'big_word = 'FISHCAKE'small_word.upper()#=> 'POTATOCAKE'big_word.lower()#=> 'fishcake'48.将以下for循环转换为列表解析。这个for循环。a = [1,2,3,4,5]a2 = []for i in a:a2.append(i + 1)print(a2)#=> [2, 3, 4, 5, 6]成为:a3 = [i+1 for i in a]print(a3)#=> [2, 3, 4, 5, 6]列表解析通常被认为更具Python感,却仍易于阅读。图源:unsplash49.remove、del和pop有什么区别?remove()删除第一个匹配值。li =['a','b','c','d']li.remove('b')li#=> ['a', 'c', 'd']del按索引删除元素。li = ['a','b','c','d']del li[0]li#=> ['b', 'c', 'd']pop()按索引删除一个元素并返回该元素。li = ['a','b','c','d']li.pop(2)#=> 'c'li#=> ['a', 'b', 'd']50.举一个字典解析的例子。在下面,将创建字典,以字母作为键,并以字母索引作为值。# creating a list of lettersimport stringlist(string.ascii_lowercase)alphabet = list(string.ascii_lowercase)# list comprehensiond = {val:idx for idx,val in enumerate(alphabet)} d#=> {'a': 0,#=> 'b': 1,#=> 'c': 2,#=> ...#=> 'x': 23,#=> 'y': 24,#=> 'z': 25}51.如何在Python中执行异常处理?Python提供了3个单词来处理异常,请尝试使用" try"、" except"和" finally"。句法如下所示。try:# try to do thisexcept:# if try block fails then do thisfinally:# always do this在下面的简单示例中,try块失败,因为无法在字符串中添加整数。else块设置val = 10,然后finally块打印完成。try:val = 1 + 'A'except:val = 10finally:print('complete')print(val)#=> complete#=> 1052." func"和" func()"有什么区别?这个问题是想考查是否了解所有函数也是python中的对象。def func():print('Im a function')func#=> function __main__.func>func() #=> Im a functionfunc表示函数的对象,可以将其分配给变量或传递给另一个函数。带括号的func()调用该函数并返回其输出。53.解释rece函数的工作原理光是思考原理很难理解,需要上手几次才能明白。rece接受一个函数和一个序列,然后对该序列进行迭代。在每次迭代中,当前元素和前一个元素的输出都将传递给函数。最后,返回一个值。from functools import recedefadd_three(x,y):return x + yli =[1,2,3,5]rece(add_three, li)#=> 11返回11,它是1 + 2 + 3 + 5的总和。图源:unsplash此列表涵盖大多数数据科学家或初级/中级python开发人员在面试中可能被问到的关python方面的问题。面试中会遇到什么问题永远不会知道,最好的准备方法是积累大量编写代码的经验。我们要做的是尽可能地准备充分。留言点赞关注我们一起分享AI学习与发展的干货如转载,请后台留言,遵守转载规范

高电压

计算机专业真的好找工作吗?软件工程毕业的我,竟陷入了困境

01@匿名用户普通大专,计算机专业,学历自然是比不上那些985和211的重点院校。大一大二都是在纠结和迷茫中度过的,不清楚自己到底要干嘛,但是有一点比较清楚,一定要学好计算机专业基础知识,并提高数学、英语和编程能力。未来不管选择是工作还是继续读研,这几项都是非常重要的。大三下学期开始投递简历,参加实习生校园招聘,第一家面试公司是广州的一家小公司,做互联网产品的,然而面试表现不太好,以失败告终。第二家公司是深圳的,创业公司,在南山区,我选择的是C++开发工程师,算得上技术部门第一个了,可能是因为我薪资低的原因别人才勉强留下了,当时糊里糊涂的就答应了,没想到进入部门需要重新面试,结果简历关都没有过。我们全系120人,bat一个没有,二线互联网公司一个没有,基本都是在深圳广州的小公司,bat从来不会来我们学校开宣讲。基本就业的平均工资在4k,比起一流大学整整低了三四千,觉得特别心塞。02@晓峰大学时不知道怎么选专业,听家里人说谁谁谁读计算机月薪过万,那时候只觉得这个专业毕业后工资高,应该还是不错的。进入大学后,我发现自己根本学不进去,完全没兴趣,高中时我虽算不上尖子生,但对于计算机我觉得自己好像变成了个傻子,基础的编程都是问题。毕业那年,在家人都以为我要从事计算机行业时,我却选择了新媒体,一个八竿子打不着的行业,所有的不理解,面试的歧视都在告诉我这条路很难,然而我还是坚持下来进了“新浪”,实习工资1.5k,你很难想象我当时怎么活下来的,每个月租房800,剩下几百块钱的生活费里还要掏出交通费,那段时间还不敢找家里要钱,因为出来工作了就不想再向父母伸手了。如今经过几年的磨砺,我已是一家公司的管理层,管理着整个运营部门,回头看看那时的路,我忽然觉得都不算什么了。没有人可以阻止你奔向成功,阻碍你步伐的永远都是自己。有时候我们觉得路走不通了不妨换条路走走,也许你会发现另一番新天地。03@残影我是一名iOS开发者,就职两年了,大学非211非985,是个三本院校,专业是二本学的软件工程,三年来几乎一直混迹于小公司。都说三年一个分水岭,突然觉得有些迷茫,不知道是应该继续在当前的专业深造下去,还是应该读一个研究生提升自己的核心竞争力呢?毕业时,朋友说计算机专业国内读研究生不如早些去上班,那个时候也确实不想读研,于是开始了找工作之旅,朋友一路上通过自学拿到了BAT的offer,所以一直到现在我都相信通过自身的努力还是有机会的。可是最近我越来越迷茫了,毕业几年仍然找不到自己的方向,如今的职位说不上喜欢也说不上讨厌,但想更进一层似乎很难。以前我的职业愿望是找家大公司,然后做个小领导,可是这几年来我一直都是在小公司,每每辞职都是因为公司撑不下去被迫离开,不知道这家公司还能呆多久。我们都会在职业道路上遇到困扰,刚毕业时想着快点找到工作,不要啃老,毕业几年后又想着换行,升职的问题,其实我们一直都在追寻一个好的职业,能够让自己的职业道路更宽阔。职业是陪伴我们终身的伙伴,所以要给自己最好的才能对得起此生的相伴。就聘了“应届毕业生网络招聘节”重磅开启,11月28日-12月19日,给你的职业一个新的选择,开启新的人生,因为你就是那么的与众不同。

反射弧

哈尔滨工程大学软件工程考研报考分析

哈尔滨工程大学是“国防七子”之一,软件工程学科实力为B档,软件工程学硕在计算机科学与技术学院招生,有四个研究方向。哈尔滨工程大学软件工程的2020招生专业目录:2020年拟招人数30人,其中包括推免计划10人考生的复试总成绩(350分)=专业知识笔试成绩(160分)+软件能力水平测试成绩(20分)+面试成绩(170分)。笔试=专业知识笔试+软件能力水平测试 专业知识笔试:考试科目 2门(数据库原理、网络安全)机试:软件能力水平测试,共20 分,机试时间0.5 小时。面试:面试总成绩(170分)=外语测试成绩(50分)+综合面试成绩(120分),面试时间不少于20 分钟。2018年复试分数线:260分2019年复试分数线270分,一志愿复试人数56,实际录取33人,均为一志愿,最高分370,最低分278分,平均分320分。哈尔滨工程大学是黑龙江的211院校,软件工程学科实力是不错的,该专业招生比较稳定,在30人左右,复试分数线不是很高,但是从去年来看复试刷人比例有点高;在18年的时候接受了调剂,推免比例一般,总的来说招生人数还是挺可观的。计算机类的专业要求比较高,软件工程相对计算机专业来说要容易一些。哈工程由于地理位置的原因,竞争压力没有北上广那么热,在当地的就业应该是没问题的,所以想考一所相对还不错的学校,又想竞争压力没那么大,是可以考虑这所院校的。

风骨

中科大软院考研分数“炸穿地心”均分超380,400+也要考虑调剂

文章:糙科技原创2021年考研成绩已经开始查询,又是几家欢喜几家愁。对于大多数考生来说,考研的国家线相当于及格分数线。因为大多数学校都规定,只有超过了国家的复试线,并且达到院校的复试线后才能参加复试。还有34所自主划线高校的学生,往往需要比国家分数线高出许多才能进面试。尤其是一些火热专业的学院,比如中科大的软件学院。一般来说,考研笔试成绩400+以上的人,查到分数的时候都会表示:但是对于2021届报考中科大软院的同学来说,查询到自己分数在400分边缘……011000多人的考研群,均分387今年中科大软件学院报考学生的成绩可以用“炸穿地心”来形容。根据网友提供的数据,在一个统计了1218人分数的群里,目前的均分已经达到387,440+以上已经有4个,400+的有388个。有网友表示:去年以为是山顶了,没想到在今年看来,去年顶多算是个半山腰。这么看的话,如果不把面试线提到350,那么今年很有可能参加复试的要超过1000人。有网友表示:去年一共791人复试差点把老师累死而且还整出好多个乌龙,今年上千人如果要现场复试那画面不敢想。02中科大软院今年为何这么火?中科大软院之前几年的招录成绩非常普通,甚至说有点低。2018年招录549人,最低310;2019年招录525人,最低310;2020年招录695人,最低320。坊间也传出中科大软院“点击就送”的传闻。图片:知乎@王童鞋那么为什么今年中科大软院突然就火了?除了刚好很多人都想320分进中科大的”巧合“之外,中科大软院的”无导师”培养模式也很关键。据网友介绍,科大软院总体是以就业为导向的,并没有导师带你发论文。虽然也可以找的老师进实验室,但是总体而言是远远不如导师制度的。所以中科大软院的学生一般把目标定在从事一般的开发岗,在研二的时候就开始去互联网大厂实习,然后毕业的时候已经有了1年左右的工作经验,能够在就业方面占据优势。那么在最近几年学术界也开始“内卷化”,尤其是像去年「实名举报天津大学化工学院张裕卿教授和其女张丝萌学术造假」这样的事件出来之后,许多考研学生也开始思索:我考研是为了什么?如果我从来也没准备搞学术,那么为什么不直接面向就业读研呢?如果我想搞学术,那么又怎么能保证我不会碰到“剥削”我的导师呢?多方权衡之下,中科大软院这种直接面向就业,面向互联网高薪岗位的学院就一下子火了。更何况中科大软院本身也实力雄厚。中科大软件学院是国家教育部和原国家计委首批批准设立的示范性软件学院之一。在国内一线软件城市和日本的70余家知名软件企业建立了实习基地,并与美国克莱姆森大学、法国SKEMA商学院和日本法政大学合作,建立了联合培养软件工程硕士计划。03适合不适合,只有自己知道考研是一次转身重来的机会。你可以重新选择一个专业,这将决定你以后发展的方向,甚至是以后发展的城市,所以考研人也会慎之又慎。一旦选错,重新来过又是一年。所以当中科大软件学院突然火了,对于以后的考生来说,无脑地冲进去或许不是最好的选择。首先是要明确自己的发展方向。如果你以后对科研比较感兴趣(甚至考虑读博),或者想在研究生阶段多发论文,那么中科大软件学院并不适合。有软院学生表示,周围没什么同学发论文的,发顶会的更是没听说过。其次是明确自己的学习能力。据了解,中科大几乎只有一年的学习时间,研二大家就开始找实习,对于基础薄弱的人来说,可能会有些吃力,当然,对于这部分学生,软院也安排了开学前暑期补课,课程涵盖了本科计算机专业最重要的五门专业课,可以帮助基础薄弱的同学上手,对于特别反感写代码的同学,就不推荐报考了。最后就是经济实力。据了解,中科大软件学院的学费要比一般院校贵不少,大概是两年半4万,这个就需要自己根据家庭条件衡量了。总之,只有适合自己的才是最好的。

护山神

考研复试时考生该如何回答为什么考研这个问题

考研复试的面试环节确实有一些导师会问考生类似的问题,对于一部分即使不读研也会顺利就业的专业来说,导师问考生为什么考研之类的问题则更为常见,比如软件工程专业等。对于考生来说,在回答为何要考研这个问题时,应该注重把自己的发展规划,个人特点(优势)同时呈现出来。导师问考生这个问题,往往有多种含义,比如要从侧面了解考生的个人特点、知识结构、学习能力、价值观等等,所以应该把这些导师关心的问题做一个主要的概述。实际上,为什么考研是比较能够体现出学生价值观的一个问题,不少同学会回答得比较现实,比如获得更多的就业渠道、更高的薪资待遇、更大的发展空间等等,这些回答没问错,但是这些都是导师不需要问就知道的答案,这些回答并不会给导师传递任何有价值的信息。实际上,很多导师并不是把关注点放在读研结束之后,而是放在读研的过程中,所以考生一定要把握住这一点,尽量要提及在读研的过程中如何规划自己的研究生学习生涯,一个详细的学习规划会为考生赢得更多的关注。通常情况下,考生还可以从三个方面来扩展自己的答案,首先从自身的学习能力角度出发,比如有信心通过读研来获得一定的研究成果;其次从个人的兴趣爱好角度出发,比如自己比较愿意从事研究工作等;最后还可以从个人的能力特点角度来出发,如果在本科期间参加过专业知识竞赛,或者是参与过一些科研活动,可以重点强调一下。为什么考研这样的问题,看似简单,实则不同的回答会给导师传递不同的信息,因为面试的时间比较有限,所以一定不能浪费任何一次导师提问的机会,一定要结合自身的实际情况,来有效回答这个问题。简单的说,就是呈现自己的各种读研优势,并且坚定地告诉导师,自己已经准备好了。我从事互联网行业多年,目前也在带计算机专业的研究生,主要的研究方向集中在大数据和人工智能领域,我会陆续写一些关于互联网技术方面的文章,感兴趣的朋友可以关注我,相信一定会有所收获。如果有互联网、大数据、人工智能等方面的问题,或者是考研方面的问题,都可以在评论区留言,或者私信我!

全家福

如何面试软件工程师 看这篇就够了

作者丨Ammon Bartram翻译丨雁惊寒Triplebyte是一家协助其他公司招聘工程师的企业。在他的招聘流程中不关注应聘者的背景,并通过多种方法来减少对应聘者的偏见,致力于创建更好的招聘流程。本文介绍了该公司的一些招聘经验和建议。我们在Triplebyte公司做过很多次面试。事实上,在过去的两年里,我曾面试了900多名工程师。这是否真的很好地利用了我自己的时间了呢?值得探讨一下!但是,不管怎么说,我们的目标是让工程师更好地被雇用。为此,对于应聘者,我们不关注他们的背景,不看他们的证书或者简历,而是直接考核他们的编程技能。在工程师通过我们的招聘流程之后,他们会直接进入我们合作的公司进行最后的面试(包括苹果、Facebook、Dropbox和Stripe)。我们不看应聘者的背景,直接对他们进行面试,然后再看看他们在这些顶尖的科技公司表现的怎么样。这为我们提供了一些面试方面非常有用的数据。在这篇文章中,将介绍我们从这些数据中学到的东西。技术面试现在出现了很多种不同的方式。但是这个说起来容易,做起来难。我这篇文章的目标就是来接受这个挑战,为招聘经理和首席技术官提供具体的建议。面试虽然很难,但是我认为,只要认真对待,许多问题都可以得到解决。现状大多数的面试过程都包括这两个主要步骤:申请人筛选亲身面试对申请人进行筛选,目的是尽早过滤掉一部分应聘者,以节省面试时间。筛选的过程通常包括:招聘人员浏览应聘者的简历(约10秒钟),然后是30分钟到1小时的电话沟通。我们共有18%的公司使用了家庭式的编程考核(无论是取代手机筛选,还是额外增加的考核)。 有趣的是,经过这些筛选步骤,绝大多数应聘者都会被拒绝掉。 事实上,在所有与我们合作的公司中,超过50%的应聘者在简历浏览的过程中就被拒绝了,另外30%的应聘者在电话筛选或者编程考核中被拒绝。筛选也是招聘中最为随意的一步。招聘人员面对如此多的应聘者,需要快速地作出决定。这时,证书和模式匹配就发挥作用了。亲身面试通常由45分钟到1小时的谈话组成,每次谈话都有不同的面试官。这些谈话主要是技术方面的(每个公司一般都会有一两个专注于文化素养和软技能方面的谈话)。聘用或者不聘用的决定最终会在应聘者离开后的相关会议中确定下来,招聘经理和每个面试官都会参加这个会议。基本上来说,应聘者至少需要有一个强有力的支持者,并且没有强力的反对者才能最终得以录用。然而,除了常见的形式之外,最终面试的形式也千差万别:39%的公司在面试过程中会在白板上做标记52%允许应聘者使用自己的电脑(有9%不一定)55%让应聘者自己挑选问题(剩下的45%使用标准题库)40%需要视应聘者的理论计算机科学水平来决定是否录用15%不喜欢理论计算机科学(并认为,谈论理论计算机科学代表了这个应聘者并不具有创造性)80%让应聘者在面试中可以使用任何编程语言(其余的20%需要使用特定的语言)5%在面试中会明确地评估编程中的细节问题在所有合作的公司中,最终22%的人能得到录用通知。约65%的录用通知会被接受(最终产生雇佣关系)。一年以后,这些公司会对其中大约30%的员工感到非常满意,同时,5%左右的员工被解雇。错误的否定 vs. 错误的肯定那么,目前的这种状况有什么问题吗?要看清楚存在的问题,首先要思考一下面试失败的两种情形。面试可能会让一名坏的工程师被雇用,后来再被解雇(错误的肯定)。而面试也可能会使那些本来能够胜任这份工作的人失去资格(错误的否定)。错误的录用所产生的后果是显而易见的,对公司而言代价也是很昂贵的(体现在薪酬、管理成本和整个团队的士气等方面)。错误的录用会消耗团队的精力。相比之下,可以胜任工作但却没有得到机会的候选者是看不见的。这两种情况中的任何一种都存在争议。由于这种不对等性,公司在面试中更倾向于拒绝应聘者。招聘过程中的杂音会增加这些问题出现的概率。在一小时内判断应聘者的编程水平从根本上来说是很困难的。再加上一系列的模式匹配和依赖直觉的电话沟通,以及上面提到的不同公司的不同偏好,这些都会给你留下非常大的杂音。在这些杂音下,为了保证低概率的“错误的决定”,公司的决策必须偏向于拒绝应聘者。最终产生的结果就是错失优秀的工程师、相对于实际的技能更看重其拥有的证书,以及对相关的人员举棋不定甚至失望。 如果对公司的每个人都要针对其从事的工作重新进行面试,那么通过的百分比有多少呢? 这是一个可怕的问题。答案几乎可以肯定在100%以下。应聘者在被公司拒绝后可能会受到伤害,而公司在找不到所需的人才时也会受到伤害。需要澄清的是,我不是说公司在面试中应该降低要求。拒绝是面试的重点!我更加没有说,公司害怕“错误的肯定”甚于“错误的否定”是错误的。错误的录用一个应聘者所带来的代价是昂贵的。 我认为,招聘过程中的杂音和避免招错人的想法,导致了“错误的否定”的概率很高,这伤害了那些应聘者。而解决的办法就是改善信号。减少面试中的杂音的具体方法1. 确定你要找的员工需要具备哪些技能并没有一套技能标准来定义一个好的程序员。相反,这世上有很多种各不相同的技能集。没有哪个工程师能够擅长这所有领域的技能。事实上,在Triplebyte公司,我们经常会看到优秀而又成功的软件工程师拥有完全不相关的技能。那么,进行一个好的面试的第一步就是要确定应聘者需要具备哪些技能。我建议你问一下你自己下面几个问题。你需要一个能够快速迭代的程序员,还是细心严谨的程序员?你想要有人来解决技术问题,还是构建产品?你是否需要一个拥有某个特定技术技能的程序员,还是一个聪明的、能够在工作中学习的程序员?理论计算机科学、数学、算法能力是重要的还是无关紧要的?理解并发、C内存模型、HTTP是否重要?这些问题没有正确的答案。我们所在的那些成功的公司对这些问题都会有正反两个不同的答案。但是,最关键的是你应该根据自己的需要来做出有目的性的选择。因此,我们要避免的就是简单地随机性地挑选面试问题(或让每个面试官自己决定)。当这种情况发生时,公司的工程师文化可能会发生偏离,具有某个特定技能的工程师会越来越多,公司会向着不重要的方向发展,而那些不具备这种技能的工程师(但是具备其他重要的技能)会被拒绝。2. 让问的问题尽可能地接近真实的工作聘请的专业程序员为了解决一些复杂的大问题可能需要耗费数周甚至数月,但面试官并没有几个星期或几个月的时间来评估一个应聘者。每个面试官通常只有一个小时的时间。面试官看的是应聘者在压力下快速解决小问题的能力。这是一项与众不同的技能。它与应聘者本身所具备的技术技能是相关的,但又不完全相关。在制定面试问题时,应尽可能地让他们之间的差异最小化。面试中问的问题应尽可能地接近应聘者应聘的那个职位(或者你想要衡量的技能)。例如,如果你关心的是后端编程,可以让应聘者构建一个简单的API并添加功能,而不是要求他们解决BFS字链问题。如果你关心算法方面的能力,可以让应聘者通过使用算法来解决问题(比如,用BST和hashmap来构建一个简单的搜索索引,以提高删除操作的性能),而不是要求他们确定一个点是否包含在一个凹多边形中。你可以让应聘者在白板上解决一个小问题,也可以让他们用真实代码来调试程序,但是,后者相对来说效果更好一些。也就是说,在白板上进行面试是有争议的。作为一个面试官,我不在乎工程师是否能够熟记Python itertools模块。我关心的是他们如何使用迭代器来解决问题。通过让应聘者在白板上工作,我可以让他们不必关注语法正确与否,而是专注于逻辑。但是,最终我认为这个论点是错误的,因为对于不同的面试形式并没有给出足够的理由。你可以让应聘者在计算机上操作来获得上面提到的所有的好处,只要告诉他们这个代码不需要运行就行了(甚至可以成为一个开放的书面面试,并允许他们用谷歌搜索任何他们想要的东西)。重点说明一下,面试过程中问的问题应该要能反映实际的工作。这些问题不应该受外部的依赖,这很重要。例如,要求应聘者用Ruby编写一个简单的网络爬虫看起来就是一个不错的实际问题。然而,如果应聘者需要安装Nokogiri(一个Ruby解析库,安装起来可能会很痛苦),并且最终用了30分钟的时间来配置本地扩展,那么这将成为一个可怕的面试。不仅浪费了时间,而且对应聘者的压力也已经过去了。3. 问那种不能放弃的并且包含多个部分的问题对于面试中要问的问题,有另外一个很好的经验法则,那就是要避免可以“放弃”的问题,例如,避免出现应聘者可以提前在Glassdoor(译者注:Glassdoor是美国的一家做企业点评与职位搜索的职场社区网站)上搜索到相关信息的问题,以防止他们不用动脑子就可以回答出来。这样就排除了脑筋急转弯或者任何需要顿悟的问题。同时也意味着所提的问题需要有一系列相互依存的步骤,而不是一个单一的核心问题。另一个有用的方法是问问你自己,你是否能帮助一个陷入难题的应聘者,并且在结束面试的时候,他仍然能够给你一个积极的印象。对于一个只有一个步骤的问题,如果你不得不给应聘者以大量的帮助,那么表明他们失败了。而对于一个包含多个步骤的问题,你可以仅仅帮助他其中的一个步骤,让应聘者可以回答好剩下的步骤。这么做很重要,不仅仅是因为你的问题可能会泄漏到Glassdoor上,而且(并且更重要)因为包含多个部分的问题的杂音更小。好的应聘者会变得紧张而又不知所措。帮助他们并且看着他们恢复情绪是很重要的。应聘者在解决任何一个编程逻辑问题时,都可能会产生一个很大的杂音,因为他们最近可能看到过类似的问题,或者是他们的运气实在太好了。包含多个部分的问题可以消除一些杂音。它让应聘者有机会看到他们自己努力的成果像滚雪球一样越滚越大。在其中的某一个步骤上的努力往往会有助于他们解决后面的步骤。这在实际工作中是一个很重要的动力,而如果在面试中捕捉到这一点就能减少杂音。举个例子,让应聘者在终端上实现Connect Four游戏(有一系列的步骤)可能比要求应聘者旋转一个矩阵(单单一个步骤)来得更好。而实现k均值聚类(互相依赖的多个操作)可能比确定直方图中最大的矩形来得更好。4. 避免太难的问题如果一个应聘者顺利解答了一个非常困难的问题,那么这相当于告诉了你很多有关他的技能方面的事情。但是,由于问题很难,大多数应聘者都不能很好的解答。那么期望从这个问题获得的信息的多少,就会受到这个问题的难度大小的影响。我们发现,最优的难度要比大多数面试官估计的难度要小得多。我们现在遵循的经验法则是,面试官解答出问题的时间应该是他们希望应聘者解答问题所花时间的25%。所以,如果我正在针对一个小时的面试开发新的问题,则我就会要求我的同事(没有任何警告)能够在15分钟内回答出这些问题。同时,上文提到,问题要包含多个部分,并与实际工作相接近,所有这些要求结合在一起,使得最佳的面试问题真的是很直接很简单。需要澄清的是,我并没有要求为了通过率而降低评判标准。我坚决主张对候选者问一些简单的问题,然后在评估中要查看应聘者是如何轻松地回答问题的。我主张问一些简单的问题,但是对评判的标准严格一点。对于大多数应聘者来说,这样带来的压力更小,这算是额外的好处吧。举个例子,要求应聘者创建一个简单的命令行界面,其命令用于存储和检索键值对(如果他们完成的很好的话,可以添加一些功能)可能比要求应聘者实现算术表达式的解析器更好。而涉及到最常见的数据结构(列表、散列、树)的问题可能比有关跳转表、树堆或其他更模糊的数据结构的问题更好。5. 对每个应聘者问同样的问题面试就是对应聘者进行比较。目标是将应聘者分为能或者不能为公司做出贡献的两类人员(如果只是为单个职位雇用人员,则选择最适合的人)。正因为这样,向不同的应聘者提不同的问题是没有道理的。如果你以不同的方式评估应聘同一工作的不同应聘者,就会引入杂音。我认为,人们之所以继续以一种随意的方式选择问题,是因为面试官喜欢这样。技术公司的工程师通常不喜欢面试。他们只是偶尔做这种事情,同时,这也让他们脱离了自己的主业。为了规范对每个应聘者所问的问题,面试官需要花更多的时间来学习这些问题,并讨论得分和答案。每当问题改变时,他们都需要重新再来一遍。另外,总是问同样的问题的确有那么一点点乏味。不幸的是,这里唯一的答案就是要面试官付出自己的努力。一致性是进行有效面试的关键,这意味着要求对每个应聘者提出相同的问题,并标准化答案。别无选择。6. 考虑使用多套面试题你应该考虑提供多份完全不同的面试题,这与我之前的观点是冲突的。在设计面试题时,第一步要考虑的是有关技能方面的事情。然而,某些答案可能会互相之间冲突!例如,你可能需要招聘几个遵守规则的工程师,但同时又要招几个非常有创造性的工程师(甚至可能是相同的角色),这都是非常正常的。在这种情况下,应当考虑准备多套面试题。并且,关键问题是,你应该准备足够多的题目来标准化每套试题。这就是我们在Triplebyte公司所做的事情。你可以简单地询问每个应聘者他们喜欢哪种类型的面试。7. 不要让自己因为证书而产生偏见证书并不是毫无意义。从麻省理工学院或斯坦福大学毕业、或者在Google和苹果工作过的工程师,从整体上来说比其他那些没有这些经历的工程师表现的要更好一些。但问题是,绝大多数的工程师(包括我自己)都没有这些经历。 所以如果一家公司太依赖于这些,那么他们会错失绝大多数的技术人员。 在筛选步骤中给予证书一定的重视程度并不是完全不合理。我们在Triplebyte不会这么做(我们做的所有的评估100%都是不看他们的背景的)。但是,在筛选时给证书一定的重视程度可能是有意义的。然而,让证书来左右最终面试的决定没有任何意义,而且我们有数据可以证明这种情况。拥有顶尖大学学位的应聘者的面试通过率比没有名牌大学学位的候选者高出30%。如果面试官知道应聘者拥有麻省理工学院学位的话,他们更愿意在面试中宽恕应聘者的错误。这是一种杂音,你应该要避免。最简单的方法就是在把简历提交给面试官之前将学校和公司名称去掉。有些应聘者可能会提到他们的学校或公司,但我们在面试时并不知道应聘者的背景,而应聘者在技术评估时很少会提及这些。8. 避免欺负应聘者面试不仅仅是评估一个应聘者的技能,也是一个团队在接纳一个成员。对于后半句话来说,面试可以认为是一个通过仪式。是的,面试的压力很大,也让人讨厌,但是我们都经历了,应聘者也一样。当应聘者做得不好时,这种情况会更加突出。作为一名面试官,当看到应聘者因为一道简单的题目而卡住的时候,心里是沮丧的。你会变得脾气暴躁。当然,这只会增加应聘者的压力。这就是你应该极力避免的东西。解决的办法就是对这个问题进行讨论并对面试官进行培训。我们使用的一个窍门是,当应聘者表现得实在很差时,你可以把评估模式转变为教学模式,评估模式的目标是评估应聘者的技能,而教学模式的目标是让应聘者理解问题的答案。在心理上做出改变会有很大帮助作用。当你处在教学模式时,就没有任何理由去隐瞒信息或是做除了友好以外的其他事情。。9. 根据应聘者具备的最强技能做决策,而不是平均或最小技能到目前为止,我只讨论了个别问题,而没有讨论最后的面试决策。我的建议是尝试根据应聘者展示出来的最强技能水平,而不是平均水平或最低水平来做出决策。这个可能你已经有意或者无意地在做了!做出是否录用决定的方式是这样的,每个面试应聘者的人坐在一起开会,如果至少有一个人强烈要求录用,而且没有其他人强烈反对,那么最终就会录用。而要让一位面试官强烈的支持他,就是应聘者在面试过程中需要做的事情了。我们的数据显示,最强技能是与面试最相关的属性。然而,要被录用,不能有任何一个面试官发出强烈的反对意见。当应聘者在一个问题上看起来真的很愚蠢的时候,强者的反对意见就会出现。在这里我们发现了很多杂音。要成为一名熟练的工程师有很多种不同的方式,但几乎没有哪个应聘者可以全部掌握他们。 这意味着如果你提出正确(或错误)的问题,任何工程师都可能会看起来很愚蠢。 应聘者收到录用通知,那么说明他至少在某一个领域很牛逼(最强技能),而且在其他领域也不会太差。问题是,这就是杂音。同样的一个工程师,因为在网络问题上看起来很蠢而没有通过某一次面试,但他出色地通过了其他的面试,就因为这方面的问题没有出现。我认为最好的解决办法是让公司专注于最强技能,并且对那些在面试中表现得不太好的人提供更多的帮助。 这就是要寻找强有力的理由来肯定应聘者,而不是担心应聘者薄弱的方面。我不认为这是绝对的。 当然,技术领域对于公司而言是至关重要的。但更多地关注最强技能可以降低面试的杂音。为什么要进行面试?我回答的最后一个问题是为什么要进行面试?我相信一些读者已经在咬牙切齿地说:“为什么要为这个破面试考虑那么多东西?完全可以采用家庭式项目,或者试用就业就可以了!” 毕竟,一些非常成功的公司使用的就是试用就业(让应聘者加入团队一个星期),或完全用家庭式项目取代现场面试。试用就业具有很大的意义。在工程师旁边工作一个星期(或者看着他们如何完成一个实质性的项目)肯定比观察他们在一个小时内如何解决面试问题能更好地衡量他们的能力。然而,有两个问题使得试用就业无法完全取代标准的面试:对于公司来说,试用就业的代价很高。没有哪个公司会为每个应聘者花一个星期的时间。为了决定谁来试用就业,公司必须采用一些其他的面试过程。对于试用就业(和大型的家庭式项目),应聘者要付出的代价很高。即使付他们薪水,也不是所有的应聘者都有时间。例如,从事全职工作的工程师可能根本没有时间来做这个。即使可以,许多人也不会这么做。如果工程师手里已经有了其他的录用通知,那么他们就不太愿意承担试用就业的不确定性。在Triplebyte的应聘者中,我们很清楚地看到了这一点。许多非常优秀的应聘者(手里还有其他公司的录用通知)不会做大型项目或试用就业。试用就业是提供应聘者的绝佳选择。我认为如果你有足够的规模来支持多种招聘方式,那么添加试用就业这种方式是一个好主意。然而,作为面试的完全替代品是不可行的。与应聘者谈论过去的经验有时会被用来替代技术面试。看看应聘者是否能在未来做好工作,从逻辑上来讲,可以看看他们在过去做了什么。我们已经在Triplebyte测试了这一点,不幸的是我们并没有总结出很好的结果。沟通能力(销售自己的能力)最终成为比技术能力更强的信号。我们经常会发现口才好的人喜欢夸大他们的作用,而谦虚的人则会淡化他们所做的事情。如果有足够的时间并问他们足够的问题,也许就能分清这两种人。然而,我们发现,在常规面试的时间内,谈论过去的经验并不是面试的一般替代方法。这是打破冷场并理解应聘者的兴趣好爱的不错的方法(并判断他们的沟通能力)。但这并不是一个切实可行的面试替代方案。有关编程面试的好的方面!我想以更积极的方式来结束这篇文章。对于面试中出现的错误,其实也有不少可取之处。面试就是直接对技能进行评估。我有一些朋友,他们是老师,他们告诉我说,对老师的面试基本上就是衡量他们的沟通能力(销售自己的能力)和一张证书。这对于很多专业来说似乎都是如此。硅谷不是一个完美的精英聚集地。但我们至少要尝试直接考核那些重要的技能,并始终相信,任何有这些技能的人,不管他们的背景如何,都可以成为一名伟大的工程师。证书偏见往往阻碍了这一点。但是,我们在Triplebyte已经能够克服这个问题,并帮助很多具有非正规背景的人获得了很好的技术性工作。但是,在其他一些领域,例如,在法律领域,对证书的依赖度就很高。程序员还可以对面试的方式进行选择。这是一个非常有争议的话题,我们做了一个实验,提供了多种不同类型的评估方式,我们发现大多数程序员仍然选择常规的面试。并且我们发现,只有少数程序员对采用试用就业或家庭式项目的公司感兴趣。无论是好是坏,编程面试是大家普遍接受的面试方式。其他类型的评估方式都是伟大的补充,但他们似乎不太可能取代面试作为评估工程师的主要方式。 错误地引用丘吉尔的话,“除了所有其他尝试过的方法,面试是评估工程师最糟糕的方法。”结论面试很难。人类相当的复杂。从某种程度上来说,在四个小时的面试中判断一个人的能力是一个愚蠢的行为。我认为保持谦虚很重要。任何面试的过程注定要失败很多次。人太复杂了。但这并不是说要放弃面试。 尝试采用任人唯才的面试流程总比不尝试要好。 在Triplebyte,我们的面试流程就是我们的产品。我们集思广益,然后进行测试,并随着时间的推移逐步改进。我认为,这就是改进工程师招聘方式的方法。在这篇文章中,我分享了过去两年里我们学到的一些大的事情。我很乐意收到反馈意见,并被告知这些想法对其他人有帮助。

慕尼黑

软件工程师面试的十个问题

许多软件工程师的面试都着重于技术技能,例如对编程语言的了解。但是,一些企业面试官还会注意你的其它一些细节,接下看我们一起看一下十个非技术相关但也十分重要的问题。面试1.“为什么要成为软件工程师?”这是一个在面试中非常常见的问题,作为一名软件工程师,建议通过强调开发热情来回答这个问题。提及你对编码和编程的兴趣,并展示对小型个人项目一些看法。表达你喜欢解决复杂的问题,和技术相关的任何事物。面试官可能会通过这些来判断你对该行业的兴趣。通过你了解的最新的技术,软件设计和开发趋势,让面试官看到你对该领域的热爱。软件工程师2.“你的弱点是什么?”面试官有时会问这个问题,来真正的削弱你的能力。为了证明自己的价值,请诚实地回答。当谈到您的弱点时,请始终积极地谈论自己,并指出您正在努力改善它们。例如,如果您具有CSS的基本知识,则可以说你正在学习一些UI设计的辅助技能来提高自己对UI的认识。或者,如果您发现自己的领导能力达不到标准,那么可以这样说:“我是一个害羞的人,所以在管理方面有所欠缺。但我希望通过对我的专业知识更加自信来改进它。”弱点3.“您能描述软件开发过程吗?”在软件工程师面试期间,您面临很多问题。其中之一可能是描述软件开发过程。如果你确实是该领域的专家,则可以毫不犹豫地回答这个问题。深吸一口气,并尝试尽可能清楚地回答问题。表现出自信,证明你对开发周期了如指掌,如果时间允许,请使用尽可能多的细节。这将会是给你加分的一项。自信4.“您喜欢使用哪种编程语言?”这里的技巧是列出你最熟悉的编程语言-但要避免说您喜欢使用所有这些编程语言。在开发时,大多数软件工程师都有一种或多种首选语言。无论是JavaScript,Python还是PHP,都要提及自己喜欢的编程语言,并炫耀自己的熟练程度。同时,最好事先研究一下面试公司的信息,以确定他们使用的语言。如果你的回答适合他们公司的基础架构,那么这无疑是给你加分的选择。html5.“您之前从事过哪些项目?”这个问题将测试你的知识,批判性思维和解决问题的能力。无论是描述个人项目,实习项目还是在上一份工作中从事过的工作,请确保彻底解释自己的构建经验。这包括您采取的步骤以及做出某些决定的原因。概述可能承担的任何风险,描述任何弊端并分解项目。可以指出从该项目中获得的知识以及你从中提高的某些领域。这证明了你对软件工程的全面理解以及您是否能够在公司从事类似的项目。project6.“您在项目中面临了哪些困难?”再一次,这个问题需要一个真诚的答案。招聘面试官将要测试你对项目开发过程中可能面临的挑战的理解。如果您提到个人经历并说明如何克服,那么您将展示出出色的解决问题和领导能力。揭示最终用户的反馈如何帮助您改进和找到解决方案,以及这一挑战如何使您从错误中吸取教训。表明你不会放弃,并且可以适应开发过程中遇到的障碍和问题。problem7.“您在查看代码时会注意什么?”面试官可能会问您类似的问题来试图确定你对软件工程师职位的细节和整体责任的重视。回答时,要尽可能清晰,简洁和有条理,以显示出良好的知识。不过,请避免只列出要点-最好在每个答案后面都给出推理。说些类似的话:'我会密切注意功能,可读性以及代码是简单还是混乱。还要注意代码中可能存在的缺陷,处理哪些必须重写或删除的代码。review8.“您是否在业余时间从事项目?如果是这样,那是什么?经常在业余时间不断学习提高技能的工程师是受欢迎的。这展示了您对工艺的真正热情和兴趣。描述您的附带的练习项目,并解释您从构建它中学到的知识。您正在练习一种新的编程语言吗?强调这种语言如何使您所申请的职位受益。但这并不意味你在业余时间可以来接私活,公司对于软件开发者接私活是很排斥的,所以你有这个经历请避开。study9.“为什么选择我们的公司?”这是另一个出现几率非常高的面试问题 ; 它需要仔细回答。面试官将需要对公司工作真正感兴趣的候选人。避免提及薪水或“因为朋友在这里工作”作为答案。相反,您可以说您渴望扩大自己的行业经验,想要扮演更具挑战性的角色,或者对他们的产品/服务有真正的钦佩。对他们的领域表现出兴趣,并提及您的技能如何使公司受益。只要您事先对公司进行了足够的研究,就轻而易举地回答这个面试问题。10.“您能完成编程挑战吗?”听起来有些奇怪,这将显示您解决问题的能力和承受压力的能力。毕竟,软件工程师很多时候都是在一定压力下编写代码。面试官会检查你的知识,技能和经验,同时要考察你承受压力的信心。郑重鉴定的来回答这个问题,如果有类似解决问题的经验可以来谈一下。以上是面试软件工程师面试中的一些非专业技术性问题,但它也是作为考察的一部分,了解他,并希望帮助您在重要的日子中脱颖而出。记住要炫耀自己的技能和经验,并且始终准备随时当场解决编程难题!