C++与Java语法上的不同,互联网 面试官 如何面试

阅读多篇面经,总结了10个面试官常问的项目问题 近期春招和暑期实习陆续开始了,很多小伙伴已经开始面试了。 对于研发岗位的同学来说,要准备的内容有很多,如:Java/C++基础知识、计算机基础知识(os和网络)、MySQL、中间件、算法、项目。 这么多要准备的,你慌了吗? 最令大家头疼的或许就是项目吧 没项目的时候担心简历单薄,不给面试机会。 有项目之后又担心项目被深挖,担心自己掌握不熟回答的不好。 项目思考 由于每个人做的项目参差不齐,有的项目来自B站,有的来自github/gitee,有的来自实验室。 另外这些项. 阅读详情


写在最前面,我总结出了很多互联网公司的面试题及答案,并整理成了文档,以及各种学习的进阶学习资料,免费分享给大家。扫码加微信好友进【程序员面试学习交流群】,免费领取。也欢迎各位一起在群里探讨技术。

 

 

 

最近学习算法和刷题基本都是用C++写的程序,在这个过程中,发现C++和Java在语法上有很多相同点,但也有很多不同点,而这些不同点对于已经掌握Java的程序员来说,理解C++代码可能会有些吃力甚至困难,在踩过了一个又一个坑后,我决定把这些不同记录下来,可能涵盖的不是很全,所以本文会持续更新。


 

零、目录

1. new关键字

2. C++实例化对象的几种方式

3. C++初始化表达式

4. C++构造函数后的冒号

5. C++中难以省略的分号;

6. C++中的::

7. C++中的*、&、->

8. C++函数前或者函数后的const

9. delete完成后需要将指针置为NULL

一、new关键字

// C++中:

MyClass* a = new MyClass();

delete a;

// Java中:

MyClass a = new MyClass();



  1.  
  2. C++中new关键字实例化对象之后返回的是一个对象的指针,所以需要定义指针;而Java中定义对象时返回的其实也是一个指针(引用),但是在Java中不需要显示的定义指针。


    不同点


     
  3. C++中通过new关键字实例化的对象在使用完毕后需要使用delete关键字手动释放内存;而Java中由于垃圾回收机制的存在,我们无需手动释放内存。


     

二、C++实例化对象的两种方式

// 方式一

MyClass* a = new MyClass();

delete a;

// 方式二

MyClass b(params...); // 该方式将会调用有参数的构造函数

MyClass c; //该方式将会调用无参数的构造函数



  1.  
  2. 方式一中new关键字做了三件事:首先在堆内存上获得内存空间(类似malloc函数),然后调用类的构造函数,最后返回该内存空间的指针;因为是在堆内存的动态分配的内存空间,所以最后需要调用delete函数释放这一部分内存空间。


     
  3. 方式二中直接在栈内存上分配了存储空间,类似于基本类型的定义,所以无需手动释放内存空间,其会在作用域生命周期结束时自动调用析构函数释放内存;但是当对象信息量较大时,这种做法会占用很多内存,影响程序效率。


     

三、C++初始化表达式

int a(10); // 等效于 int a = 10;

与java不同,C++除了使用赋值语句初始化变量之外,还可以使用上述初始化表达式对变量进行初始化,其效果相同。

四、C++构造函数后的冒号

// 初始化表达式

class MyClass {

  public:

    const int a;

    int b;

    MyClass(int aVal, int bVal):a(aVal), b(bVal) {}

};

// 非初始化表达式,无法通过编译,编译时会报以下错误:

// 'const int MyClass::a' should be initialized

class MyClass {

  public:

    const int a;

    int b;

    MyClass(int aVal, int bVal) {

       a = aVal;

       b = bVal;

    }

};

这个语法其实就是上述第四点中的初始化表达式,但这里我们看到下面这种赋值方式在构造函数里面会报错,这又是为什么呢?因为这里我们的冒号初始化和赋值语句干的事情不太一样:在冒号初始化时,只有冒号后面有相应变量的初始化表达式,就会在为成员变量分配内存时进行初始化,所以常量a在分配内存时做了初始化操作,之后也没有被改变值,所以不会报错;而在使用赋值语句时,构造函数在执行到函数体时已经为a分配了内存但却没有对其进行初始化,因此就会报should be initialized编译错误了。

 

