c++ bool类型的函数问题

返回bool类型的函数感觉没什么用啊,完全可以用返回“0”和“1”的整型函数来代替?仅仅是为了直观一些表示该函数是用来判断对错的函数吗?还是有其他的考虑?
如果说的更大一点,true和false不就是非零数和0吗?不能都用数字代替吗?

c++

5个回答

作为老农,我个人还是比较习惯C中0为false,非0为true(把int当bool)的惯例的。
然而,C中还有另一个惯例,函数返回0表示成功,返回非0表示错误。这样一来,如果两种风格的函数放到一起,就不容易很快的判断出来了。如果是用int表示bool的函数能直接用bool来表示返回值,那么一眼就能分辨出来了。

另外,bool是个独一的类型,是会参与到函数重载解析中去的,这是将bool独立出来更有意义的原因。
https://msdn.microsoft.com/en-us/library/tf4dy80a.aspx

0 1当然可以用来表示bool类型的true和false,但是按照你说的这样float类型岂不是能把int型也代替了?问题不能这样考虑,每种类型都是有意义的,占的字节数也是不一样的。好比说脸盆可以用来洗脸,脚盆用来洗脚,但是你非要把两个合起来既洗脸又洗脚,肯定也没啥问题。

bool可以节省空间。在做算法题的时候,有时候,用bool就可以过了。但int就不一定。字长不一样

程序更加简洁易懂吧,一般在写代码的时候,C语言都会自己去typedef

当然可以用非零数和0去代替啦,true和false一般用起来我觉得逻辑比较好,代码容易理解

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
关于指针BOOL的问题。

使用如下方法创建一个线程 ``` thread GetInf_Result(Translate_Thread, Inf_Send_true); GetInf_Result.detach(); ``` 其中Translate_Thread是线程函数,Inf_Send_true定义: ``` struct Thread_Run_Translate { BOOL *IF; }; Thread_Run_Translate *Inf_Send_true = new Thread_Run_Translate; Inf_Send_true = &IF_Class; ``` IF_Class定义在类中为BOOL类型 在Translate_Thread中判断值,如下: ``` void Translate_Thread(Thread_Run_Translate *Inf) { if(Inf->IF == NULL) //*** } ``` 此时判断有误 求解决办法

求助,c语言定义函数问题,为什么会报错?

