记一次阿里电面经历

昨天下午(3/19)三点多钟,接到了一个杭州的电话,是阿里的。问我是否方便聊聊。我说我在上课,四点下课。然后他就四点多钟的时候又打了一次过来。

项目经历

上来就问我有无大型项目的经历。不好意思,我说无。。

。又问我代码量怎样,我说之前有常常刷ACM的题目,所以代码量还能够。

C语言变量

问:“函数中的局部变量保存在哪里?” 

答:“栈”

问:“函数中的局部静态变量保存在哪里?”

答:“静态区。。”

问:“局部静态变量和全局静态变量有不同吗,不同点在哪里?”

答:“。

。没太大不同,都存在一起。。”

问:“不是问的存储位置。其它方面呢?”

答:“哦,可视的范围不同。全局静态变量全局可见。局部静态变量仅仅有函数内部可见。”

问:“全局变量和全局静态变量有何不同”

答:“存的位置是挨着的。要说不同的话,也是可视范围吧,全局静态变量仅在当前文件内可见,全局变量是该项目全部文件可见。

联合(union) 

问:“知道联合吗?”

答:“union”

问:“和结构体有何不同?”

答:“联合的每一个成员的拥有共同的起始地址(共享存储空间)。而结构体为每一个成员单独分配空间。

问:“union这样设计的目的是什么(union有何用途)?”

以下我就赶快头脑风暴了一下。。

绞尽脑汁地的表达自己的拙见。该部分内容你能够无视,我认为自己扯得也有点远。。

        “这样设计节省内存空间。有时候在某个特定的情况下。我们仅仅须要用的某种特定的类型,怎样像结构体那样则浪费了存储空间。在曾经的时候Linux编程(POSIX)中IP地址的结构体(struct in_addr)就是一个联合(也可能是结构体成员是联合),比方成员是4个元素char数组,两个元素的short数组,或一个int等等,这样我们就能根据不同的网络类型(A类、B类、C类)来自由的获取该地址的网络号或主机号(比方。要获得一个网络的网络号。若是一个A类地址,我们就读取char数组第一个元素。B类地址我们就读取short的第一个元素来)”

当然了如今的struct in_addr 里面实际上仅仅是包括一个整型的结构体了。

不是联合了。上面关于in_addr和联合的说法是从《UNP》上看来的。

算法

大数相加的算法

问:“怎样实现两个数的相加(超过了long long这些的范围了)?”

答:“用一个字符数组来存储数字,然后依次遍历每一个字符。通过减‘0’字符的方法转换为数字。再逐位相加。。

这是比較经典的大数算法。

但他事实上没等我说完就打断我了

问:“这样当然能够,可是这样的方法效率非常低。有没有高效的方法”

答:“不会了”

问:“再想半分钟”

答:“真的不会了(对自己也是无语。求网友告知算法)”

其它算法

问:“你还了解哪些算法”

答:“大部分是学数据结构涉及到的算法,BFS,DFS,最小生成树。最短路径等等。hash也算一种算法吧,还有排序算法。其它的比方像并查集这样的数据结构也算吧。”

关于算法我没敢多提,由于我也怕他深入地问下去,好久没搞算法了,这次没准备,肯定会跪。

只是他也没深入的问下去

书籍

问:“你没有项目经验。那你读过什么经典书籍吗?”

答:“C++ primer,Think in C++也读过一点。(事实上读过一点的经典书籍还有非常多。。

)”

const指针

问:“声明一个常量指针,指向一个整型。但指向的地址不可变”

哎,这个我知道是重点,也是easy混淆的知识点。前几天我还特地整理了一下。只是,给我点时间我自己慢慢梳理一下能够答好的。他这一问,我才发现我还是掌握不坚固。

答错了。他又指导了我一下。

正确的答案是:const int * a(int const * a)。

int * const a 是指向的整型的值不可变,指针本身可变。

--------------------------------------------------------------------------------------------------------------------------------------------------------------

总结一下,速记方法:关键的是const与星号(*)的位置。int永远在星号左边的。记成“反转”即可了。

能够忽略到int。

那么就仅仅有两种形式

const * a和* const a。表面上const * a const在星号前面应该是修饰指针的,可是要反转记忆一下,它是修饰变量的。

即变量是常量。

* const a表面上,cosnt在a前面应该是修饰变量的,实际上它是修饰指针的,即地址是常量不能变。