这种神奇的写法我第一次见的时候也是惊讶了一波。


 

五、C++中难以省略的分号;

在上面例子中我们看到了C++类的定义后面也要加分号;我们知道在Java中类定义的大括号后面都无需加分号。


之后查资料发现:


在C++中,除函数,及预编译指令外,其它的语句或代码段结尾都必须要加分号。其中预编译指令是指,以#开头的语句。常见的有,#include ,#define, #ifdef, #if, #elif, #else,#endif等。

六、C++中的::(作用域符)

C++的作用域符::用法有三,一一介绍如下




  1.  
  2. 全局作用域符


     
int a = 3;

void test() {

  int a = ::a;

  cout << a << endl;

}

这里就是将全局变量a的值通过全局作用域符的方式访问到,然后将其值赋给test函数中的局部变量a。




  1.  
  2. 类作用域符


     
class MyClass {

  public:

    void sayHello();

};

void MyClass::sayHello() {

  cout << "hello world!" << endl;

}

这里有点类似Java中定义接口和对接口进行实现;首先在类的定义中定义了一个函数sayHello,但是没有具体函数体,然后在类的定义外,通过作用域符,在函数sayHello前加了一个MyClass::,相当于告诉编译器,这个函数就是MyClass类的sayHello方法的具体实现。




  1.  
  2. 命名空间作用域符


     
std::cout << "hello world!" << endl;

这里std就是命名空间,这样的用法相当于using namespace std;

七、C++中的*、&、->

class MyClass {

  public:

    int a;

    MyClass(int aVal):a(aVal){}

};

int main () {

  MyClass obj(5);

  MyClass* objPointer = new MyClass(3);

  // 常规操作

  cout << obj.a << endl;

  // 取指针操作

  cout << (*objPointer).a << endl;

  // ->操作

  cout << objPointer->a << endl;

  // 取地址操作

  cout << (&obj)->a << endl;

  // new出来的对象别忘了释放内存哦

  delete objPointer;

  return 0;

}

在C++中:




  1.  
  2. *表示访问指针a指向的变量;


     
  3. &表示取得变量的地址;


     
  4. .表示访问对象的的成员变量或者函数;(与Java相同)


     
  5. ->表示访问指针指向的对象的成员变量或者函数;

     
     

    指针内容实在太多,这里就不赘述了,有兴趣的童鞋可以参考菜鸟教程


     



     

八、C++函数名前或者函数名后的const




  1.  
  2. 函数名前的const


     
const int getVal() {

  const int a = 3;

  return a;

}

int main() {

  cout << getVal() << endl;

}

就是定义函数的返回类型,规定返回变量类型必须为const。




  1.  
  2. 函数名后的const(用于类的成员函数中)


     
class MyClass {

  public:

    int a;

    MyClass(int aVal):a(aVal){}

    void sayHello() const {

      cout << "a value is: " << a << endl;

    }

    // 编译报错:assignment of member 'MyClass::a' in read-only object

    void changeA() const {

      a = 5;

    }

};

函数名后面的const表示是该函数为常成员函数,该函数不能修改对象内的任何成员变量,只能发生读操作,不能发生写操作。这样可以对成员变量起到保护作用。

九、delete完成后需要将指针置为NULL

MyClass* a = new MyClass();

delete a;

// 省略下面这句运行时会出现以下错误:

// pointer being freed was not allocated

a = NULL;

delete a;

对一个非空指针delete后,若没有置为NULL,若再次delete的话,有可能出现问题。而C++标准规定:delete空指针是合法的,没有副作用。所以每次delete之后要将指针的值置为NULL。这是一个不得不养成的好习惯,hah...

 


转载:https://www.cnblogs.com/codernie/p/9133175.html

推荐内容:
Java进阶篇(一)——接口、继承与多态
windows一键部署java项目
一个两年Java的面试总结
2年Java开发工作经验面试总结
知名互联网公司校招 Java 开发岗面试知识点解析
java面试题大纲
Java--面试通关要点
java面试技巧
java高级开发面试总结
【Java】几道常见的秋招面试题

 

