同花顺2018秋招C++试题

真的很感谢牛客网,学到了很多,面试时也用到了,这是我做过的同花顺前端试题,分享给大家,说不定就用上了呢~~

一. 基础题


1. Cstatic函数有什么特点?在C++中如何实现类似效果(不用static)?

2. 在一个工程里面有一个头文件base.h,在aa.cppbb.cpp都包含了这个头文件:

(1) 如果在base.h定义了一个全局变量

int g_ntest;

能编译通过吗?为什么?

(2) 如果在base.h定义了一个静态变量

static int g_ntest;

能编译通过吗?为什么?

3. C++0x是什么,里面有哪些新特性

4. 请选出下列代码中你认为正确的选项(多选),如果有错误的,请写出错误的原因。

(A) char s[5] = [‘a’, ‘b’, ’c’, ‘d’,’e’]’;

(B) char s[5] = “abcde”;

(C) char s[5]; s = “abcde”;

Dchar* s; s = “abcde”;

5. public class

Test{

private static String getA() {return “a”;}

public static void main(String[] args){

String a = “a”;

final String c = “a”;

String b = a + “b”;

String d = c + “b”;

String e = getA() + “b”;

String compare = “ab”;

System.out.println(b == compare);

System.out.println(d == compare);

System.out.println(e == compare);

}

}

输出的结果是什么?

6. 如何让c++不分配内存但调用构造函数?

如何让c++ new一个对象的时候只分配内存但不调用构造函数?

7.

class A {

public:

A();

~A();

public:

bool Init(int a);

}

如何使用typedef表示A中的Init这一类的成员函数?

8. 你知道有哪些字符集编码格式?常见的乱码原因有哪些?

9. 请分别写出doubleintfloatbool、指针类型的变量A的比较语句

10. 什么是深拷贝?什么是浅拷贝?

11. 在多线程编程中,往往会遇到线程安全问题,编程中需要小心。

列举一些c语言中常用的线程不安全的函数、或开源库中的接口函数。

12. 下列代码有什么问题,执行结果是什么?

class classA

{

public:

void SetValueAt(const CString& strKey, LPCTSTR lpsrValue);

void OutPut();

protected:

unsigned short m_nPeriod;

long m_lBeginTime;

long m_lEndTime;

}

void classA::SetValueAt(const CString& strKey, LPCTSTR lpszValue)

{

if(0 == strKey.CompareNoCase(“DateTime”))

{

scanf(lpszValue, T(“%d(%d-%d)”), &m_nPeriod, &m_lBeginTime, &m_lEndTime);

}

}

void classA::OutPut()

{

std::cout << &m_nPeriod << std::endl,

std::cout << &m_lBeginTime << std::endl,

std::cout << &m_lEndTime << std::endl

}

int main()

{

classA A;

A.SetValueAt(“DateTime”, “o(123-456)”);

A.OutPut();

}

13. struct CTestData

{

long m_long;

int m_int;

}

int _tmain(int argc, _TCHAR* argv[])

{

CTestData* p = NULL;

Int result = (int)&p->m_int;

return 0;

}

14. 为什么析构函数常定义成虚函数?

15. A.dll中有一个get_something接口,如下

char* get_something()

{

char* p = new char[256];

memset(p, 0, sizeof(p));

//p就行赋值操作 具体代码略

//…

return p;

}

B.dll中如下调用

char* ret = get_something()

//use ret

//…

delete ret;

以上代码是否有问题?如果有请指出并说明原因和修复方式。

16. 解释堆和栈的区别?使用C/C++代码举例。

二. 开放逻辑题

1. 当你发现有用户在搜索引擎中搜以下词汇,你觉得用户分别是想了解什么信息?“金属 官员”,“高盛高华 煤”

2. 同花顺客户端有一个功能叫做键盘精灵,当键盘输入时,能显示出相关的股票代码。比如输入0,会显示出000001000002等几千个股票代码。

这些股票代码在内存中存储时,有几万个结构体,在用List控件显示时,需要往List控件中插入几万条信息。

针对上述描述,你认为有什么地方可以优化、怎么优化,使得程序性能提升,用户体验优化?

三. 编程题

1. 对下面字符串进行转换,将”sdSdsfdAdsdsdfsfdsdASDSDFDSFs”字符串大写变小写,并且将字符串变为镜像字符串,例如:’A’变成’Z’’b’变成’y’

2. 使用htmlcss实现一个下拉列表,鼠标进入显示三个子菜单,鼠标离开隐藏子菜单

3. 实现如下函数,要求输入年月日,返回该参数对应这年的第几天:

int GetDay(int nTime);

例如:nTime = 20150817, 则需要返回2015817号这天是2015年的第几天。

