当我编写以下程序并使用GNU C++编译器时,1我认为输出是由编译器执行的旋转操作引起的.
#include <iostream>
int main()
{
int a = 1;
std::cout << (a << 32) << std::endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
但从逻辑上讲,正如所说的那样,如果位溢出位宽就会丢失,输出应为0.发生了什么?
代码在ideone上,http: //ideone.com/VPTwj .
我落在这个页面上,作者谈到了运营商""的标准化:
C++标准委员会标准化
operator ""的决定 是[...]
他/她在说什么?我找不到任何关于这个的信息,我不明白它可能意味着什么(对于常量字符串重载?或者更概念性的东西,这不会影响语言的最终用法?)
在C++中,我经常将单元测试类作为我正在测试的类的朋友.我这样做是因为我有时觉得需要为私有方法编写单元测试,或者我想要访问某个私有成员,这样我就可以更轻松地设置对象的状态,以便我可以测试它.对我来说,这有助于保持封装和抽象,因为我没有修改类的公共接口或受保护的接口.
如果我购买第三方库,我不希望它的公共接口被一堆我不需要知道的公共方法污染,因为供应商想要进行单元测试!
我也不想担心一群受保护的成员,如果我从一个类继承,我不需要知道.
这就是我说它保留抽象和封装的原因.
在我的新工作中,他们不赞成使用朋友课,甚至进行单元测试.他们说因为班级不应该"知道"关于测试的任何内容,而且你不希望课程和测试的紧密耦合.
有人可以向我解释这些理由,以便我可以更好地理解吗?我只是不明白为什么使用朋友进行单元测试很糟糕.
这段代码是否正确?
auto v = make_unique<int>(12);
v.release(); // is this possible?
Run Code Online (Sandbox Code Playgroud)
它等同于delete原始指针吗?
我有这样的C代码:
#include<stdio.h>
int main()
{
printf("Hey this is my first hello world \r");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我使用\r转义序列作为实验.当我运行代码时,我得到的输出为:
o world
Run Code Online (Sandbox Code Playgroud)
为什么会这样,究竟有什么用\r?
如果我在在线编译器中运行相同的代码,我得到的输出为:
Hey this is my first hello world
Run Code Online (Sandbox Code Playgroud)
为什么在线编译器产生不同的输出,忽略了\r?
这是我的问题.作为node.js模块,我实现了一个执行大量计算的小脚本.因此,如果我输入"node myModule.js",它会计算一秒钟,然后返回一个值.现在,我想从我的主Node.JS程序中使用该模块.我可以将所有计算放在"doSomeCalculation"函数中然后执行:
var myModule = require("./myModule");
myModule.doSomeCalculation();
Run Code Online (Sandbox Code Playgroud)
但这会阻塞,因此它会很糟糕.我想以非阻塞的方式使用它,例如本地的数据库调用.所以我尝试使用child_process.spawn和exec,如下所示:
var spawn = require("child_process").spawn;
var ext = spawn("node ./myModule.js", function(err, stdout, stderr) { /* whatevs */ });
ext.on("exit", function() { console.log("calculation over!"); });
Run Code Online (Sandbox Code Playgroud)
但是,当然,它不起作用.我试图在myModule中使用EventEmitter,发出"calculateDone"事件并尝试在上面的示例中的"ext"变量上添加关联的侦听器.仍然无法正常工作.
至于分叉,它们并不是我想要做的.Forks需要将与计算相关的代码放在主程序中,在父进行任何操作的同时在子进行分叉,计算,然后如何返回结果?
所以这是我的问题:当计算放在Node文件中时,我可以使用子进程进行非阻塞计算,还是只是不可能?我应该在Python脚本中进行繁重的计算吗?在这两种情况下,我如何将参数传递给子进程 - 例如,图像?
在采访中,我被要求解释抽象和封装之间的区别.我的答案一直是这样的
抽象使我们能够以最简单的方式表现复杂的现实世界.它是识别对象应具备的相关品质和行为的过程; 换句话说,表示必要的特征而不表示背景细节.
封装是将对象的所有内部细节隐藏在外部现实世界中的过程."封装"一词,就像"封闭"成"胶囊".它限制客户端看到其实现抽象行为的内部视图.
我认为通过上面的回答,面试官确信,但后来我被问到,如果两者的目的都隐藏了,那么为什么需要使用封装.那时候我没有一个好的答案.
我应该添加什么来使我的答案更完整?
我知道有>>符号整数的行为可以依赖于实现(具体来说,当左操作数为负时).
怎么样的人:~,>>,&,^,|?当他们的操作数有符号内建类型(整数short,int,long,long long),都将结果保证是相同的(中位含量),好像他们的类型是无符号的?
如何检查两个向量的第一个"n"元素是否相等?
我尝试了以下方法:
#include <iostream>
#include <vector>
#include <iterator>
using namespace std;
typedef vector<double> v_t;
int main(){
v_t v1,v2;
int n = 9;
for (int i = 1; i<10; i++){
v1.push_back(i);
v2.push_back(i);
}
v1.push_back(11);
v2.push_back(12);
if (v1.begin()+n == v2.begin()+n)
cout << "success" << endl;
else
cout << "failure" << endl;
}
Run Code Online (Sandbox Code Playgroud)
为什么打印"失败"而不是"成功"?
为什么Thread.stop()在Java中被弃用?在他们的网站上,我看到以下内容:
为什么
Thread.stop弃用?因为它本质上是不安全的.停止线程会导致它解锁已锁定的所有监视器.(当
ThreadDeath异常传播到堆栈中时,监视器将被解锁.)如果先前受这些监视器保护的任何对象处于不一致状态,则其他线程现在可以以不一致的状态查看这些对象.据说这些物体已被损坏.当线程对受损对象进行操作时,可能会导致任意行为.这种行为可能很微妙并且难以检测,或者可能是明显的.与其他未经检查的异常不同,它会ThreadDeath默默地杀死线程; 因此,用户没有警告他的程序可能被破坏.腐败可以在实际损害发生后的任何时间显现,甚至在未来几小时或几天.
我不明白"监视器"是什么意思.无论如何,我的问题是如果Thread.stop()不应该调用那么Java线程应该如何停止?
c++ ×7
c ×2
oop ×2
abstraction ×1
bit-shift ×1
escaping ×1
friend ×1
java ×1
node.js ×1
nonblocking ×1
operators ×1
set ×1
unique-ptr ×1
unit-testing ×1
vector ×1