
面试
希哈科技
希哈科技 (XIHA) 致力于成为全球领先的AIoT产品与技术服务解决方案提供商。把 “赋能万物,机器智能” 作为核心价值观。相信所秉承的 “星球万物,智慧物联” 的使命,会持续为客户创造长期价值。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
C宏常见面试题
1.写一个“标准”宏,这个宏输入两个参数并返回较小的一个答:#define MIN(x, y) ((x)<(y)?(x):(y))//注意x,y要加括号,因为x,y如果有复合运算会出现问题。2.宏定义中#与##的作用?答:#是把宏参数转化为字符串的运算符,##是把两个宏参数连接的运算符。例如:#define STR(arg) #arg 则宏STR(hello)展开时为”hello”#define NAME(y) name_y 则宏NAME...转载 2020-11-17 15:27:57 · 508 阅读 · 0 评论 -
查找链表中倒数第k个节点
问题:输入一个链表,输出该链表中倒数第k个节点。为了符合大多数人的习惯,从1开始计数,即链表的尾节点是倒数第1个节点。例如,一个链表有6个节点,从头节点开始,它们的值依次是1、2、3、4、5、6。这个链表的倒数第3个节点是值为4的节点,链表节点定义如下: struct ListNode { int m_nValue; ListNode *m_pNext; }; 解题思路:由于单向链表的节点只有从前往后的指针没有从后往前的指针,因此从尾节点往前走k步.转载 2020-11-04 21:17:47 · 932 阅读 · 0 评论 -
哈希冲突及四种解决方法
哈希冲突的产生原因哈希是通过对数据进行再压缩,提高效率的一种解决方法。但由于通过哈希函数产生的哈希值是有限的,而数据可能比较多,导致经过哈希函数处理后仍然有不同的数据对应相同的值。这时候就产生了哈希冲突。产生哈希冲突的影响因素装填因子(装填因子=数据总数 / 哈希表长)、哈希函数、处理冲突的方法解决哈希冲突的四种方法1.开放地址方法 (1)线性探测 按顺序决定值时,如果某数据的值已经存在,则在原来值的基础上往后加一个单位,直至不发生哈希冲突。 (2)再平方探测转载 2020-11-04 21:06:38 · 976 阅读 · 0 评论 -
二叉树的遍历(前序、中序、后序、已知前中序求后序、已知中后序求前序)
之前的一篇随笔(二叉树、前序遍历、中序遍历、后序遍历)只对二叉树的遍历进行了笼统的描述,这篇随笔重点对前、中、后序的遍历顺序进行分析二叉树的遍历二叉树的深度优先遍历可细分为前序遍历、中序遍历、后序遍历,这三种遍历可以用递归实现(本篇随笔主要分析递归实现),也可使用非递归实现的前序遍历:根节点->左子树->右子树(根->左->右)中序遍历:左子树->根节点->右子树(左->根->右)后序遍历:左子树->右子树->根节点(...转载 2020-11-04 21:02:20 · 544 阅读 · 0 评论 -
C++ new和malloc的区别
这里先对new和delete简单进行一下总结,然后再细说new和malloc的区别。一、new和deleteC语言提供了malloc和free两个系统函数,完成对堆内存的申请和释放。而C++则提供了两个关键字new和delete;1.1 规则new/delete是关键字,效率高于malloc和free。 配对使用,避免内存泄漏和多重释放。 避免交叉使用,比如malloc申请空间delete释放,new出的空间被free。 new/delete 主要是用在类对象的申请和释放...转载 2020-11-04 20:40:07 · 271 阅读 · 0 评论 -
一个例子告诉你什么是封装,继承和多态
面向对象的三大特性:封装,继承和多态;封装:将事物拥有的属性和动作隐藏起来,只保留特定的方法与外界联系。继承:子类可以拥有父类的属性和方法;多态:以说是“一个接口,多种实现”或者说是父类的引用变量可以指向子类的实例,被引用对象的类型决定调用谁的方法,但这个方法必须在父类中定义定义五花八门,所以定义不重要,重在理解和应用,接下来我们通过实例来说明这三个特性;如果面试官给你一个问题,请实现加、减、乘和除四个功能;第一种最简便的方法,三个特性一个也没有体现…… //main.转载 2020-11-04 20:36:00 · 788 阅读 · 0 评论 -
C++面向对象的特点
面向对象的特点主要有: 封装, 继承, 多态; 现在自己的简单理解如下, 但要明白具体怎么实现, 背后的原理是什么?什么是封装, C++怎么实现封装封装的大致可以分为: 函数的封装和类的封装, 函数的封装相当于把各个功能模块写成一个函数, 从上到下依次调用; 类的封装:就是把变量和函数接口封装为一个class, 这种类就相当于一种类型, 可以声明这种类型的变量, 叫作对象; 更官方的说法是: 封装将事物拥有的属性和动作隐藏起来, 只保留特定的方法和外界联系(即public函数接口); 封装转载 2020-11-04 20:32:08 · 303 阅读 · 0 评论 -
c++中 虚函数与纯虚函数的区别是什么?
虚函数dao与纯虚函数 在他们的子类中都du可以被重zhi写。它们的区别是:(dao1)纯虚函数专只有定义属,没有实现;而虚函数既有定义,也有实现的代码。纯虚函数一般没有代码实现部分,如virtual void print() = 0;而一般虚函数必须要有代码的实现部分,否则会出现函数未定义的错误。virtual void print(){ printf("This is virtual function\n"); }(2)包含纯虚函数的类不能定义其对象,而包含虚函数的则可以。...原创 2020-11-04 20:25:00 · 205 阅读 · 1 评论 -
C++中重载、重写(覆盖)和隐藏的区别
基本概念:重载:是指同一可访问区内被声明的几个具有不同参数列(参数的类型,个数,顺序不同)的同名函数,根据参数列表确定调用哪个函数,重载不关心函数返回类型。示例:class A{public: void test(int i); void test(double i);//overload void test(int i, double j);//overload void test(double i, int j);//overload int test(int i);转载 2020-11-04 20:22:55 · 235 阅读 · 0 评论 -
堆、栈和队列的区别
目录数据结构中的堆、栈和队列内存申请中的堆和栈一个C/C++程序占用的内存如下:申请内存后的响应申请大小的限制申请效率的比较堆和栈中的存储内容数据结构中的堆、栈和队列堆:堆是一种经过排序的树形数据结构,每个结点都有一个值。通常我们所说的堆的数据结构,是指二叉堆。堆的特点是根结点的值最小(或最大),且根结点的两个子树也是一个堆。由于堆的这个特性,常用来实现优先队列,堆的存取是随意,这就如同我们在图书馆的书架上取书,虽然书的摆放是有顺序的,但是我们想取任意一本时不必像栈一..转载 2020-11-04 20:15:23 · 2711 阅读 · 0 评论 -
TCP协议中的三次握手和四次挥手(图解)
建立TCP需要三次握手才能建立,而断开连接则需要四次握手。整个过程如下图所示:先来看看如何建立连接的。【更新于2017.01.04 】该部分内容配图有误,请大家见谅,正确的配图如下,错误配图也不删了,大家可以比较下,对比理解效果更好。这么久才来更新,抱歉!!错误配图如下:首先Client端发送连接请求报文,Server段接受连接后回复ACK报文,并为这次连接分配资源。Client端接收到ACK报文后也向Server段发生ACK报文,并分配资源,这样TCP连接就建立...转载 2020-11-03 18:28:15 · 239 阅读 · 0 评论 -
Android Activity和View基础
一、Activity的启动流程操作系统首先查看AndroidManifest.xml来决定启动哪一个Activity。 生成对应的Activity对象(系统自动完成)。 调用它的onCreate()方法,使用onCreate()里面的setContentView()来制定Activity使用的布局文件。 将布局文件装载进来之后会生成布局文件中所声明的控件的对象,在Activity里显示出来。二、View View是所有控件的父类。三、View和Activity 在Acti转载 2020-11-03 10:27:00 · 657 阅读 · 0 评论 -
Android线程的生命周期
线程之生命周期在开发过程中我们用到线程的地方也不少,线程在android源码中也随处。重新整理线程知识,加深对线程的理解。在线程的生命周期中,它要经过新建(New)、就绪(Runnable)、运行(Running)、阻塞(Blocked)和死亡(Dead)五种状态。当线程start后,它不能一直"独占"着CPU独自运行,所以CPU需要在多条线程之间切换,于是线程状态也会多次在运行、阻塞之间切换。按自己的理解整理出一张线程生命周期图,参照生命周期图更直观的了解线程。下面着重分析这五种状态:新建 New转载 2020-11-03 10:23:24 · 1426 阅读 · 0 评论 -
10 个常见的压力面试问题
10 个常见的压力面试问题1、告诉我,你最大的弱点是什么?回答这种问题的秘诀在于不接受这种否定暗示。不要否认你有缺点,没人会相信世界上有完人;相反,你应该承认一个微不足道的弱点或一个小小的缺点,然后再说那都已经成为过去了,表明自己是怎样克服这个缺点的。2、你认为自己的哪项技能需要加强?麻烦又来了,你不可能宣称自己无所不能,但如果你简单地承认自己在哪方面需要改进,高压面试主考就会像嗜血的鲨鱼一样一口咬住你。你该重新定义一下这个问题以便躲开这一点:"既然谈到这儿,我想说我已具备了这份工作所需的所有技能。转载 2020-11-03 10:19:51 · 955 阅读 · 2 评论 -
volatile和synchronized的区别
1、概述在研究并发程序时,我们需要了解java中关键字volatile和synchronized关键字的使用以及lock类的用法。首先,了解下java的内存模型:(1)每个线程都有自己的本地内存空间(java栈中的帧)。线程执行时,先把变量从内存读到线程自己的本地内存空间,然后对变量进行操作。(2)对该变量操作完成后,在某个时间再把变量刷新回主内存。那么我们再了解下锁提供的两种特性:互斥(mutual exclusion) 和可见性(visibility):(1)互斥(mutua.转载 2020-11-03 10:17:44 · 219 阅读 · 0 评论 -
Android Activity中的六个主要函数
Android中一个Activity一般都需要实现六个函数:onCreate(), onStart(), onResume(),onPause(),onStop(),onDestroy().onCreate函数:注册你要用到的变量,比如说service,receiver,这些变量是无论你的Activity是在前台还是在后台都能够被响应到的,然后调用上面那个用来初始化的函数初始化布局信息。onStart函数:注册一些变量。这些变量必须在Android Activity类在前台的时候才能够被响.转载 2020-11-03 10:10:17 · 343 阅读 · 0 评论 -
View与ViewGroup的关系
View与ViewGroup的关系OrangeBoys2019-04-17 00:42:041601收藏2版权Android的UI界面都是由View和ViewGroup及其派生类组合而成的。 其中,View是所有UI组件的基类,而 ViewGroup是容纳这些组件的容器,其本身也是从View派生出来的. View对象是Android平台中用户界面体现的基础单位。 View类是它称为“widgets(工具)”的子类的基础,它们提供了诸如文本输入框和按钮之类的UI对象的完...转载 2020-11-03 10:06:37 · 354 阅读 · 0 评论 -
编程练习:整数翻转|难度:简单
将给出的整数x翻转。例1:x=123,返回321例2:x=-123,返回-321你有思考过下面的这些问题么?如果整数的最后一位是0,那么输出应该是什么?比如10,100你注意到翻转后的整数可能溢出吗?假设输入是32位整数,则将翻转10000000003就会溢出,你该怎么处理这样的样例?抛出异常?这样做很好,但是如果不允许抛出异常呢?这样的话你必须重新设计函数(比如添加一个额外的参数)。主要是要判断是否溢出但是我不知道界在哪里 咋整呢那我就判断一下反转之后算式里用到的某个变量还是不是曾经.转载 2020-10-23 16:11:55 · 351 阅读 · 0 评论 -
linux面试
笔者作为一枚小小的程序员在面试中经常会考一些算法的实现,做个总结二分法[html] view plain copyint binSearch(int x, int a[], int n) { int low, high, mid; low = 0; high = n-1;转载 2018-02-07 15:08:26 · 1644 阅读 · 0 评论