2018年互联网技术岗(数据分析)暑期实习面试经验   此经验帖适合想找互联网相关工作的人,如数据分析、算法工程师、数据挖掘工程师等。或者是想进入BAT等互联网公司的人,我会介绍他们暑期实习招聘流程及笔面试经验等,暑期实习往往是有转正机会的。友情提醒:本文均是干货,阅读本文大概需要5分钟。   简单介绍一下作者的情况,某985高校2017级应用统计专业型硕士(学制两年),研一下学期(2018年3月)开始投递暑期实习网申,于4月23号收到腾讯数据分... 阅读详情

相关推荐

互联网校招 | 大厂面试官常问的java八股文都在了

今年的技术招聘市场, Java依旧是当仁不让的霸主 !即便遭受 Go等新兴语言不断冲击,依旧岿然不动。究其原因: (1)Java有着极其成熟的生态,这个不用我多说; (2)Java在 运维、可观测性、可监 控性方面都有着非常优秀的表现; (3)Java也在积极 应对容器化、云原生等大趋势,比如Spring Boot就已经全面拥抱云原生。企业对Java的需求最大 ,Java程序员的群体也最为庞大,有着 1000万之多 ,彼此之间都有更多的选择。换句话说,也是最修罗场的!所以,要想拿下自己心仪的Offer ,咱

程序媛小琬的博客 964

C++与Java语法上的不同

c++_java.png 最近学习算法和刷题基本都是用C++写的程序,在这个过程中,发现C++和Java在语法上有很多相同点,但也有很多不同点,而这些不同点对于已经掌握Java的程序员来说,理解C++代码可能会有些吃力甚至困难,在踩过了一个又一个坑后,我决定把这些不同记录下来,可能涵盖的不是很全...

weixin_34015860的博客 182

和腾讯面试官聊了一个小时人生后,以为没戏,却意外收到了Java的offer!

作为一名深受腾讯游戏“毒害”的90后,以前最大的理想就是到腾讯开发游戏,去看看腾讯游戏的葫芦里到底卖的是什么药,才会让这么多祖国花朵甘愿把时间和金钱都投入到他们研发的游戏中。 去年这个时候,时值互联网公司春招开始,鹅厂自然也不会闲着,在阿里之后开启了内推。我眼见进腾讯的时间已经成熟,于是便兴冲冲地道腾讯官网投递了我的简历,那时候的简历虽然比不上秋招的简历,但也不算差劲,过个简历筛选应该是不成问题...

qq_36860032的博客 1506

写算法,用 C++ 还是用 Java ,差别大吗?

大家好,我是为人造的智能操碎了心的智能禅师。今天带来的文章,是 GitChat 签约作者王晓华在不断被读者吐槽:“好好一本算法书为什么要用 C++ 来写” 时,万般无奈下...

优快云人工智能头条 3万+

c、c++和java相关面试知识

包括c++和java区别、50个C、C++面试题、C语言笔试面试题(最全)、C语言面试题汇总、Java方面、JAVA相关基础知识、Java学习笔记(必看经典)、常见Java面试题和答案、华为笔试题大全(史上最齐全)、经典的软件测试面试题、面试题集_su(带答案)、游戏公司面试题及答案

MFC使用Websocket通讯介绍和实例(附完整源码)

踩坑点,下载了好几个boost版本编译,经常出问题,后来搜索了好久资料才发现如下评论:WebSocket++0.8.2 has been tested through Boost 1.72。WebSocketpp依赖于boost,因此在使用WebSocketpp前需要编译Boost;所以我们直接下载Boost 1.72的windows版的进行安装,安装完成还需要编译;WebSocketpp也叫WebSocket++;服务编译好之后,使用。

weixin_42530684的博客 1171

java开发工程师面试题,C++对C的扩展

十、引用(reference)

2401_84009192的博客 980

大专非科班拿下汇丰外包Java岗:我的TEKSystem面试全流程复盘(含IKM笔试真题)

本文详细记录了一位非科班大专生成功通过TEKSystem面试,拿下汇丰银行Java外包岗位的全过程。从IKM全英文笔试到技术面试,作者分享了7个关键转折点的实战经验,包括简历优化、技术考点、英语面试策略及薪酬谈判技巧,特别适合初级Java开发者参考。

weixin_30074763的博客 393

java和c++复试面试题

仅仅只收集了一小部分

用来自己学习,复习 2796

基于PCIe的NVMe协议在FPGA中实现方法