``` #include <stdio.h> #include <stdlib.h> #include <stdbool.h> #define MaxSize 10 typedef struct { int* data; int length; }SqList; void IintList(SqList* L); bool ListInsert(SqList* L, int i, int e); int main() { SqList L; InitList(&L); ListInsert(&L, 1, 10); return 0; } void IintList(SqList* L) { L->length = 0; } bool ListInsert(SqList* L, int i, int e) { if (i<1 || i>L->length + 1) return false; if (L->length >= MaxSize) return false; for (int j = L->length; j >= i; j--) L->data[j] = L->data[j - 1]; L->data[i - 1] = e; L->length++; return true; } ``` ![图片说明](https://img-ask.csdn.net/upload/202004/24/1587713382_756573.png)

谁能帮我解答一下这个C语言变量类型冲突问题?

先上代码 ``` #include <stdio.h> #include <ctype.h> #include <stdbool.h> double _COUNT_LETTERS_AND_WOEDS(void); int main(void) { printf("%5f \n",_COUNT_LETTERS_AND_WORDS()); return 0; } double _COUNT_LETTERS_AND_WORDS(void) { char ch; double words = 0; double letters = 0; bool inword = false; while((ch = getchar()) != EOF) { if((!isspace(ch) && !inword) && !ispunct(ch)) { words++; inword = true; } if((isspace(ch) && inword) && ispunct(ch)) inword = false; if(!isspace(ch) && !ispunct(ch)) letters++; } return letters/words; } ``` 这是一个计算字符与单词的程序 函数返回每个单词的平均字符数。 ![图片说明](https://img-ask.csdn.net/upload/201907/06/1562397918_371267.png) 我不太明白那个报错函数类型冲突是为什么?还有函数的隐式声明?

模板函数的一个问题,数据类型冲突如何解决

class affe{ public: std::string afe; int c; double d; template<class T> BOOL operator=(T &a) { if (a) { afe = a; return 0; } if (a == 0) { c = a; return 0; } fi(typeid(a) == typeid(double) { d = a; } return 0; } }; int _tmain(int argc,_TCHAR*argv[]) { affe cf; cf = "hello"; } 错误提示:无法从 const char[6] 转为int 无法从 const char[6] 转为double 本人小白, 我需要写个类 operator=函数 在里面有判定数据类型if (typeid(value) == typeid(double) ,如果是int赋值给Int 如果是 char*string*赋值给string 问题就在这里 即便 通过判定 肯定不是 string 进不了那个if里面 但是 会提示这无法从 const char[6] 转为int 各位大神 如何解决? 补充: 我这类里实际是有个union 如下 union Tdata//可容纳类型 { byte _tbyte;//1字节 WORD _tword;//2 DWORD _tdword;//4 char _tchar;//1 int _tint;//4 wchar_t _wchar;//4以下 double _tdouble;//8 std::string* _tstring;//4 CString* _tcstring;//4 }; 我是需要根据不同数据类型 给union赋值

c++,在类中使用函数指针时碰上错误:表达式必须具有 (pointer-to-) 函数类型

在Model类中定义了两个函数和一个函数指针,并在构造函数中将指针指向其中一个函数,如下: class Model { public: double (Model::*fun)(int i) const; public: double f1( int i ) const; double f2(int i) const; Model(bool condition) { if (condition ) fun = &Model::f1; else fun = &Model::f2; } }; 在另外一个类B中定义了一个Model常指针model,并指向了一个Model常实例m,至此都没有问题,但是在B中使用以下语句时即出现错误 (model->fun)( i ) 并提示:项不会计算为接受一个参数的函数 一楼有提及使用方式_( *(model->fun)( i ))_,我也试过,这个好像才是函数指针的标准用法,但也不行,还多了一个错误: 错误 2 error C2171: “*”:“double (__thiscall Model::* const )(int i) const”类型的操作数非法

qt-c++,为啥我的bool变量不能赋值,一直提示只读错误?

![成员变量](https://img-ask.csdn.net/upload/201910/03/1570080702_280011.png)![函数内部](https://img-ask.csdn.net/upload/201910/03/1570080715_936666.png) 我用信号和槽传递了一些变量,只是那些变量是const属性的,所以我的信号和槽也加了const属性,但是不知道为啥就是不能类里面的成员变量m_one,等不能接收bool属性的值,但是我自己在函数内部新建一个bool变量的值就不报错了。 ![因为这个函数里都是const属性,所以我要用信号传递,也要加const才不报错](https://img-ask.csdn.net/upload/201910/03/1570081796_892433.png) ![图片说明](https://img-ask.csdn.net/upload/201910/03/1570081867_831072.png) 如果不加const就会有这样的错误: ![图片说明](https://img-ask.csdn.net/upload/201910/03/1570084924_234320.png)

定义一个bool变量之后出现段错误

问题出外这一段,大概功能是输入一个“p 表达式”,计算表达式的值,当代码如第一张图时,一个输出都没有,直接段错误;当代码如第二张图时,输入p 1+1,能输出011+1,后面就没办法输出了。第三张是expr函数![图片](https://img-ask.csdn.net/upload/201509/22/1442914921_683652.png)![图片](https://img-ask.csdn.net/upload/201509/22/1442915190_53957.png)

在Golang中将一个函数类型转换为另一个函数

<div class="post-text" itemprop="text"> <p>I have the following code:</p> <pre><code>package vault type Client interface { GetHealth() error } func (c DefaultClient) GetHealth () error { resp := &amp;VaultHealthResponse{} err := c.get(resp, "/v1/sys/health") if err != nil { return err } return nil; } </code></pre> <p>Now, I want to use this function as part of this struct:</p> <pre><code>type DependencyHealthFunction func() error type Dependency struct { Name string `json:"name"` Required bool `json:"required"` Healthy bool `json:"healthy"` Error error `json:"error,omitempty"` HealthFunction DependencyHealthFunction } </code></pre> <p>Basically, set the value of HealthFunction to GetHealth. Now, when I do the following: </p> <pre><code>func (config *Config) GetDependencies() *health.Dependency { vaultDependency := health.Dependency{ Name: "Vault", Required: true, Healthy: true, HealthFunction: vault.Client.GetHealth, } temp1 := &amp;vaultDependency return temp1; } </code></pre> <p>This gives me an error and it says <code>cannot use vault.Client.GetHealth (type func(vault.Client) error) as type health.DependencyHealthFunction in field value</code>. How can I do this? </p> <p>Edit: How DependencyHealthFunction is used? </p> <p>As its part of Dependency struct, it's simply used as following: <code>d.HealthFunction()</code> where d is a variable of type <code>*Dependency</code>.</p> </div>

c++引用作为函数参数问题

#include<iostream> using namespace std; template <class T> void swap(T &a,T &b){ T temp; temp = a; a = b; b = temp; } int main(){ char s1[] = "Hello",s2[] = "hi"; swap(s1,s2);//为什么这样写不对 } ```

java 通过 jna 调用 c++ 函数时的参数映射问题

我在java中使用jna调用c++写的函数, c++里面定义了这个函数 BOOL Start(BYTE* &pBuf, int& nLen, FuncPtrLogCnvt CallBack); 作用是根据pBuf和nLen开辟一块内存,并填好了要处理的数据块 c++定义的回调函数typedef VOID (_stdcall *FuncPtrLogCnvt)(BYTE* &pBuf, int& nLen); 在java里面使用回调函数,参数类型要进行映射,如果我定义的回调函数是callback(byte[] pBuf, int nLen) 请问这样定义是否合理,能不能根据pBuf的字节数组取出要处理的数据块?

c++运算符重载为非成员函数问题

用vc6.0写复数类,使运算符重载为非成员函数,组建时出现fatal error C1001: INTERNAL COMPILER ERROR (compiler file 'msc1.cpp', line 1794) Please choose the Technical Support command on the Visual C++ Help menu, or open the Technical Support help file for more information 这要怎么解决,网上的各种办法都试过了还是不行,我还重载了输入>>和输出<<两个符号

error C2371: “f”: 重定义;不同的基类型 求助

``` #include<stdio.h> main() { int a,b,c,d; a=4;b=3; f(a,b,&c,&d); printf("%d\n",c+d); } void f(int x,int y, int *cp, int *dp) { *cp=x+y; *dp=x-y; return; } ``` 代码如上时,程序报错,“重定义。不同的基类型”,而如果将void函数与main函数交换位置(如下),则运行正常,请问这是为什么,“f”: 重定义;不同的基类型,这是什么意思?

既然Complex c=a+b不能实现,那要怎么进行两个对象的相加,只能用函数吗?还有为什么可以直接e=a,对象之间可以不用复制构造函数直接复制的吗?

![图片说明](https://img-ask.csdn.net/upload/202003/26/1585216030_672253.png) 只关注最后几行就好前面都是与问题无关的 ``` #include <iostream> using namespace std; /* run this program using the console pauser or add your own getch, system("pause") or input loop */ /*6. 更加完整建立一个复数类 Complex,要求 a. 含两个私有数据成员:real, imaginary: float b. 具有三种构造函数:a.不带参数构造: 0+0i b.以实部和虚部构造 c.拷贝构造函数 c.公有成员函数包括如下功能: 输出这个复数 与另一复数的加法函数,要求函数原型为 complex add(complex c); 判断与另一复数是否相等 要求函数原型为bool isEqual(complex c); 在main函数中,输入两个复数,判断两个复数是否相等(实部和虚部要分别相等),然后两者相加之和赋值给一个新的复数,并输出 思考:基于上面的Complex类,有如下main函数能否通过运行,有那些是错误的,为什么? int main() { Complex a,b; Complex c=a+b; Complex d=a; Complex e; e=a; return 0; }*/ class Complex{ public: void getRI(float R,float I); //设置复数的两个私有成员 void output(); //输出这个复数 void add(Complex c); //与另一复数的加法函数 原型为 add (Complex c); void isEqual(Complex c); //判断与另一复数是否相等 Complex(){ //不带参数的构造函数 real=0; imaginary=0; } Complex(float R,float I); //以实部和虚部构造 Complex(Complex &c); //复制构造函数 private: float real,imaginary; }; Complex::Complex(float R,float I) //带参数构造函数的实现 { real=R; imaginary=I; } Complex::Complex(Complex &c){ real=c.real; imaginary=c.imaginary; cout<<"calling the copy constructor"<<endl; } void Complex::getRI(float R,float I){ real=R; imaginary=I; } void Complex::output(){ cout<<real<<"+"<<imaginary<<"i"<<endl; } void Complex::add(Complex c){ cout<<"两复数相加为:"; cout<<real+c.real<<"+"<<imaginary+c.imaginary<<"i"<<endl; } void Complex::isEqual(Complex c){ if(real==c.real) { if(imaginary==c.imaginary) cout<<"They are equal."<<endl; } else cout<<"They are not equal."<<endl; } int main(int argc, char** argv) { Complex c1; Complex c2(1,2); //调用带参数的构造函数 Complex c3(3,4); //用对象c2初始化对象c3,复制构造函数被调用 float R1,I1,R2,I2; cin>>R1>>I1; cin>>R2>>I2; c2.getRI(R1,I1); c3.getRI(R2,I2); cout<<"复数c2为:"; c2.output(); cout<<"复数c3为:"; c3.output(); c2.add(c3); c2.isEqual(c3); /*函数调用的时候不用 也不可以包含两类型名, 应该写成myComplex.add(c); */ Complex a,b; Complex c=a+b; Complex d=a; Complex e; e=a; return 0; } ```

错误 27 error C2449: 在文件范围内找到“{”(是否缺少函数头?)

#include<stdio.h> #include<stdlib.h> #define STACK_INIT_SIZE 100 //存储空间初始分配量 #define STACKINCREAMENT 10 //存储空间分配增量 #define num 10 typedef int MazeType[num][num]; int curstep; //定前当前足迹 MazeType m = {0,0,0,0,0,0,0,0,0,0, 0,1,1,0,1,1,1,0,1,0, 0,1,1,0,1,1,1,0,1,0, 0,1,1,1,1,0,0,1,1,0, 0,1,0,0,0,1,1,1,1,0, 0,1,1,1,0,1,1,1,1,0, 0,1,0,1,1,1,0,1,1,0, 0,1,0,0,0,1,0,0,1,0, 0,0,1,1,1,1,1,1,1,0, 0,0,0,0,0,0,0,0,0,0}; //定义了一个全局变量,10*10的迷宫 typedef struct{ int ord; //通道块在路径上的序号 PosType seat; //通道块在迷宫中的“坐标位置” int di; //从此通道块走向下一通道块的“方向”。1表示向右,2表示向上,3表示向左,4表示向下。 }SElemType; //栈的元素类型 typedef struct{ SElemType *base; //栈底指针,在栈构造之前和销毁之后为NULL SElemType *top; //栈顶指针 int stacksize; //当前已分配的存储空间,以元素为单位 }SqStack; int InitStack(SqStack *S){ (*S).base = (SElemType *) malloc (STACK_INIT_SIZE * (sizeof(SElemType))); if(!(*S).base) exit(0); (*S).top = (*S).base; (*S).stacksize = STACK_INIT_SIZE; return 1; } int Push(SqStack *S, SElemType e){ if((*S).top-(*S).base >= (*S).stacksize){ (*S).base = (SElemType *) realloc ((*S).base, ((*S).stacksize + STACKINCREAMENT) * sizeof(SElemType)); if(!(*S).base) exit(0); (*S).top = (*S).base + (*S).stacksize; (*S).stacksize += STACKINCREAMENT; } *((*S).top) = e; (*S).top ++; return 1; } int Pop(SqStack *S, SElemType* e){ //删除S的栈顶元素并用e返回其值 if((*S).top == (*S).base) exit(0); (*S).top --; *e = *(*S).top; return 1; } bool StackEmpty(SqStack S){ if(S.top == S.base) return true; return false; } typedef struct{ //通道块在迷宫中的位置,横纵坐标 int x; int y; }PosType; int Pass(PosType curpos){ //判断该位置是否可通过.若为1则可通过,若为0则此通道块为墙,若为-1则此通道块曾被纳入过路径但不通, if ( m[curpos.x][curpos.y] == 1 ) return 1; //若为其余整数说明此通道块已在当前路径上。 else return 0; } void FootPrint(PosType curpos){ //留下足迹 m[curpos.x][curpos.y] = curstep; } PosType NextPos(PosType curpos, int n){ //下一位置 switch(n) { case 0: //当前位置的右通路块 curpos.x += 0; curpos.y += 1; case 1: //当前位置的上通路块 curpos.x -= 1; curpos.y += 0; case 2: //当前位置的左通路块 curpos.x += 0; curpos.y -= 1; case 3: //当前位置的下通路块 curpos.x += 1; curpos.y += 0; } return curpos; } void MarkPrint(PosType curpos){ //留下不能通过的标记 m[curpos.x][curpos.y] = -1; } void PrintMaze(MazeType maze){ //打印迷宫 for(int i = 0; i < num; i++){ for(int j = 0; j < num; j++){ printf("%d",maze[i][j]); } printf("\n"); } } bool MazePath(MazeType maze, PosType start, PosType end){ //求迷宫中是否有从start到end的路径 PosType curpos; SqStack S; SElemType e; InitStack(&S); curpos = start; //起点为当前位置 curstep = 1; //路径中的第一步 do{ if( Pass(curpos) ){ //当前位置可通过 maze[curpos.x][curpos.y] = curstep; //在迷宫中标记出足迹 e.ord = curstep; e.seat.x = curpos.x; e.seat.y = curpos.y; e.di = 0; Push(&S, e); //加入路径中 if(curpos.x == end.x && curpos.y == end.y ) return true; //到达终点 curstep ++; //探索下一步 curpos = NextPos(curpos, 0); //下一位置在当前位置的右侧 } else{ Pop(&S, &e); curstep--; //路径上减少一个点 while(e.di == 3 && !StackEmpty(S)){ //该位置不通,留下不能通过的标记,并退回一步 MarkPrint(e.seat); Pop(&S, &e); curstep--; } if(e.di < 3){ //换下一个方向探索 e.di ++; Push(&S,e); curpos = NextPos(e.seat,e.di); //设定当前位置是该新方向上的相邻块 curstep ++; } } }while(!StackEmpty(S)); return false; } void main(){ void PrintMaze(MazeType maze); bool MazePath(MazeType maze, PosType start, PosType end); PosType start = {1,1}; PosType end = {num-1,num-1}; printf("迷宫的结构如下:"); PrintMaze(m); if( MazePath(m,start,end) ){ printf("\n从迷宫的入口到出口的路径如下:"); PrintMaze(m); } else printf("此迷宫没有从入口到出口的路径。"); } 错误提示有60多个... 不知道错在哪.. 求助!! 粘几个错误如下: 错误 33 error C2449: 在文件范围内找到“{”(是否缺少函数头?) e:\文件文件\数据结构程序\迷宫问题2\迷宫问题2\maze.c 70 1 迷宫问题2 错误 45 error C2449: 在文件范围内找到“{”(是否缺少函数头?) e:\文件文件\数据结构程序\迷宫问题2\迷宫问题2\maze.c 98 1 迷宫问题2 错误 55 error C2146: 语法错误: 缺少“;”(在标识符“start”的前面) e:\文件文件\数据结构程序\迷宫问题2\迷宫问题2\maze.c 153 1 迷宫问题2 错误 51 error C2146: 语法错误: 缺少“;”(在标识符“MazePath”的前面) e:\文件文件\数据结构程序\迷宫问题2\迷宫问题2\maze.c 151 1 迷宫问题2 错误 58 error C2146: 语法错误: 缺少“;”(在标识符“end”的前面) e:\文件文件\数据结构程序\迷宫问题2\迷宫问题2\maze.c 154 1 迷宫问题2

c++不允许使用抽象类类型对象,我明明每个函数都实现了的

![图片说明](https://img-ask.csdn.net/upload/201510/03/1443871663_740694.png) 上代码: ``` Stack.h: ``` #pragma once //栈定义 template <class T> class Stack { public: const int maxSize = 50; Stack(); virtual void Push(const T& x) = 0; virtual bool Pop(T& x) = 0; virtual bool getTop(T& x)const = 0; virtual bool IsEmpty()const = 0; virtual bool IsFull()const = 0; virtual int getSize()const = 0; }; ``` LinkedStack.h: ``` #pragma once #include "Stack.h" #include "Nodes.h" #include <iostream> using namespace std; template <class T> class LinkedStack:public Stack<T> //链式栈 { public: LinkedStack() :top(NULL){} ~LinkedStack(){ MakeEmpty(); } void Push(const T& x); bool Pop(T& x); bool GetTop(T& x)const; bool IsEmpty()const{ return (top == NULL) ? true : false; } int GetSize()const; void MakeEmpty(); friend ostream& operator<<(ostream& os, LinkedStack<T>& s); private: LinkNode<T> *top; }; template <class T> void LinkedStack<T>::MakeEmpty() { LinkNode<T> *p; while (top) { p = top; top = top->link; delete p; } } template <class T> void LinkedStack<T>::Push(const T& x) { top = new LinkNode<T>(x, top); assert(top); } template <class T> bool LinkedStack<T>::Pop(T& x) { if (IsEmpty()) return false; LinkNode<T> *p = top; x = p->data; top = top->link; delete p; } template <class T> bool LinkedStack<T>::GetTop(T& x)const { if (IsEmpty()) return false; x = top->data; return true; } template <class T> int LinkedStack<T>::GetSize()const { int count = 0; LinkNode<T> *p = top; while (p) { p = p->link; count++; } return count; } template <class T> ostream& operator<<(ostream& os, LinkedStack<T>& s) { os << "栈中元素个数:" << s.GetSize() << endl; int i = 1; LinkNode<T> *p = s.top; while (p) { os << i++ << ":" << p->data << endl; p = p->link; } return os; } template <class T> bool LinkedStack<T>::IsFull()const { return false; //链表栈空间无限制,不会满 } ``` BinaryTree.h: ``` #include <iostream> #include "LinkedStack.h" using namespace std; template <class T> struct BinTreeNode //二叉树节点类定义 { T data; BinaryTreeNode<T> *leftChild,*rightChild; BinaryTreeNode() :leftChild(NULL), rightChild(NULL){} BinaryTreeNode(T x, BinaryTreeNode *l = NULL, BinaryTreeNode *r = NULL) :data(x), leftChild(l), rightChild(r){} }; template <class T> class BinaryTree //二叉树类定义 { public: BinaryTree() :root(NULL){} BinaryTree(T value) : refValue(value), root(NULL){} BinaryTree(BinaryTree<T>& s); ~BinaryTree(){ destroy(root); } bool IsEmpty(){ return (root == NULL) ? true : false; } BinTreeNode<T> *GetParent(BinTreeNode<T> *current) { return (root == NULL || root == current) ? NULL : GetParent(root, current); } BinTreeNode<T> *GetLeftChild(BinTreeNode<T> *current) { return (current == NULL) ? NULL : current->leftChild; } BinTreeNode<T> *GetRightChild(BinTreeNode<T> *current) { return (current == NULL) ? NULL : current->rightChild; } int GetHeight(){ return Height(root); } //返回树高度 int GetSize(){ return Size(root); } //返回节点数 BinTreeNode<T> *GetRoot()const{ return root; } void PreOrder(void(*visit)(BinTreeNode<T> *p)) //前序遍历 { PreOrder(root, visit); } void InOrder(void(*visit)(BinTreeNode<T> *p)) //中序遍历 { InOrder(root, visit); } void PostOrder(void(*visit)(BinTreeNode<T> *p)) //后序遍历 { PostOrder(root, visit); } void LevelOrder(void(*visit)(BinTreeNode<T> *p)); //层次序遍历 int Insert(const T& item); BinTreeNode<T> *Find(T& item)const; protected: BinTreeNode<T> *root; //根指针 T refValue; //数据输入停止标识 void CreateBinTree(istream& in, BinTreeNode<T> *& subTree); bool Insert(BinTreeNode<T> * & subTree, const T& x); void Destroy(BinTreeNode<T> * & subTree); bool Find(BinTreeNode<T> * subTree, const T& x)const; BinTreeNode<T> * Copy(BinTreeNode<T> * orignode); int GetHeight(BinTreeNode<T> * subTree); int GetSize(BinTreeNode<T> * subTree); BinTreeNode<T> * GetParent(BinTreeNode<T> * subTree, BinTreeNode<T> * current); BinTreeNode<T> * Find(BinTreeNode<T> * subTree, const T& x)const; void Traverse(BinTreeNode<T> * subTree, ostream& out); //前序遍历输出 void PreOrder(BinTreeNode<T>& subTree, void(*visit)(BinTreeNode<T> * p)); //前序遍历 void InOrder(BinTreeNode<T>& subTree, void(*visit)(BinTreeNode<T> * p)); //中序遍历 void PostOrder(BinTreeNode<T>& subTree, void(*visit)(BinTreeNode<T> * p)); //后序遍历 friend istream& operator >> (istream& in, BinaryTree<T>& Tree); //重载操作:输入 friend ostream& operator << (ostream& out, BinaryTree<T>& Tree); //重载操作:输出 }; template <class T> void BinaryTree<T>::Destroy(BinaryTree<T> * subTree) { if (subTree != NULL) //递归终止条件 { Destroy(subTree->leftChild); Destroy(subTree->rightChild); delete subTree; //必须先删除左右子女树再删除自己,若先删除自己,则leftChlid,rightChild不存在,无法访问子女树 } } template <class T> BinTreeNode<T> * BinaryTree<T>::GetParent(BinTreeNode<T> * subTree, BinTreeNode<T> * current) { //私有函数,从subTree节点开始,搜索节点current的父节点 if (subTree == NULL) return NULL; if (subTree->leftChild == current || subTree->rightChild == current) { return subTree; } BinTreeNode<T> * p; if (p = GetParent(subTree->leftChild, current) != NULL) //递归在左子树中搜索 return p; else return GetParent(subTree->rightChild, current); //递归在右子树中搜索 } template <class T> void BinaryTree<T>::Traverse(BinTreeNode<T> * subTree, ostream& out) { //私有函数,前序输出subTree二叉树的所有数据 if (subTree != NULL) { out << subTree->data << ''; Traverse(subTree->leftChild,out); Traverse(subTree->rightChild,out); } } template <class T> ostream& operator << (ostream& out, BinaryTree<T>& Tree) { //重载操作,输出一颗二叉树Tree out << "二叉树的前序遍历\n"; Tree.Traverse(Tree.root, out); out << endl; return out; } template <class T> istream& operator >> (istream& in, BinaryTree<T>& Tree) { //重载操作,输入并建立一颗二叉树Tree CreateBinTree(in, Tree.root); return in; } void CreateBinTree(istream& in, BinTreeNode<char> * &BT) { //从输入流in输入二叉树的广义表表示建立对应点的二叉链表 LinkedStack<BinTreeNode<char> *> s; BT = NULL; BinTreeNode<char> *p, *t; int k; //用k作为处理左右子树的标记 char ch; in >> ch; while (ch != '#') //书上是 ch!=RefValue { switch (ch) { case '(': s.Push(p); k = 1; break; case ')': s.Pop(t); break; case ',': k = 2; break; default: p = new BinTreeNode<char>(ch); if (BT == NULL) BT = p; else if (k==1) { s.GetTop(t); t->leftChild = p; } else { s.GetTop(t); t->rightChild = p; } } in >> ch; } } ``` Main.cpp: ``` #include <iostream> using namespace std; #include "BinaryTree.h" void main() { BinTreeNode<char> * node=NULL; //BinaryTree<char> * p = new BinaryTree<char>('#'); CreateBinTree(cin, node); system("pause"); } 这代码怎么格式不对啊…… 需要的话我可以发源码

VC++、DLL、虚函数、调用约定

关于“VC++、DLL、虚函数、调用约定”的一个问题折腾我很久了,希望CSDN的朋友可以助我解决问题。 DLL里,接口类的虚函数(非纯虚函数),应该怎样调用约定? --------------------------------------------------- 背景描述: 一个DLL工程A(接口),有个接口类AI,里面全是纯虚函数。 一个EXE工程B(平台),有个成员变量mc类型是类AI。 一个DLL工程C(游戏),有个类是类AI的子类,即实现类,对类AI的所有接口(纯虚函数)进行了实现。 原理是: 平台只有一个在跑,而游戏是N个,工程B(平台)的mc被赋值成工程C(游戏)的对象,通过工程A的接口,mc可以调用工程C(游戏)里的函数(接口的实现)。 问题: 我在开发一个新游戏时,发现工程A(接口)类AI的接口不够用,想新增一个接口,于是加入了一个”虚函数“,注意不是“纯虚函数”,为的是不影响之前所有已有的游戏(不然之前的游戏不作任何改动而编译 会报error C2259: 不能实例化抽象类),即之前的游戏不用实现这个接口,修改工程B(平台)调用这个函数时是工程A(接口)新增的接口,若游戏实现这个接口,就调用游戏里的实现函数;若游戏没有定义这个接口(之前的游戏),则调用工程A(接口)类AI里的虚函数(里面只有一句调试打印)。 但发现,有的游戏是正常的,有的游戏不正常。不正常的游戏,调试工程B(平台)在调用新接口时提示: Run-Time Check Failure #0 - The value of ESP was not properly saved across a function call. This is usually a result of calling a function declared with one calling convention with a function pointer declared with a different calling convention. 百度了一下,很多人说是调名约定的问题。 工程A、工程B、所有的游戏工程C,工程选项里都是 __cdecl (/Gd)。 于是我在工程A、工程C里下面几种尝试: virtual void OnEventABC(int a, bool b); //没写调用约定,有的游戏正常,有的游戏出错 virtual void __stdcall OnEventABC(int a, bool b); //所有的游戏都出错 virtual void __cdecl OnEventABC(int a, bool b); //所有的游戏都出错 virtual void WINAPI OnEventABC(int a, bool b); //所有的游戏都出错 --------------------------------------------------- 请问大家,怎么解决这个问题,是调名约定的问题,还是其它什么问题?

正确的Go类型传递给C函数?

<div class="post-text" itemprop="text"> <p>I'm porting some server code I wrote in C over to Go and it uses an encryption library I <em>really</em> don't want to rewrite. Instead I'm trying to use Cgo to write a wrapper so that the rest of my code can call it more easily. Here's part of the header for the lib:</p> <pre><code>// encryption/encryption.h #define CRYPT_BBCFG 1 typedef struct { // ...bunch of fields... uint32_t bb_posn; } CRYPT_SETUP; int CRYPT_CreateKeys(CRYPT_SETUP* cs, void* key, unsigned char type); </code></pre> <p>And here's the proof-of-concept snippet I'm trying to get to work:</p> <pre><code>package goserv //#include "encryption/encryption.h" import "C" func main() { cdata := new(C.struct_CRYPT_SETUP) key := make([]byte, 48) C.CRYPT_CreateKeys(cdata, &amp;key, C.CRYPT_BLUEBURST) } </code></pre> <p>I defined a test function (<code>int test() { return 1; }</code>) in the header and have no problem calling that from my code (via <code>C.test()</code>) nor referencing any of the #defined'd constants (<code>C.CRYPT_BBCFG</code>) but get the following error when I attempt to run <em>go install goserv</em>:</p> <pre><code>Undefined symbols for architecture x86_64: "_CRYPT_CreateKeys", referenced from: __cgo_e89359206bf1_Cfunc_CRYPT_CreateKeys in goserv.cgo2.o (maybe you meant: __cgo_e89359206bf1_Cfunc_CRYPT_CreateKeys) ld: symbol(s) not found for architecture x86_64 </code></pre> <p>At this point I'm assuming I'm just not calling the function with the correct arguments. I was under the impression that cdata is of type <code>*C.struct_CRYPT_SETUP</code>, key should be <code>*byte</code> (though it doesn't work without the &amp; either) and C.CRYPT_BLUEBURST of type...something. Trying <code>C.uchar(CRYPT_BLURBURST)</code> also doesn't change anything.</p> <p>Any suggestions on getting this code to compile?</p> <p>Edit: Forgot my platform, I'm running Mac OS X 10.10</p> <p>Edit2 (SOLVED): Jsor's point about using unsafe.Pointer with the address of the first element of key helped but I also had to move my C source files into the same directory as my Go file. There was another type error resulting from using C.struct_CRYPT_DATA instead of C.CRYPT_DATA, so if anyone else runs into errors like this:</p> <pre><code>./goserv.go:18: cannot use cdata (type *C.struct_CRYPT_SETUP) as type *C.struct___0 in argument to _Cfunc_CRYPT_CreateKeys </code></pre> <p>Then remove the struct_ prefix (though the cgo docs say that's how to directly reference C struct types)</p> </div>

C#调用c++的dll执行带字符串参数的函数时遇到的问题

我在c++项目中实现函数: extern "C" __declspec(dllexport) int FUNC1(const char* xmlSta, char* fileOut) { return 0; } 然后编译成动态库a.dll,并在C#项目中引用, 用静态加载的方式,是可以运行的,代码如下(只写调用的部分): [DllImport("a.dll", EntryPoint = "FUNC1", ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)] public static extern int FUNC1(string xmlSta, StringBuilder fileOut); StringBuilder sbr = new StringBuilder(10); int r1 = FUNC1("abc ", sbr); //可以运行! 但是用动态加载的方式,却报错,代码如下: public static class NativeMethod { [DllImport("kernel32.dll", EntryPoint = "LoadLibrary")] public static extern int LoadLibrary( [MarshalAs(UnmanagedType.LPStr)] string lpLibFileName); [DllImport("kernel32.dll", EntryPoint = "GetProcAddress")] public static extern IntPtr GetProcAddress(int hModule, [MarshalAs(UnmanagedType.LPStr)] string lpProcName); [DllImport("kernel32.dll", EntryPoint = "FreeLibrary")] public static extern bool FreeLibrary(int hModule); } /// <summary> /// 函数指针 /// </summary> /// <param name="a"></param> /// <param name="b"></param> /// <returns></returns> delegate int FUNC1(string xmlSta, StringBuilder fileOut); class Program { static void Main(string[] args) { StringBuilder sbr = new StringBuilder(10); //1. 动态加载C++ Dll int hModule = NativeMethod.LoadLibrary(@"a.dll"); if (hModule == 0) return; //2. 读取函数指针 IntPtr intPtr = NativeMethod.GetProcAddress(hModule, "FUNC1"); //3. 将函数指针封装成委托 FUNC1 cFUNC1 = (FUNC1)Marshal.GetDelegateForFunctionPointer(intPtr, typeof(FUNC1)); //4. 测试 Console.WriteLine(cFUNC1("abc ", sbr)); Console.Read(); } } 报错信息是:托管调试助手“PInvokeStackImbalance”在“E:\WCF\CPP\bin\test.vshost.exe”中检测到问题。 其他信息: 对 PInvoke 函数“test!test.FUNC1::Invoke”的调用导致堆栈不对称。原因可能是托管的 PInvoke 签名与非托管的目标签名不匹配。请检查 PInvoke 签名的调用约定和参数与非托管的目标签名是否匹配。 两种方式不都一样吗?为什么第二种方式会报错?因为第一种方式有时运行很慢,要等很久,所以我想用第二种方式在程序启动时先LoadLibrary,之后就不会出现很慢的情况,但是第二种方式总是出错,只有在参数没有字符串类型的情况下才能运行,但是确实需要传字符串参数,哪位高手能够给个指点,代码该如何修改呢?

函数声明语法: 函数名前的括号内的内容

<div class="post-text" itemprop="text"> <p>I'm sorry I couldn't be more specific in the question title, but I was reading some <a href="https://golang.org/" rel="noreferrer">Go</a> code and I encountered function declarations of this form:</p> <pre><code>func (h handler) ServeHTTP(w http.ResponseWriter, r *http.Request) { ... } </code></pre> <p>from <a href="https://github.com/mattermost/platform/blob/master/api/context.go" rel="noreferrer">https://github.com/mattermost/platform/blob/master/api/context.go</a></p> <pre><code>func (s *GracefulServer) BlockingClose() bool { ... } </code></pre> <p>from <a href="https://github.com/braintree/manners/blob/master/server.go" rel="noreferrer">https://github.com/braintree/manners/blob/master/server.go</a></p> <p>What does the <code>(h handler)</code> and the <code>(s *GracefulServer)</code> between parenthesis mean? What does the entire function declaration mean, taking into account the meaning of the things between parenthesis?</p> <h3>Edit</h3> <p>This is not a duplicate of <a href="https://stackoverflow.com/questions/8263546/whats-the-difference-of-functions-and-methods-in-google-go">Whats the difference of functions and methods in Go?</a> : this question came to me because I didn't know what the things in parenthesis before the function name were, not because I wondered what was the difference between functions and methods... if I knew that this declaration was a method I wouldn't have had this question in the first place. If someone has the same doubt as me one day, I don't believe she will go searching for "golang methods" because she doesn't know that this is the case. It would be like wondering what the letter "sigma" means before a mathematical expression (not knowing it means summation) and someone says it's a duplicate of what's the difference between summation and some other thing.</p> <p>Also, the short answer to this question ("it's a receiver") is no answer to "what's the difference between functions and methods".</p> </div> <p>转载于:https://stackoverflow.com/questions/34031801/function-declaration-syntax-things-in-parenthesis-before-function-name</p>

C语言有关strstr()的问题

代码如下,在VC++6.0中编译连接都没问题,就是在遍历txt文件用strstr函数时会出现问题,直接停止运行,求大神指点!!!万分感谢!!!! ``` //#include <windows.h> #include <winsock2.h> #include <stdio.h> #include <string.h> #define SERVER_PORT 5432 #define MAX_PENDING 5 #define MAX_LINE 256 #define true 1 #define false 0 #pragma comment(lib,"ws2_32.lib") int main() { WSADATA WSAData; int WSAreturn; /* server address */ struct sockaddr_in sin; struct sockaddr_in remote; char buf[MAX_LINE]; int len; int s, new_s; char line[MAX_LINE]; //读取到的每一行 FILE *fp; /*文件指针*/ //char ans[MAX_LINE]; //bool flag; char * b; //int l; WSAreturn = WSAStartup(0x101,&WSAData); if(WSAreturn) { fprintf(stderr, "simplex-talk: WSA error.\n"); //格式化输出至出错文件stderr exit(1); } /* build address data structure */ memset((char *)&sin, 0, sizeof(sin)); sin.sin_family = AF_INET; sin.sin_addr.s_addr = INADDR_ANY; sin.sin_port = htons(SERVER_PORT); //服务器端在listen之前会调用bind(),而客户端就不用调用,在connect()时由系统随机生成一个。 /* setup passive open */ if ((s = socket(PF_INET, SOCK_STREAM, 0)) < 0) {//socket函数创建一个socket描述符(socket descriptor),它唯一标识一个socket。 perror("simplex-talk: socket failed."); // s 为socket描述字 exit(1); } if ((bind(s, (struct sockaddr *)&sin, sizeof(sin))) < 0) {//bind函数把一个地址族中的特定地址赋给socket perror("simplex-talk: bind failed."); //sin 一个const struct sockaddr *指针,指向要绑定给s的协议地址 exit(1); //sizeof(sin) 地址长度 } printf("server is ready in listening ...\n"); //服务器监听socket,客户端这时调用connect()发出连接请求,服务器端就会接收到这个请求。 listen(s, MAX_PENDING); /* wait for connection, then receive and print text */ while(1) { len = sizeof(struct sockaddr_in); if ((new_s = accept(s, (struct sockaddr *)&remote, &len)) < 0){ //服务器用accept接收客户端的连接请求 perror("simplex-talk: accept failed."); //服务器与客户已经建立连接, //可以调用网络I/O进行读写操作了,即实现了网咯中不同进程之间的通信. exit(1); } //printf("received a connection from %s : \n", inet_ntoa(remote.sin_addr)); while (len = recv(new_s, buf, sizeof(buf), 0)) { //int recv( SOCKET s, char FAR *buf, int len, int flags); //printf("received %2d chars:", len); //第一个参数指定 接收端套接字描述符 即s; printf("客户端: "); fputs(buf, stdout); //第二个参数指明一个缓冲区用来存放recv函数接收到的数据; //fputs将该字符串写入文件stdout,但并不写入结尾的'\0'。 //第三个参数指明buf的参数 第四个参数一般置0。 //在datafile中遍历得出答案,并放入缓冲区。 //strcpy(buf,reply(buf)); fp = fopen("C:\\Users\\user\\Desktop\\chatfile.txt","r") if(fp == NULL) { perror("打开失败!"); exit(1); } int l=strlen(buf); // bool flag; //char * b; while(fgets(line,sizeof(line),fp)) { if(!strstr(line,buf)){ //flag = false; //printf("测试"); } else{ // flag = true; if(line[l]==' '||line[l]==' '){ b=strstr(line," "); break; } else{ //flag = false; } } }//while fclose(fp); /*if(flag==false){ char reply[]={"服务器:我听不懂您的意思。"}; puts(reply); int lens; lens = strlen(reply); send(new_s,reply,lens,0); } else{*/ printf("服务器:"); puts(b); printf("\n"); char * ans=b; int lens; lens = strlen(ans); send(new_s,ans,lens,0); } } closesocket(new_s); //关闭连接 //} WSACleanup(); return 0; } ```

在中国程序员是青春饭吗?

今年,我也32了 ,为了不给大家误导,咨询了猎头、圈内好友,以及年过35岁的几位老程序员……舍了老脸去揭人家伤疤……希望能给大家以帮助,记得帮我点赞哦。 目录: 你以为的人生 一次又一次的伤害 猎头界的真相 如何应对互联网行业的「中年危机」 一、你以为的人生 刚入行时,拿着傲人的工资,想着好好干,以为我们的人生是这样的: 等真到了那一天,你会发现,你的人生很可能是这样的: ...

程序员请照顾好自己,周末病魔差点一套带走我。

程序员在一个周末的时间,得了重病,差点当场去世,还好及时挽救回来了。

Java基础知识面试题(2020最新版)

文章目录Java概述何为编程什么是Javajdk1.5之后的三大版本JVM、JRE和JDK的关系什么是跨平台性?原理是什么Java语言有哪些特点什么是字节码?采用字节码的最大好处是什么什么是Java程序的主类?应用程序和小程序的主类有何不同?Java应用程序与小程序之间有那些差别?Java和C++的区别Oracle JDK 和 OpenJDK 的对比基础语法数据类型Java有哪些数据类型switc...

技术大佬:我去,你写的 switch 语句也太老土了吧

昨天早上通过远程的方式 review 了两名新来同事的代码,大部分代码都写得很漂亮,严谨的同时注释也很到位,这令我非常满意。但当我看到他们当中有一个人写的 switch 语句时,还是忍不住破口大骂:“我擦,小王,你丫写的 switch 语句也太老土了吧!” 来看看小王写的代码吧,看完不要骂我装逼啊。 private static String createPlayer(PlayerTypes p...

和黑客斗争的 6 天!

互联网公司工作,很难避免不和黑客们打交道,我呆过的两家互联网公司,几乎每月每天每分钟都有黑客在公司网站上扫描。有的是寻找 Sql 注入的缺口,有的是寻找线上服务器可能存在的漏洞,大部分都...

Intellij IDEA 实用插件安利

1. 前言从2020 年 JVM 生态报告解读 可以看出Intellij IDEA 目前已经稳坐 Java IDE 头把交椅。而且统计得出付费用户已经超过了八成(国外统计)。IDEA 的...

女程序员,为什么比男程序员少???

昨天看到一档综艺节目,讨论了两个话题:(1)中国学生的数学成绩,平均下来看,会比国外好?为什么?(2)男生的数学成绩,平均下来看,会比女生好?为什么?同时,我又联想到了一个技术圈经常讨...

总结了 150 余个神奇网站,你不来瞅瞅吗?

原博客再更新,可能就没了,之后将持续更新本篇博客。

副业收入是我做程序媛的3倍,工作外的B面人生是怎样的?

提到“程序员”,多数人脑海里首先想到的大约是:为人木讷、薪水超高、工作枯燥…… 然而,当离开工作岗位,撕去层层标签,脱下“程序员”这身外套,有的人生动又有趣,马上展现出了完全不同的A/B面人生! 不论是简单的爱好,还是正经的副业,他们都干得同样出色。偶尔,还能和程序员的特质结合,产生奇妙的“化学反应”。 @Charlotte:平日素颜示人,周末美妆博主 大家都以为程序媛也个个不修边幅,但我们也许...

MySQL数据库面试题(2020最新版)

文章目录数据库基础知识为什么要使用数据库什么是SQL?什么是MySQL?数据库三大范式是什么mysql有关权限的表都有哪几个MySQL的binlog有有几种录入格式?分别有什么区别?数据类型mysql有哪些数据类型引擎MySQL存储引擎MyISAM与InnoDB区别MyISAM索引与InnoDB索引的区别?InnoDB引擎的4大特性存储引擎选择索引什么是索引?索引有哪些优缺点?索引使用场景(重点)...

如果你是老板,你会不会踢了这样的员工?

有个好朋友ZS,是技术总监,昨天问我:“有一个老下属,跟了我很多年,做事勤勤恳恳,主动性也很好。但随着公司的发展,他的进步速度,跟不上团队的步伐了,有点...

我入职阿里后,才知道原来简历这么写

私下里,有不少读者问我:“二哥,如何才能写出一份专业的技术简历呢?我总感觉自己写的简历太烂了,所以投了无数份,都石沉大海了。”说实话,我自己好多年没有写过简历了,但我认识的一个同行,他在阿里,给我说了一些他当年写简历的方法论,我感觉太牛逼了,实在是忍不住,就分享了出来,希望能够帮助到你。 01、简历的本质 作为简历的撰写者,你必须要搞清楚一点,简历的本质是什么,它就是为了来销售你的价值主张的。往深...

魂迁光刻,梦绕芯片,中芯国际终获ASML大型光刻机

据羊城晚报报道,近日中芯国际从荷兰进口的一台大型光刻机,顺利通过深圳出口加工区场站两道闸口进入厂区,中芯国际发表公告称该光刻机并非此前盛传的EUV光刻机,主要用于企业复工复产后的生产线扩容。 我们知道EUV主要用于7nm及以下制程的芯片制造,光刻机作为集成电路制造中最关键的设备,对芯片制作工艺有着决定性的影响,被誉为“超精密制造技术皇冠上的明珠”,根据之前中芯国际的公报,目...

优雅的替换if-else语句

场景 日常开发,if-else语句写的不少吧??当逻辑分支非常多的时候,if-else套了一层又一层,虽然业务功能倒是实现了,但是看起来是真的很不优雅,尤其是对于我这种有强迫症的程序"猿",看到这么多if-else,脑袋瓜子就嗡嗡的,总想着解锁新姿势:干掉过多的if-else!!!本文将介绍三板斧手段: 优先判断条件,条件不满足的,逻辑及时中断返回; 采用策略模式+工厂模式; 结合注解,锦...

离职半年了,老东家又发 offer,回不回?

有小伙伴问松哥这个问题,他在上海某公司,在离职了几个月后,前公司的领导联系到他,希望他能够返聘回去,他很纠结要不要回去? 俗话说好马不吃回头草,但是这个小伙伴既然感到纠结了,我觉得至少说明了两个问题:1.曾经的公司还不错;2.现在的日子也不是很如意。否则应该就不会纠结了。 老实说,松哥之前也有过类似的经历,今天就来和小伙伴们聊聊回头草到底吃不吃。 首先一个基本观点,就是离职了也没必要和老东家弄的苦...

2020阿里全球数学大赛:3万名高手、4道题、2天2夜未交卷

阿里巴巴全球数学竞赛( Alibaba Global Mathematics Competition)由马云发起,由中国科学技术协会、阿里巴巴基金会、阿里巴巴达摩院共同举办。大赛不设报名门槛,全世界爱好数学的人都可参与,不论是否出身数学专业、是否投身数学研究。 2020年阿里巴巴达摩院邀请北京大学、剑桥大学、浙江大学等高校的顶尖数学教师组建了出题组。中科院院士、美国艺术与科学院院士、北京国际数学...

为什么你不想学习?只想玩?人是如何一步一步废掉的

不知道是不是只有我这样子,还是你们也有过类似的经历。 上学的时候总有很多光辉历史,学年名列前茅,或者单科目大佬,但是虽然慢慢地长大了,你开始懈怠了,开始废掉了。。。 什么?你说不知道具体的情况是怎么样的? 我来告诉你: 你常常潜意识里或者心理觉得,自己真正的生活或者奋斗还没有开始。总是幻想着自己还拥有大把时间,还有无限的可能,自己还能逆风翻盘,只不是自己还没开始罢了,自己以后肯定会变得特别厉害...

男生更看重女生的身材脸蛋,还是思想?

往往,我们看不进去大段大段的逻辑。深刻的哲理,往往短而精悍,一阵见血。问:产品经理挺漂亮的,有点心动,但不知道合不合得来。男生更看重女生的身材脸蛋,还是...

为什么程序员做外包会被瞧不起?

二哥,有个事想询问下您的意见,您觉得应届生值得去外包吗?公司虽然挺大的,中xx,但待遇感觉挺低,马上要报到,挺纠结的。

当HR压你价,说你只值7K,你该怎么回答?

当HR压你价,说你只值7K时,你可以流畅地回答,记住,是流畅,不能犹豫。 礼貌地说:“7K是吗?了解了。嗯~其实我对贵司的面试官印象很好。只不过,现在我的手头上已经有一份11K的offer。来面试,主要也是自己对贵司挺有兴趣的,所以过来看看……”(未完) 这段话主要是陪HR互诈的同时,从公司兴趣,公司职员印象上,都给予对方正面的肯定,既能提升HR的好感度,又能让谈判气氛融洽,为后面的发挥留足空间。...

面试:第十六章:Java中级开发

HashMap底层实现原理,红黑树,B+树,B树的结构原理 Spring的AOP和IOC是什么?它们常见的使用场景有哪些?Spring事务,事务的属性,传播行为,数据库隔离级别 Spring和SpringMVC,MyBatis以及SpringBoot的注解分别有哪些?SpringMVC的工作原理,SpringBoot框架的优点,MyBatis框架的优点 SpringCould组件有哪些,他们...

面试阿里p7,被按在地上摩擦,鬼知道我经历了什么?

面试阿里p7被问到的问题(当时我只知道第一个):@Conditional是做什么的?@Conditional多个条件是什么逻辑关系?条件判断在什么时候执...

Python爬虫,高清美图我全都要(彼岸桌面壁纸)

爬取彼岸桌面网站较为简单,用到了requests、lxml、Beautiful Soup4

差点跪了...

最近微信又搞出了一个大利器,甚至都上了热搜,当然消息最敏捷的自媒体人,纷纷都开通了自己的视频号。01 视频号是什么呢?视频号是微信体系内的短视频,它不同...

面试了一个 31 岁程序员,让我有所触动,30岁以上的程序员该何去何从?

最近面试了一个31岁8年经验的程序猿,让我有点感慨,大龄程序猿该何去何从。

Vue回炉重造之router路由(更新中)

你好,我是Vam的金豆之路,可以叫我豆哥。2019年年度博客之星、技术领域博客专家。主要领域:前端开发。我的微信是 maomin9761,有什么疑问可以加我哦,自己创建了一个微信技术交流群,可以加我邀请你一起交流学习。最后自己也创建了一个微信公众号,里面的文章是我自己精挑细选的文章,主要介绍各种IT新技术。欢迎关注哦,微信搜索:臻美IT,等你来。 欢迎阅读本博文,本博文主要讲述【】,文字通...

大三实习生,字节跳动面经分享,已拿Offer

说实话,自己的算法,我一个不会,太难了吧

程序员垃圾简历长什么样?

已经连续五年参加大厂校招、社招的技术面试工作,简历看的不下于万份 这篇文章会用实例告诉你,什么是差的程序员简历! 疫情快要结束了,各个公司也都开始春招了,作为即将红遍大江南北的新晋UP主,那当然要为小伙伴们做点事(手动狗头)。 就在公众号里公开征简历,义务帮大家看,并一一点评。《启舰:春招在即,义务帮大家看看简历吧》 一石激起千层浪,三天收到两百多封简历。 花光了两个星期的所有空闲时...

Java岗开发3年,公司临时抽查算法,离职后这几题我记一辈子

前几天我们公司做了一件蠢事,非常非常愚蠢的事情。我原以为从学校出来之后,除了找工作有测试外,不会有任何与考试有关的事儿。 但是,天有不测风云,公司技术总监、人事总监两位大佬突然降临到我们事业线,叫上我老大,给我们组织了一场别开生面的“考试”。 那是一个风和日丽的下午,我翘着二郎腿,左手端着一杯卡布奇诺,右手抓着我的罗技鼠标,滚动着轮轴,穿梭在头条热点之间。 “淡黄的长裙~蓬松的头发...

大胆预测下未来5年的Web开发

在2019年的ReactiveConf 上,《Elm in Action》的作者Richard Feldman对未来5年Web开发的发展做了预测,很有意思,分享给大家。如果你有机会从头...

立即提问
相关内容推荐