以上仅仅是速记的方法。并非C语言设计者的设计意图。

。。

--------------------------------------------------------------------------------------------------------------------------------------------------------------

内存对齐

问:“比方你malloc了一段内存,它的地址不是内存对齐的,怎样实现8字节的内存对齐?”

答:“一个预处理的那个#pragma能够实现(#pragma pack(8))”

问:“这是用编译器来实现。有没有软件方式?”

接下来是在他的提示下,我大概推測了一下回答的。

答:“先推断malloc的内存地址是不是内存对齐的”

问:“怎样推断?”

答:“8字节对齐。那么内存地址应该是8的倍数,能够%8(对8求余)”

问:“这会涉及到除法运算,效率比較低。”

答:“那就用位操作,能够按位与,前面几位是0后面三位是1,哦,我说的是二进制(十进制7)。

然后推断值是否为0”

问:“假设结果是没有对齐,该怎样对齐呢?”

接下来就全然是我的臆測了

答:“那就给这个地址指针加一下。差多少就加多少,可能还要根据指针类型进行一些转换。

”(答的不好。只是他也没提反对意见,就下一题了


--------------------------------------------------------------------------------------------------------------------------------------------------------------

后来我自己手动敲了一下代码。须要注意的问题是指针是不能直接进行求余或位操作的,进行指针到int类型的强制类型转换是失败的。

可选方案例如以下:

假设是C++的话。使用reinterpret_cast

long pp = reinterpret_cast<long>(p); // p 是char *类型

假设pp是int型(reinterpret<int>(p))则会报错提示丢失精度(gcc 64位)。

二面的时候面试官又问了相同的问题,只是问的细节很多其它,他说能够用static_cast<>来转换指针为整型。

我后来试了一下发现不能够。。会报错的。所以我尝试了reinterpret_cast<>

假设是C++的话。就:

int pp = reinterpret_cast<int>(p); // p是char *类型

C语言尽管没这个功能,但事实上要想比較指针地址是否是8的倍数,实现还是比較简单的,指针类型是无法指针做&操作的。

可是我们能够进行一个小转换:

//a 是malloc的返回值。char *类型
if ((a - (char *)0) & 7)
{
....
}

当然这段代码C++也能够用。

要注意的是malloc的返回值最好要强制类型转换为 char *:

// 比方分配一百的个字符的空间。
char *p = (char *)malloc(sizeof(char)*(100+8)); // 多分配8个字节的空间。为了以后的偏移留足空间。

尽管理论上malloc的返回值能够转化为随意指针类型比方:int *。

可是要注意到指针的加减操作。所偏移的单位是指向类型的大小。比方:

// 假设p是int *类型
p += 1; // p向后偏移1*4个字节(int是4个字节)
// 假设p是char *类型
p += 1; // p向后偏移1*1个字节(char是1个字节)

非常明显char *类型的指针偏移的准确度更高。这也是为什么我们通常把malloc返回值转换为char *而不是int *的原因。

--------------------------------------------------------------------------------------------------------------------------------------------------------------

回调函数

问:“C++中怎样实现回调函数”

回调函数,挺熟的名字,callback。

。。可是详细是个什么意思还真不好说。记得在安卓里面见到过。就扯了一下安卓。

问:“那么在C++中该怎样实现呢”

接下来。确实也是运气。

脑袋里冒出个函数指针,就脱口而出了。说了个一般的函数指针使用方法。貌似说对了。

答:“函数指针吧,先什么一种类型的函数的函数指针,然后你能够自己去实现这样的类型的函数。然后再把这个函数作为參数传递给函数中(參数是函数指针的函数)。

内存分配原理

问:“有没有看过内存分配管理的源代码?比方malloc之类的。

答:“没有啊。那大概是汇编吧”(记得大概是Linus说过早期的malloc是用汇编实现的。如今就不知道了。

。)

问:“也不是涉及详细语言,就是内存管理的算法了解吗?”

答:“没看过这方面的不了解。。”

然后问题就结束了。如今想想他的意思大概是要我从操作系统的知识方面谈一下内存管理的算法,比方扫描一下,哪里未使用的空间就分配出去之类的。


后来问我有什么问题。

我基本没啥问题。问了点弱智问题。

问:“是内推的你们会打电话过来(在某群里找了个内推。

)还是全部在官方申请实习的。你们都会打电话过来?”

答:“一般全部申请的都我们会打过去。


---------

后来第二天打来第二个电话。二面。。只是二面挂了。。

转载于:https://www.cnblogs.com/yutingliuyl/p/6871835.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/281973.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C语言程序设计第三次作业

&#xff08;一&#xff09;改错题 计算f(x)的值&#xff1a;输入实数x&#xff0c;计算并输出下列分段函数f(x)的值&#xff0c;输出时保留1位小数。 输入输出样例1&#xff1a;   Enterr x: 10.0   f(10.0) 0.1 输入输出样例2&#xff1a;   Enter x: 234   f(234.0…

mysql数据库项目化教程郑小蓉_MySQL数据库项目化教程(高等职业教育“十三五”规划教材(软件技术专业))...

《MySQL数据库项目化教程/高等职业教育十三五规划教材(软件技术专业)》是一本介绍MySQL数据库基础知识的入门教材&#xff0c;采用项目驱动方式循序渐进地介绍MySQL各个模块的知识。主要内容包括&#xff1a;Windows下MySQL的安装&#xff0c;MySQL服务的启动与停止&#xff0c…

WPF-09 ManualResetEventSlim信号量

业务场景如下&#xff1a;WPF应用程序后台有个定时任务在接收PLC硬件数据(该线程接收完数据之后, 会重新启动一个新线程继续接收.....)&#xff0c;当应用程序关闭时, 我们得确保接收PLC硬件数据的线程完成之后,再关闭应用程序&#xff0c;否则会造成数据丢失。上面的业务场景是…

【bzoj3033】太鼓达人 DFS欧拉图

题目描述 给出一个整数K&#xff0c;求一个最大的M&#xff0c;使得存在一个每个位置都是0或1的圈&#xff0c;圈上所有连续K位构成的二进制数两两不同。输出最大的M以及这种情况下字典序最小的方案。 输入 一个整数K。 输出 一个整数M和一个二进制串&#xff0c;由一个空格分隔…

Redis 集合处理

学习了列表之后&#xff0c;发现了Redis处理字符串的功能强大。 为了适应不同场景的需求&#xff0c;还有一个用的很多的就是集合。 Redis提供的集合支持的类型是字符串。并且集合中的元素值是唯一的&#xff0c;也就是说不能出现重复数据。 而且&#xff0c;集合的实现是通过哈…

fpga mysql_FPGA的一些琐碎知识整理

1.生产FPGA的厂家有&#xff1a;ALTERAXILINXATCELLatticeps:Altera和Xilinx主要生产一般用途FPGA&#xff0c;其主要产品采用SRAM工艺Actel主要提供非易失性FPGA&#xff0c;产品主要基于反熔丝工艺和FLASH工艺ps: 熔丝&#xff0c;顾名思义&#xff1a;把丝熔掉&#xff0c;反…

使用增量备份修复DG中的GAP

问题描述 oracle中DG出现主备不同步现象&#xff0c;alert日志报警有gap信息&#xff0c;但是v$archive_gap视图查不到任何信息。同时主库上的对应归档已经删除且没有备份 解决方案 1.查询备库的scn SQL> select current_scn from v$database; 这时有可能出来的scn是以科学计…

C# 反射类Assembly用法举例

概述程序运行时&#xff0c;通过反射可以得到其它程序集或者自己程序集代码的各种信息&#xff0c;包括类、函数、变量等来实例化它们&#xff0c;执行它们&#xff0c;操作它们&#xff0c;实际上就是获取程序在内存中的映像&#xff0c;然后基于这个映像进行各种操作。Assemb…

团队作业

团队&组员&#xff1a; 没有组名&#xff0c;大概是因为我们组虽然有10个人&#xff0c;但是好像只起到人多的地方就容易开车搞笑&#xff0c;没有内涵&#xff0c;取出来的都是秋名山吴彦组这样的开车组名&#xff0c;在大家的的强烈建议和玩笑中&#xff0c;决定了没有组…

算法系列【希尔排序】篇

常见的内部排序算法有&#xff1a;插入排序、希尔排序、选择排序、冒泡排序、归并排序、快速排序、堆排序、基数排序等。用一张图概括&#xff1a;关于时间复杂度&#xff1a;1. 平方阶 (O(n2)) 排序各类简单排序&#xff1a;直接插入、直接选择和冒泡排序。2. 线性对数…

sql查询索引语句_sql优化总结--基于sql语句优化和索引优化

概述最近做查询&#xff0c;统计和汇总。由于数据量比较庞大&#xff0c;大部分表数据上百万&#xff0c;甚至有的表数据上千万。所以在系统中做sql优化比较多&#xff0c;特此写一篇文章总结一下关于sql优化方面的经验。导致查询缓慢的原因1、数据量过大2、表设计不合理3、sql…

电商行业运维实践

电商行业运维实践&#xff0d;&#xff0d;&#xff0d;&#xff0d;&#xff0d;&#xff0d;&#xff0d;&#xff0d;&#xff0d;&#xff0d;&#xff0d;&#xff0d;&#xff0d;&#xff0d;&#xff0d;&#xff0d;&#xff0d;&#xff0d;&#xff0d;&#xff0d;…

数据结构小总结(成都磨子桥技工学校数据结构前12题)

[pixiv] https://www.pixiv.net/member_illust.php?modemedium&illust_id34352147 暑假的作业&#xff0c;颓颓的我总算是写完了 线段树 线段树是一个高级玩意&#xff0c;不仅可以求区间和&#xff0c;区间最大等等的简单问题&#xff0c;灵活运用还有好多变种。自从学…

【九章算法免费讲座第一期】转专业找CS工作的“打狗棒法”

讲座时间&#xff1a; 美西时间6月5日18&#xff1a;30-20&#xff1a;00&#xff08;周五&#xff09; 北京时间6月6日09&#xff1a;30-11&#xff1a;00&#xff08;周六a.m&#xff09; 讲座安排&#xff1a; 免费在线直播讲座 报名网址&#xff1a; http://t.cn/R2XgMSH&a…

golang mysql 防注入_Go,Gorm 和 Mysql 是如何防止 SQL 注入的

Go&#xff0c;Gorm 和 Mysql 是如何防止 SQL 注入的SQL 注入和 SQL 预编译技术什么是 SQL 注入所谓SQL注入(sql inject)&#xff0c;就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串&#xff0c;最终达到欺骗服务器执行恶意的SQL命令。具体来说&#xff…

wav2midi 音乐旋律提取算法 附可执行demo

前面提及过&#xff0c;音频指纹算法的思路。 也梳理开源了两个比较经典的算法。 https://github.com/cpuimage/shazam https://github.com/cpuimage/AudioFingerprinter 后来一段时间&#xff0c;稍微看了下这两个算法&#xff0c;还有不少可以精简优化的空间。 例如抗噪&…

全新升级的AOP框架Dora.Interception[5]: 实现任意的拦截器注册方式

Dora.Interception提供了两种拦截器注册方式&#xff0c;一种是利用标注在目标类型、属性和方法上的InterceptorAttribute特性&#xff0c;另一种采用基于目标方法或者属性的调用表达式。通过提供的扩展点&#xff0c;我们可以任何我们希望的拦截器注册方式。目录一、IIntercep…

SCAU 算法课的题

8594 有重复元素的排列问题&#xff08;优先做&#xff09; 时间限制:1000MS 内存限制:1000K提交次数:1610 通过次数:656 题型: 编程题 语言: G;GCC;VC Description 设集合R{r1,r2,...,rn}是要进行排列的n个元素&#xff0c;其中r1,r2,...,rn可能相同。 试着设计一个算法&am…

react 数组新增_React 新特性 Hooks 讲解及实例(二)

本文是 React 新特性系列的第二篇&#xff0c;第一篇请点击这里&#xff1a;React 新特性讲解及实例什么是 HooksHook 是 React 16.8 的新增特性。它可以让你在不编写 类组件 的情况下使用 state以及其他的 React 特性。类组件的不足状态逻辑复用难缺少复用机制渲染属性和高阶组…

智课雅思词汇---二十二、-al即是名词性后缀又是形容词后缀

智课雅思词汇---二十二、-al即是名词性后缀又是形容词后缀 一、总结 一句话总结&#xff1a; 后缀&#xff1a;-al ②[名词后缀] 1、构成抽象名词&#xff0c;表示行为、状况、事情 refusal 拒绝 proposal 提议 withdrawal 撤退 1、名词性后缀acy是什么意思&#xff1f; 后缀&a…