NVMe协议是工作在PCIE的最上层协议层的,故需要先搞清楚PCIE。本文基于Xilinx的UltraScale+,开发工具为Vivado2021.2。NVMe的学习仍以spec为主,其它资料辅助理解,有冲突时以spec为准,必要时可对比最新版本spec。(此文重点介绍学习方法及资料,有时间再加细节)。 主要参考的文章是《老男孩读PCIe》,同时参考《古猫先生》,重点学习TLP报文部分,数据链路层和物理层的内容可以先不看。再买一本书《PCI Express 体系结构导读-王齐》用来查阅做笔记。

leixj的博客 1万+

TexGen模型导出ABAQUS inp文件时纱线材料属性缺失?5分钟快速修复指南

本文针对TexGen模型导出ABAQUS inp文件时纱线材料属性缺失的问题,提供了快速修复指南。通过手动编辑inp文件或使用Python脚本自动补全材料属性,帮助复合材料仿真工程师高效解决问题。文章还介绍了TexGen导出前的预防性设置和ABAQUS中的验证技巧,确保仿真分析的准确性。

qsc901234的博客 250

拿着5家offer的Java,对面试官做了什么?

大家好,我是孙叫兽。本期分享内容从Java初级开始说起,来讲一下要想拿到offer,你必须要做哪些充足准备! 先从初级Java开始,当你还是一个初级Java的时候,要想拿到offer,首先要关注自己的简历,简历是让你表达自己的第一关键因素,我认为简历就是让我把自己的优势尽情展现出来,就好比我们大学时竞聘学生会主席,扭扭捏捏、表达不清晰的肯定不会被列为候选人。简历做的好,你就过了HR这一关,HR把你的简历给到技术部门,你就可以进行下一趴了。 再就是预设面试问题。你需要事先预想到面试官可能会问到的各种刁钻的.

孙叫兽的博客 5113

安装openclaw时出现node.exe : npm error code EIDLETIMEOUT的解决方案

本文主要介绍了安装openclaw时出现node.exe : npm error code EIDLETIMEOUT的解决方案,希望能对学习使用openclaw的同学们有所帮助。 文章目录 1. 问题描述 2. 解决方案

weixin_43178406的博客 11万+

技术主管质询JVM调优策略:P7面试官与C++老兵的极限对决

在终面倒计时15分钟的关键时刻,技术主管突然质疑面试者的JVM调优方案,要求其现场解释如何解决FullGC问题。P7面试官与C++老兵展开激烈讨论,老兵试图用C++的内存管理理念反驳Java的GC机制,而面试官则用ZGC的超低延迟特性反击。在白板上推导JVM的内存布局与GC过程时,网络突然闪断,老兵手写代码示意,而面试官则用JOL工具破解对象内存布局,最终在极限压力下完成挑战。

Ared 765

《信息化项目文档模板十二——业务需求新增/变更审批确认表 》

系列文章目录 《信息化项目文档模板一——项目需求说明书》 《信息化项目文档模板二——项目启动会文档模板》 《信息化项目文档模板三——会议纪要模板》 《信息化项目文档模板四——系统项目蓝图设计模板》 《信息化项目文档模板五——系统详细设计模板》 《信息化项目文档模板六——系统详细设计模板》 《信息化项目文档模板七——系统开发计划模板》 《信息化项目文档模板八——系统功能测试模板》 《信息化项目文档模板九——系统压力测试模板》 《信息化项目文档模板十——系统推广上线计划模板》 《信息化项目文档模板十一——系统用

商务合作|问题讨论|交流学习 请联系作者微信,加微信请务必注明来意,博客主页有联系方式 1712

JavaSwing_4.2: JDialog、JOptionPane(对话框)

JDialog,对话框。使用 JDialog 类可以创建自定义有的对话框,或者调用 JOptionPane 中的多个静态方法快速创建各种标准的对话框。JOptionPane是 JavaSwing 内部已实现好的,以静态方法的形式提供调用,能够快速方便的弹出要求用户提供值或向其发出通知的标准对话框。

谢TS的博客 7万+

面试官:兄弟,说说Java到底是值传递还是引用传递

二哥,好久没更新面试官系列的文章了啊,真的是把我等着急了,所以特意过来催催。我最近一段时间在找工作,能从二哥的文章中学到一点就多一点信心啊! 说句实在话,离读者 trust you 发给我这段信息已经过去 1 周时间了。不是我怠慢,确实是可更新的内容实在是太多了。这不,又有两个读者不约而同地要求我更新一下 Java 到底是值传递还是引用传递方面的文章——其实这个问题我之前是写过的,但现在看起来...

