2018深信服醒狮计划面试题以及经验

本文分享了一次面试的经历,包括自我介绍技巧、内联函数与宏的区别、构造与析构函数的概念、拷贝构造函数的应用场景、堆栈的区别、设计模式中的单例模式实现、strcpy函数的底层实现方式以及虚函数与纯虚函数的区别。

版权声明:本文为博主原创文章,未经博主允许不得转载

  突然收到面试通知搞得我猝不及防。现在分享一下自己的面试题目和感想。希望对大家有所帮助。由于楼主比较水,又没有时间好好复习,所以感觉面试不是很好,结果还没有出来,并不知道,能不能收到offer。所以,大家勿喷。

  刚一进门,面试官让自我介绍。我就巴拉巴拉说了一堆自己会什么啊,学过什么啊,做过什么项目的,至于获得过什么奖项啥的根本没说,其实说了也没多大用,最主要的原因是我紧张,忘了说,哈哈。

来来来,进入正题

1、什么是内联函数啊,什么是宏啊?

内联函数:是函数,可以重载。是C++为了提高程序的运行效率做的一种改进。就是在编译阶段将编译代码和其他的程序代码“内联”起来。我个人觉得内联函数是借助空间换时间。内联函数,就是使用相应的函数代码替换函数调用。如果执行这段函数代码的时间超过函数调用的时间,使用内联函数就显得苍白无力了。只有在代码执行很短的时候,才能显示出内联函数的优越性。

宏定义不是函数,只是使用起来像函数。用复制宏代码的方式代替函数调用。宏定义在预编译时候使用宏名代替宏体,就是字符串替换。宏定义没有类型检查,无论对错,直接替换。

2、什么是构造函数、析构函数

构造函数:专门用于创建新对象的函数。构造函数名和类名相同,没有返回值,没有声明类型。构造函数用new分配内存。

析构函数:用构造函数创建对象后,程序负责跟踪该程序,直到过期为止。对象过期后会调用特殊的成员函数--析构函数。析构函数完成清理工作,用delete释放内存。

3、什么是拷贝构造函数

拷贝构造函数是一种特殊的构造函数。它在创建对象时,是使用同一类中之前创建的对象来初始化新创建的对象。

拷贝构造函数通常用于:

1.通过使用另一个同类型的对象来初始化新创建的对象。

2.复制对象把它作为参数传递给函数。

3.复制对象,并从函数返回这个对象。

4、堆和栈

这个概念应该可以说好多好多。我当时激动的只说了一点。

堆:可以是不连续的,释放由程序员控制,容易产生memory leak。堆只能动态分配;

栈:是连续的,是由编译器自动管理,无需人工控制。在计算机底层实现,效率比较高。还有就是栈既可以动态分配,也可以静态分配。

5、设计模式你知道那几个,实现一种

 创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。
 结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。
 行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模 式、状态模式、访问者模式、中介者模式、解释器模式。

其实还有两类:并发型模式和线程池模式。

我只说了单例模式,然后让我实现。

6、strcpy底层如何实现的(手写代码)

巴拉巴拉写了一堆,不知道,自己写对了没,我用的for循环放到一个新的数组里面实现的。各位大神有知道的,可以评论区留言一下,共同进步。

7、虚函数和纯虚函数

  虚函数的作用:运行时多态。既有定义,也有实现。

  纯虚函数,只定义没有实现,就是“抽象类”。

还有就是我同学问到了冒泡排序的算法手写,掌握排序算法也是必须的啦。最后还问了linux的简单命令,还有就是自学了什么,个人觉得,面试官是想了解你的自学能力吧。

   基本上就记得这么多了,昨天面试完,很累就没写,今天发现有的问题都忘记了,我总共面了30多分钟,其他人也有时间少点的,希望对于初次面试的人儿有点帮助。因为我也是第一次面,超级紧张(ps:基础有点差原因吧)。

 

### HTML导航栏内部链接跳转实现方法 在HTML中,可以通过使用`<a>`标签结合`href`属性来实现导航栏的内部链接跳转功能。这种跳转功能可以将用户引导到同一页面内的特定部分。以下是实现这一功能的具体方法和相关代码示例。 #### 使用ID标识符实现内部跳转 每个目标部分需要设置一个唯一的`id`属性值,然后通过`<a>`标签的`href`属性引用该`id`。例如: ```html <!-- 导航栏 --> <div class="navbar"> <a href="#section1">第一部分</a> <a href="#section2">第二部分</a> <a href="#section3">第三部分</a> </div> <!-- 页面内容 --> <div id="section1" style="margin-top: 100px;"> <h2>第一部分</h2> <p>这是第一部分内容。</p> </div> <div id="section2" style="margin-top: 100px;"> <h2>第二部分</h2> <p>这是第二部分内容。</p> </div> <div id="section3" style="margin-top: 100px;"> <h2>第三部分</h2> <p>这是第三部分内容。</p> </div> ``` 当用户点击导航栏中的链接时,页面会自动滚动到对应`id`的目标位置[^1]。 #### 使用平滑滚动效果 为了提升用户体验,可以添加CSS的`scroll-behavior`属性以实现平滑滚动效果: ```css html { scroll-behavior: smooth; } ``` 此外,还可以通过JavaScript实现更复杂的滚动动画。例如,使用jQuery的`animate`方法来控制滚动速度和行为: ```javascript $(function() { $(".navbar a").click(function(event) { event.preventDefault(); var target = $(this.hash); $("html, body").animate({ scrollTop: target.offset().top }, 1000); // 滚动动画持续时间为1秒 }); }); ``` 此代码片段通过绑定点击事件监听器,计算目标元素的位置,并使用`animate`方法实现平滑滚动[^4]。 #### 固定顶部导航栏的设计 如果希望导航栏固定在页面顶部,可以结合CSS样式进行设计。以下是一个基本示例: ```css .navbar { position: fixed; top: 0; width: 100%; background-color: #333; overflow: hidden; } .navbar a { float: left; display: block; color: white; text-align: center; padding: 14px 20px; text-decoration: none; } .navbar a:hover { background-color: #ddd; color: black; } ``` 以上代码定义了一个固定在页面顶部的导航栏,并为链接设置了悬停效果[^2]。 ### 注意事项 - 确保目标元素的`id`值唯一,避免冲突。 - 如果页面内容较少,可能需要为每个目标部分添加额外的间距(如`margin-top`),以确保滚动后的内容不会被固定导航栏遮挡。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值