4. 请使用C++/PHP/Java中任意一门语言,使用面向对象的思想为同花顺牧场设计一台能自动给多种家畜喂饲料的机器,要求既能满足喂养牧场中现有家畜的喂养,又能很方便的支持未来引进其他品种的家畜。

5. 编写一个线程安全的单例模式,语言不限。

6. 写一个“标准”宏MIN,这个宏输入两个参数并返回较小的一个。

7. 不使用中间变量交换两个数的值,请尽可能的写出多种方法。

8. 使用递归算法把一个单向链表反转函数定义声明如下:

struct List{

int iValue;

List *next;

};

List *reverse(List *oldList, List *newHead = NULL)

9. 描述:

写一个程序计算单词的数量且按照数量的大小排序。

Input:

文本文件,其中每一行一个单词。

Output:

<word_one><space><count_one>

<word_two><space><count_two>

其中count_one, count_two, …从大到小排序

要求:

试用任何一种脚本语言完成这个程序。

10. Reverse String

四. 阅读题

1. 有如下html片段,实现点击每个单元格输出该单元格内的值转换成百分比(保留2位小数)和该单元格对应的表头,输出格式如“同花顺:3.30%

<table>

<thead>

<tr>

<th>股票名称</th>

<th>涨跌幅</th>

</tr>

</thead>

<tbody>

<tr>

<td>同花顺</td>

<td>0.03<>/td>

</tr>

<tr>

<td>…</td>

</tr>

2000

</tbody>

</table>

2. 找错

(1)

Void test1()

{

char string[10],

char* str1 = “0123456789”;

strcpy(string, str1);

}

(2)

Void test2()

{

char string[10], str1[10];

for(i= 0; i < 10; i++)

{

str1[i] = ‘a’;

}

strcpy(string, str1);

}

(3)

Void test3(char* str1)

{

char string[10];

if(strlen(str1)<=10)

{

strcpy(string, str1);

}

}

3. int main(int argc, char ** argv)

{

int sockfd, new_fd; /*监听socket:sock_fd,数据传输socket:new_fd*/

struct sockaddr_in my_addr; /*本机地址信息*/

struct sockaddr_in their_addr; /*客户地址信息*/

unsigned int sin_size, myport, lisnum;

if(argv[1]) myport = atoi(argv[1]);

else myport = 7838;

if(argv[2]) lisnum = atoi(argv[2])’

else lisnum = 2;

if((sockfd = socket(PF_INET, SOCK_STREAM, 0)) == -1) {

perror(“socket”);

exit(1);

}

my_addr.sin_family = PF_INET;

my_addr.sin_port = htons(myport);

my_addr.sin_addr.s_addr = INADDR_ANY;

bzero(&(my_addr.sin_zero), 0);

if(bind(sockfd, (struct sockaddr *)&my_addr, sizeof(struct sockaddr)) == -1){

perror(“bind”);

exit(1);

}

if(listen(sockfd, lisnum) == -1){

perror(“listen”);

exit(1);

}

while(1){

sin_size = sizeof(struct sockaddr_in);

if((new_fd = accept(sockfd, (struct sockaddr *)&their_addr, &sin_size)) == -1){

perror(“accept”);

continue;

}

printf(“server:got conection from %s\n”, inet_ntoa(their_addr, sin_addr));

if(!fork()){

if(send(new_fd, “Hello world!\n”, 14, 0) == -1){

perror(“send”);

close(new_fd);

exit(0);

}

}

close(new_fd); /*父进程不再需要该socket*/

waitpid(-1, NULL, WHOHANG); /*等待子进程结束,清除子进程所占用资源*/

}

}

这是一段简单的tcp服务器的代码,常见于一些demo中,如果将其用于正式的有着5000个在线用户的服务器,会有哪些问题。

4. 谈谈对下面两个类的理解,它们存在什么问题吗?在设计上有什么可以改进的地方吗?

class classA

{

public:

void Draw();

protected:

void dosomething();

void dosomething2();

void dosomethingX();

void dosomethingN();

}

classB

{

public:

void UpdataAllObjects(),

bool IsFlag() const{return m_bFlag;}

vois SetFlag(bool bFlag) {m_bFlag = bFlag;}

protected:

void dosomething(),

void dosomething2(),

void dosomethingX(),

void dosomethingN(),

protected:

bool m_Flag,

classA* m_pA,

}

void classA:Draw()

{

dosomething(),

dosomething2(),

dosomethingX(),

dosomethingN()

}

void classA::dosomethingX()

{

dosomething()

classB* pB = global::GetBHandle();

if(pB)

{

pB -> SetFlag(false);

pB-> UpdateAllObjects();

}

}

void classB::UpdateAllObjects()

{

dosomething(),

dosomething2(),

dosomethingX(),

dosomethingN(),

}

void classB::dosomethingX()

{

if(m_pA && m_bFlag)

{

m_pA -> Draw()

}

}

