03.02 面对一工科男来应聘算法工程师,却不知道int是几个字节,一个字节有几位,这是一种怎样的体验?

伝儱


通常来讲int俗称字,一般为4个字节,也有1个字节,或2个字节。这取决于平台CPU的指令宽度。跨平台的代码,会有使用#define或typedef重新命名,比如unsigned int命名为INT32U。



对于算法工程师,我认为应该了解此题。理由很简单,一是算法必须涉及数据,那么数值范围就必须明确;二是算法必须考虑空间,比如存储大小和运行大小,字节对齐,读写访问的边界问题。



如果算法工程师对此不甚了解,那很可能会出大事,比如算法中一个int变量取值大于2个字节所表示的范围,那么该算法在32位系统中没有事,但放到16位系统中就可能出错,今时今日依然有很多系统最大只支持16位呢,尤其是在单片机系统中,8位更常见。顺便说一句,我还用过只支持16位的,不支持8位或32位。即没有Byte Mask功能。

说到这里,可能大家还遇到过,32位的系统支持64位字,int64,long long类型,怎么回事?通常使用一个结构体两个32位字的成员变量来实现,字节访问上就用两个int 32的周期去读写一个数据。



总之,跨平台算法,要具体情况具体分析。谢谢大家。


嵌入式宏思微想


讨厌装逼的面试官,算法的,我们公司的25k的ai python算法工程师,代码垃圾的一逼,从没用过oop,代码极端面向过程,多个文件里面的代码重复程度吓死人。一天写不出10行代码,要想破头才能下笔写一个新文件。算法只是装逼的玩意,华而不实。25k的ai算法工程师代码被12k的python工程师代码暴击。很明显的是,flask redis celery django这些流弊的框架,你刷100年leetcode都写不出来这样的框架,由于不懂oop,调用这些框架像天书一样。python ai算法工程师连flask写个接口都不会,太垃圾了,小公司的ai人员只会装逼,没有产出。


潇洒的树叶0509


一般而言一个字节八位,无符号正整数范围0-255.两个字节0-65535。一般int是两个字节,也有longint,不同开发语言可能略有差异,不过基本相同。

具体编程过程中,许多程序员不见得需要知道int是多少位,因为现在的硬件配置好,无需计较一个变量的占用空间。如果是上世纪的程序员就需要考虑,如果计数范围小,还要考虑一个字节byte。以前为了节约空间和加快速度,涉及到数学运算时需要用位操作,如左移和右移。因此在C语言中经常要嵌入汇编来达到最佳效果,当然现在这样做是脱裤子放屁了,比如目前比较流行的各种脚本语言,哪里还需要知道多少字节,我见过许多年轻人大学里没有学过基础知识,学习编程都是一开始就学html5或python,而以前大学学的是数据结构和计算机原理、编译系统等基础课程,但是以前的老程序员不见得就干的过年轻人,虽然基础好但时代进步了导致老程序员知识老化,现在新的开发工具层出不穷,你用C编一个月的程序,别人三天就能搞定,这就是效率,现在流行的是效率,快捷。因此对于当前中国这个时代很多人恍如隔世,现在程序员根本不需要上大学,有中专文凭就够了,做个网站,搞个UI轻松简单再加上懂点ug画个三维动画什么的,不得不服啊。


飞翼点通


算法工程师目前的分工比较细,有不少算法工程师并不做算法实现,所以在编程语言的使用方面也可能存在不熟悉的情况。但是现在不少程序员对基础知识的掌握也没有以前那么扎实,这是一个比较明显的现象。

我经常作为面试官参加一些企业的程序员面试工作,在面试的过程中我一般会问一些比较基础的问题,以便于了解程序员的基础知识结构。像int是几个字节的问题我也问过,大部分程序员是能够回答上来的。类似的问题还有计算机端口号的范围、网络寻址方式、TCP协议与UDP协议的区别、接口的作用、XOR运算的规则等等问题,一般这些问题都是问初级程序员比较多,对于中高级程序员则一般问一些具体的解决方案。

对于一些简单的基础问题的回答能反映出程序员的基础知识结构,按照历史经验来看,对于一些非计算机专业的程序员来说可能在回答这些问题的时候会显得吃力,因为目前的很多程序设计语言都比较简单,在很多实验中也练习不到这些基础知识,但是这些基础知识对程序员来说还是比较重要的。

很多情况下,即使没有回答上来一些基础性的问题也不要气馁,毕竟现在的开发环境与早些年有很大的不同,程序设计更多的关注于模块化、扩展性等问题。但是基础知识的掌握对于程序员来说还有很有必要的,尤其是一些常识性问题。