沉默王二 6669

运维系列【仅供参考】:微信版本过低 使用CheatEngine绕过

微信版本过低 使用CheatEngine绕过

weixin_54626591的博客 2133

《互联网大厂 Java 面试:核心知识、框架与中间件大考验》

在互联网大厂的一间明亮面试室内,严肃的面试官正襟危坐,对面坐着略显紧张的求职者王铁牛。一场激烈的技术面试即将展开。:“我们先从 Java 核心知识开始。能说一下 Java 中多态的实现方式有哪些吗?:“多态的实现方式主要有两种,一种是方法重载,就是在一个类中可以有多个同名方法,但参数列表不同;另一种是方法重写,子类重写父类的方法。:“回答得不错。那再问你,JVM 的内存区域是如何划分的?:“JVM 内存主要分为堆、栈、方法区等。堆是存放对象实例的地方,栈主要是存储局部变量等,方法区存放类的信息、常量等。

hjc_1732的博客 944

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

高并发压测第3小时:转Java的C++老兵手撕红黑树,面试官质疑JVM调优方案

在高并发压测的第3小时,面试官提出对JVM调优方案的质疑,转Java的C++老兵在手撕红黑树环节卡壳,面对极限压力,他用JMM解释双重检测锁,迅速调整思路,最终用Arthas在线诊断生产问题,化解危机,顺利通过终面。

Ared 932

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

【友情帮助】互联网面试官角度的java后端面经&amp;建议&amp;实习

金山办公春招已启动,特别是c++岗位大量招聘,薪资可观,硕士18k起步,本科14k起步,相比大厂门槛低,非常重视新人培养(新人培训机制完善)。2024金山办公春招已启动,特别是c++岗位大量招聘,薪资可观,硕士18k起步,本科14k起步,相比大厂门槛低,非常重视新人培养(新人培训机制完善)。2024金山办公春招已启动,特别是c++岗位大量招聘,薪资可观,硕士18k起步,本科14k起步,相比大厂门槛低,非常重视新人培养(新人培训机制完善)。第一次面大模型的面试, 八股真的是背了也忘, 汗流浃背。

华鑫的专栏 1105

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

互联网公司校招Java面试题总结及答案——网易

因为时间有限,所以这部分很多都没有整理答案,后序有时间再补上。 其他请参看我的系列文章: 互联网公司校招Java面试题总结及答案——阿里、腾讯 互联网公司校招Java面试题总结及答案——微店、去哪儿、蘑菇街 互联网公司校招Java面试题总结及答案——招银科技 互联网公司校招Java面试题总结及答案——乐视、滴滴、华为 互联网公司校招Java面试题总结及答案——CVTE 互联网公司

The night of summer 2万+

《探秘互联网大厂Java岗面试:核心知识到热门框架全考察》

比如多个线程同时对一个整型变量进行自增操作,如果没有合适的同步机制,可能会导致最终结果不符合预期,因为一个线程读取到的值可能已经被其他线程修改过了,但它并不知道,还是基于旧值进行计算。之前参与过几个小项目,主要就是用Java做一些后端的业务逻辑处理,像用户注册登录模块,还有商品信息管理模块这些,用的技术也就是常见的Spring、MyBatis这些框架来搭建项目架构,实现数据的增删改查操作。今天,就带大家走进一场这样的面试现场,看看一位求职者在面对面试官的层层提问时,会有怎样的表现。接下来进入下一轮提问。

hjc_1732的博客 948

高并发压测第3小时:转行Java的C++老兵手撕Redi分布锁实现,面试官质疑CAP定理理解

在高并发压测的第3小时,面试官突然抛出分布式锁的实现任务,转行Java的C++老兵凭借扎实的多线程与锁机制基础,开始在白板上手撕Redis分布式锁的实现细节。然而,面试官进一步质疑他对CAP定理的理解,要求现场推导证明。老兵是否能在这场技术对决中稳住阵脚,化解压力?

Ared 671
上一篇: Java 文件流操作.,互联网 面试官 如何面试
下一篇: Java体系学习书籍推荐,BAT 面试官 如何面试
agoodcoder777
博客等级 码龄8年 24粉丝 54原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值