首页 > 其他分享 >计算机面试问题记录1

计算机面试问题记录1

时间:2023-09-23 11:56:52浏览次数:44  
标签:代码生成 编译 计算机 记录 语义 词法 面试 循环 优化

c++中如何判断一个浮点数是否为0?

判断是否在一个误差范围内:

cpp
const float eps = 1e-6;
if(abs(x) < eps) {
  // x is nearly zero
}

舍入到整数再判断:
cpp
float x = 0.00001;
if(round(x) == 0) {
  // x is nearly zero
}


c++如何提高多重循环的效率?

一、实例化变量尽量放在for循环体外,只实例化一次。
二、普通变量改为寄存器变量,如i++改为++i。前置递增运算避免了不必要的工作,它把值加1后直接返回改变了运算对象本身。
三、条件比较使用<要快于<=,同理>要快于<=。
四、把外层可以计算的尽可能放到外层;有判断条件的语句与循环不相关的操作语句尽量放在for外面。
五、应将最长的循环放在最内层,循环次数最少的放在最外层,以减少CPU跨切循环层的次数。

 

 

编译原理中优化主要是做什么的?

循环优化:改进循环结构,删除不必要的循环

公共子表达式消除:检测重复的表达式并重用计算结果

内存优化:合并内存访问,优化数据在内存中的布局

编译器自身优化:优化编译器的内部数据结构,加速编译过程

 

 

编译原理中每个步骤主要做什么?

1. 词法分析词法分析阶段将源代码分割成词法单元(标识符、关键字、运算符等),生成词法表。主要作用是进行词法错误检查,并为语法分析生成输入。

2. 语法分析 语法分析阶段根据上下文无关文法构建语法树,检查语法错误,并保存程序语义。这是编译的核心部分。

3. 语义分析在语法树的基础上进一步检验语义,如类型检查、作用域resolution等。确保程序语义的正确性。

4. 中间代码生成将源代码转换成中间表示,如三地址码。中间代码去除源语言特定结构,为后端代码优化和生成做准备。

5. 代码优化在中间代码的基础上进行各种优化,如常量传播、循环优化、内联代换等。生成更高效的目标代码,不改变程序语义。

6. 目标代码生成将优化后的中间代码转换成目标机器代码指令,完成代码生成。目标代码可直接在特定平台上运行。

 

 





标签:代码生成,编译,计算机,记录,语义,词法,面试,循环,优化
From: https://www.cnblogs.com/yccy/p/17724110.html

相关文章

  • vue3的面试题
    1.什么是Vue3?Vue3有哪些新增特性?答:Vue3是Vue.js框架的最新版本,它增加了很多新特性,包括CompositionAPI、Teleport、Suspense和Fragment等。2.Vue3CompositionAPI是什么?它的作用是什么?答:Vue3CompositionAPI是Vue3中的一个新特性,它的作用是将组件中的逻辑分解成可复用的可......
  • React面试
    1.什么是虚拟DOM?虚拟DOM是真实DOM在内存中的表示,ul的表示形式保存在内存中,并且与实际的DOM同步,这是一个发生在渲染函数被调用和元素在屏幕上显示的步骤,整个过程被称为调和2.类组件和函数组件之间的区别是什么?类组件可以使用其他特性,如状态和生命周期钩子,并且他有this函数组件只......
  • 本科生优秀作业交流网站-计算机毕业设计源码+LW文档
    本科生优秀作业交流网站的设计与实现摘要:本本科生优秀作业交流网站是针对目前本科生优秀作业交流管理的实际需求,从实际工作出发,对过去的本科生优秀作业交流网站存在的问题进行分析,完善用户的使用体会。采用计算机系统来管理信息,取代人工管理模式,查询便利,信息准确率高,节省了开支,提......
  • 基于BS模式的教务管理系统的设计与实现-计算机毕业设计源码+LW文档
    摘 要在科技快速发展的今天,各个行业都在不断地跟上时代的潮流,利用科技的力量来提升自己的竞争力。教务管理体系自然也不例外,互联网技术的日益成熟,推动了教务管理体系的建立,从根本上改变了以往的传统管理模式;不但降低了服务管理的难度,还提高了管理的灵活性。教务管理系统,主要的模......
  • 嵌入式笔试面试刷题(day15)
    (文章目录)前言本篇文章继续讲解嵌入式笔试面试刷题,希望大家坚持跟着我的脚步一起加油冲击大厂offer。一、Linux中的主设备号和次设备号1.查看方法查看主设备号和次设备号方法:首先先进入/dev目录:cd/dev使用下面命令查看:ls-l2.主设备号和次设备号的作用每个设备驱......
  • 计算机小白的成长历程——数组(2)
    大家好,很高兴又和大家见面啦!在上一篇我们介绍了一维数组的相关内容,今天咱们要介绍的是二维数组的相关内容。二维数组的创建和初始化1.二维数组的创建(1)什么是二维数组个人理解对于二维数组,我是这样理解的:一维就是一条线,二维就是一个面,那一维数组就是只有一行或者一列的数组,而二维数......
  • Mysql简单的学习记录(上)
    MySql一、DDL(操作数据库、数据表)创建数据库createdatabase数据库名称查询数据库showdatabasescreatedatabaseifnotexists数据库名称删除数据库dropdatabase数据库名称dropdatabaseifexists数据库名称使用数据库selectdatabase......
  • Mysql简单的学习记录(下)
    一、约束概念作用于列上的规则,用于限制加入表的数据保证数据库正确性、有效性、完整性约束的分类约束名称描述关键字非空保证列中所有数据不为nullnotnull唯一保证列中所有数据不相同unique主键主键是一行数据唯一标识,非空且唯一primarykey......
  • Android面试必问的6个问题,跟面试官斗智斗勇
    前言在职场中,面试是筛选和评估候选人的重要环节。那么对于各位程序员来讲,在面试的时候,面对HR的“套路”又该如何应对呢?以下是在职场中面试必问的6个问题,以及应对思路。一、请做一下简单的自我介绍面试时,基本上所有求职者听到的第一个问题都是这个,而一般人回答往往也只说姓名、年龄......
  • 计算机音视频的发展与应用
    摘要:随着计算机技术的不断进步,音视频技术也取得了长足的发展。本文探讨了计算机音视频领域的最新发展,并探讨了其在各个领域中的广泛应用。引言:计算机音视频技术是指通过计算机处理、传输和展示音频和视频数据的技术。它不仅仅影响了我们对音乐、电影和娱乐的感受,还在教育、医疗、通......