好文档 - 专业文书写作范文服务资料分享网站

2020年京东精选50面试题及答案

天下 分享 时间: 加入收藏 我要投稿 点赞

if (temp.adjM[c][a].weight) temp.adjM[c][b].weight = 1; } } } }

〃进行判断

for (int i=0;i

for (int j=0;j

if (!temp.adjM[i][j].weight)

return false;

} }

return true;

〃广度优先搜索判断连通性

bool connectivityBFS(adjGraph G) {

queue〈int> q; //B月白队列用途? bool visit [MAX_VNUM]; 〃访问数组 int count = 0; memset(vlslr,0,slzeof(visit)); q.push(0); 〃。节点入队列 while(!q.empty()) {

int v = q .front(); visit[v] = true; q.pop(); count++;

〃与联通且没有被访问过节点人队列

for (int i =0;i

if (G.adjM[v][i].weight) {

if(!visit[i]) {

q.push(i); } } } }

if (count == G.vNum)

return true; else

return false;

}

〃深度优先搜索判断图的连通性,传逢数组会改变值,visit需初始化 void dfs_visit(adjGraph

G,int firstNode,bool visit[]) {

visit[firstNode] = 1; for(int i=0; i

if(G.adjM[firstNode][i].weight & !visit[i]) dfs_visit(G,i,visit);

bool connectivityDFS(adjGraph G) {

bool visit [MAX_VNUM]; 〃访问数组 memset(vlslr,0,slzeof(visit)); dfs_visit(G,0,visit); 〃从。节点开始访问

for(int i=0;i

if (visit[i] == false) return false;

return true; int main()

{

adjGraph G; CreateGraph(G); //print(G);

if (connectivityWarshall(G)) cout<<\连通\〈\不连通\system(\return 0;

5. git pull 和 git merge 区别?

你修改好了代码,先要提交

git commit \message”

然后有两种方法来把你的代码和远程仓庠中的代码合并:

a. git pull这样就直接把你本地仓库中的代码进行更新但问题是可能会有冲突 (conflicts),个人不推荐。

b. 先git fetch origin (把远程仓库中origin最新代码取回)> 再git merge origin/master

(把本地代码和已取得的远程仓库最新代码合并),如果你的改动和远 程仓库中最新代码有冲突,会提示,再去一个一个解决冲突,最后再从1开始。

c. 如果没有冲突,git push origin master,把你的改动推送到远程仓库中。

6. 手写快速排序代码.

public static int partition (int ari [], int int r) { //基准元素设为第一个

int v = arr [1];

//i指向基准的下一个元素,j指向最后一个元素 int i = 1+1, j = r; while(true){

while(i <= r && axr [i] < v) i++; while(j > 1 && axr[j] > v) j—;

//循环终止条件

if (i > j) break;

/发换皿[i]与皿[j]

int t = axr [i];axr [i] = axr [j]; axr[j] = t; i++;

/R寻基准元素与axr[j]交换 int t = axr [1];

axr [1] = axr [j]; axr[j] = t;

//返回基准元素所在位置 return j;

7. 内存分配方式有几种?

内存分配方式:

(1) 符号起始的区块(丄奖段):通常有的是存放程序中未初始化或者初始化为。的 变量的

和静态数据的区域。bss属于静态为存分配,程序结束后静态资源变量由系统自 动释放。

(2) 数据段:通常指存放程序中已初始化的全局变量的一块内存区域。也属于静态内 存分

配。

(3) 代码段:有时也叫文本段,通常指的是用来存放程序执行代码(包含类成员函数 和全局

函数及其他函数代码),这部分区域的大小在程序运行前就已经确定,也有可能 包含一些只读的常数变量,例如字符串变量。

(4) 堆(heap):用于存放进程运行中被动态分配的内存段,大小不固定。当进程调用 malloc

或者new等函数时,新分配的内存就被动态添加到堆上(堆被扩张),当使用 free或者delete等函数释放内存时,被释放的内存从堆中被删除。需要注意的是,它 与数据结构中的堆是两回事,它的分配天式类似于链表。

(5) 栈(stack):存放程序临时创建的局部变量,不包括static声明的变量,static 意味着

在数据段中存放。除此之外,当幽!被调用时,其参数也会被压到栈中,并在调 用结束后,函数的返回值也会被放到栈中。栈由编译器自动释放。其操作方式类似于数 据结构中的柱。柱内有分配运算内置于处理器的指令集中,一般使用容存器来有取,效 率很高,但是分配的内存容量有限。

8. 在VC 6.0中定义一个数组a[1024][1024],能够运行吗?

不能,因为运行的时刻没有那么大的可分配内存块,栈内存不够,默认是1M的空间。

9. 请描述动态规划的基本思想?

分治法

将一个规模为n的问题分解为K个规模较小的子问题,这些子问题互相独立且与原问题 相同。逢归的解决这些问题,然后将各个子问题的解合并得到原问题的解 贪心法

当前的选择可能要依赖于已经做出的选择,但不依赖于有待于做出的选择和子问题。因 此贪心法是自顶向下,一步一步地做出貪心的选择 动态规划

动态规划的实质是分治思想和解决冗余,因此动态规划是一种将问题实例分析为更小 的、相似的子问题,并存储子问题的解而避免计算重复的子问题,以解决最优化问题的 算法策略 动态规划所针对的问题有一个显著的特征,即它对应的子问题树中的子问题呈现大量的 重复。动态规划的关键在于,对于重复的子问题,只在第一次遇到时求解,并把答案保 存起来,让以后再谒到时直接引用,不必要重新求解

10. 分布式服务接口请求的顺序性如何保证?

① 首先,一般来说,从业务逻辑上最好设计系统不需要这种顺序的保证,因为一旦引入 顺序性保障,会导致系统复杂度的上升,效率会降低,对于热点数据会压力过大等问题。 ② 操作串行化。

首先使用一致性hash负载均衡策略,将同一个id的请求都分发到同一个机器上面去处 理,比如订单可以根据订单id。如果处理的机器上面是多线程处理的,可以引入内存 队列去处理,将相同id的请求通过hash到同一个队列当中,一个队列只对应一个处理 线程。 ①最好能将多个操作合并成一个操作。

12. 编译时多态和运行时多态的区别?

编译时多态

主要是方法的重载,通过参数列表的不同来区分不同的方法。 运行时多态

也叫作动态绑定,一般是指在执行期间(非编译期间)判断引用对象的实际类型,根据 实际类型判断并调用相应的属性和方法。主要用于继承父类和实现接口时,父类引用指 向子类对象。

13. 常用的内存管理方法有哪几种?

段式 页式 段页式

14. 已知某二叉树的后序遍历序列是dabec,中序遍历序列 是deabc,它的前序遍历序列是什么?

cedba

15. 给定字符串(ASCII码0-255)数组,请在不开辟额外空 间的情

况下删除开始和结尾处的空格,并将中间的多个连续 的空格合并成一个。例如:” i am a little boy. “,变成” iam a little boy”,C++语言实现,不要用伪代码作答,函数输入输 岀请参考如下的函数原型:

8utyq5c5gu8mpoj7ocb09o8y29wtcx00z09
领取福利

微信扫码领取福利

微信扫码分享