namespace global

{

classB* GetHandle()

{

static classB* pB = NULL;

if(NULL == pB)

{

pB = new classB

}

return pB;

}

}

#笔试题目##秋招##前端##同花顺#
全部评论
这是前端题?
点赞 回复 分享
发布于 2018-05-22 13:01
我感觉考c++,就不用玩了
点赞 回复 分享
发布于 2018-10-24 21:05
前端考C++是什么鬼啊……
点赞 回复 分享
发布于 2018-05-22 13:20

相关推荐

面试官人很好,态度和蔼可亲,没答出来时也会引导你去思考。由于是晚上面的,导致我白天一天都有点紧张,面的时候状态也不是很好,正常可能面试官提问完应该思考几秒再答,而我就像抢答一样一口气把所有会的都说出来,这样就导致逻辑比较混乱,东一句西一句的。首先是自我介绍,先把会的技术大致讲一下,由于我八股背的多所以着重讲了一下,Java,go,jvm,MySQL,Redis,计网,操作系统这些,然后一小部分闲聊,然后先问了一下项目,面试官问我这个项目是否落实之类的,直接坦言说是写的练手的,包括之前也写过IM通讯,外卖之类的。然后面试官就把提问的重点放在了八股上。先问了Java:类加载器(答:3种+自定义类加载器、tomcat、原因+双亲委派+好处)JVM参数(答:xmx,xms,newsize这些,问我是如何设定的,我回答是把内存分一半给堆,再把堆分一半给新生代,这方面确实不太了解)然后问了一下并发相关的:线程池(答:线程池的7个参数(忘了线程工厂和阻塞时间了),3个重要参数,还有线程如何启用,为什么要设计最大线程数之类的,提到Java栈默认分配1MB运行时不可以更改)AQS(答:先讲clh是自旋锁+list,然后是AQS在这个基础上做的两个优化,然后举了一下reentrantlock根据state如何获取资源)CAS(答:使用三个字段,aba问题,然后将通常搭配自旋锁实现,面试官问通常会自旋多少次,这个不太了解,答的100,然后问100次大概多少秒,回答微秒级,然后面试官讲了一下怎么做资源可能没用完,意识到可能还需要进行阻塞操作)然后考虑一下Linux命令(top,ps,如何使用管道符过滤线程和使用Linux启动线程没答出来)然后问Redis:持久化机制(答:三种aof,rdb,混合,aof的三个参数刷盘策略,rdb以快照保存,使用bgsave会使用子线程来保存不会阻塞,而aof虽然会阻塞但是只在写完数据后追加一条命令,不会太影响,然后是他俩的优缺点,还有混合是怎么保存数据的)集群模式(答:三种,主从复制到缺点再到哨兵机制,正常使用三个哨兵互相监督,主节点挂了投票选主哨兵然后选主节点,然后额外讲一下脑裂的问题,主节点进行数据更新然后把命令写入aof来同步从节点,最后cluster集群,如何实现,使用16383个哈希槽(艹答成16384了),先根据哈希码取余,再根据节点数取余决定放在哪个节点上,然后问了一下我会怎么选集群模式,首先是cluster的问题,会让管道操作之类的失效,然后哨兵会导致整个集群结构变得复杂,使用小项目可能会考虑哨兵,大的考虑cluster,然后考了一下cluster如果一个节点挂了怎么办,根据节点数重新取余然后数据转移,面试官说这么转移比较慢,有没有别的办法,我隐约记得使用一个类似环形数组的方式,想不起来了)然后考了一下MySQL的b+树(这方面的知识点太多了,导致我什么都想讲逻辑就比较乱,讲了一下聚簇索引,树的叶子节点对应着一张页16KB,MySQL有一个区的概念,把这些页放在同一个区中,这样叶子节点的双向链表遍历时速度更快,然后b+树的扇出比较大(非常二,说成扇度之类的,面试官以为说的是扇区)这样层数就比较小,一行1kb数据的话3层可以放心2000w数据)其他的暂时想不起来了算法是lru,面试官问要不要提示,我说写个,然后写了10分钟左右,说大概写好了,但是面试官指出了2个小错误,第一个马上就改回来了,第二个一直没看出来(大脑这时候已经停止工作了)反问:问学习建议,说根据实际的项目进行深入,考虑应该怎么做,还问了一下组里面是做Java的吗?面试官说他是做go的,组里什么语言都有,语言影响不大,连忙补充了一句我对go的底层有深入源码的学习)结束。总体感觉答得不太好,没有太体现出深度,细节也不够全面。
下一个更好呗:佬,我投完云智一直没消息,多久约的一面啊
查看14道真题和解析
点赞 评论 收藏
分享
评论
点赞
27
分享

创作者周榜

更多
牛客网
牛客企业服务