我使用Java、C和Python的时间比较长,也在头条上陆续写了一些关于程序设计、大数据方面的文章,对这些内容感兴趣的朋友可以关注我,相信一定会有所收获。

谢谢!


IT人刘俊明


奇怪,怎么会有算法工程师。算法是软件工程师基本功啊,不懂算法搞什么软件,抱孩子去吧!


思想的天空翱翔


感觉你对算法有误解!

算法和编程是两回事,算法作的好,不一定要有编程方面的知识!

研究算的人一般是学数学出身,一般多用MATLAB,不懂编程不算什么奇怪的事……


军117397201


int类型的长度会随运行平台不同而不同,比如32位机的int是32位,64位机长度是64位,要指定长度必须用int32或int64(go语言),所以不知道不是很正常的吗?


紫枫闲人


坦率讲中国程序员很容易陷入两个极端,一种是爱钻牛角尖,比如争论int多长,哪种排序算法贼牛,这种基本是小孩。另一种确实需要提高,只会写添改删查确实无法胜任更有挑战的工作。这两种程序员中国都不缺,最缺的是愿意在软件设计上多思考的程序员,架构该如何设计,服务该如何设计,模块该如何设计,类,函数该如何设计,代码该如何提高可读性,如何保证系统中的抽象层设计的更合理,在实现,扩展和维护时更顺畅,不冲突,有良好的一致性。看看国外的开源框架,人家的设计是有美感的,是艺术,我们应该把更多时间用来提升自己的审美,深入思考设计上的更多技巧和模式。


wumin810711


算法工程师是程序员的一类 ,是负责将别人设计好的算法变成代码实现、封装好之后供其他人调用的那个角色;不是拿张纸拿支笔靠数学知识解决抽象问题的角色,那是算法研究员。不知道int占几个字节怎么做空间优化?怎么知道自己的代码能处理多大规模的数据?在什么情况下数据会溢出?不知道这些你怎么提高算法的健壮性?

对算法工程师而言,知道int占几个字节就像中学生知道二元一次方程求根公式一样是基本能力。

别扯什么int跟硬件平台相关,算法工程师实现的代码是要在具体平台上跑的,自然要知道在这个平台上占几个字节;如果是跨平台的开发,int长度是固定的,更应该知道。

顺便再说一下真正的算法牛人是集算法研究者和算法工程师角色于一身,比如D.E.Knuth,Linus Torvalds,Anders Hejlsberg,看看人家写的代码,效率优化到极致,想改他一行代码都改不了。现在有些人自以为会调几个TF的超参数就是算法工程师了,真是笑死人。


蓝色的星49


面试要找对方优点,而不是缺点。寸有所长,尺有所短。没有人是完美的,也不是什么都懂。招人不是要找一个什么都懂的完美人,而是要找一个为我所用的可以对组织发挥价值的人。要看看他自认为最擅长的领域,到底如何。

比如这个来应聘算法的,那么就考他的算法。请他讲一个他认为最有意思的算法,他最熟悉的算法,他遇到过的最难的算法,然后看看他对算法理解深度和广度,算法的时间和空间复杂度,如何优化,以及他阅读过哪些文章或者有趣的相关话题,看他的思维模式、解决问题的技巧、表达沟通能力。

他说Java厉害,那就考Java,就不要问C++的问题。他说Python强,就让他用Python写两个程序,就不要问bit的问题。他说不会,你就不用问,他说精通,你就试探他的深度。他说忘记怎么写代码了,你就让他来画图描述算法。

一些初级面试官,就喜欢问面试官自己熟悉而别人不懂的题目,虽然显示面试官技术很厉害的样子,对公司来说价值不大。其实,反过来让应聘者问几个面试官问题,面试官表现也许也差不多。

一些短视的面试官喜欢考“经验”,就是问“这个你懂不懂”。如果找来都是面试官已经懂的人过来,那么找这样的人过来只是干活儿,这个团队地知识领域和视野还是那么一亩三分地而已。如果招来现在团队里还没有人了解和精通的领域的候选人,那才是部门的开疆辟土之士。对于准备建立一个有效团队的领导者来说,更注重“人品”和“潜力”。你对某个方面技术很深,那么我要来推测在新的领域,是否也可以快速成长成为新的专家。我见过不少聪明的有潜力的人,一两年后发展比原来有经验的人强,而且可扩展性更强。


分享到:


相關文章: