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

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

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

型:

void FoxmatString(char str [], int len) {

}

#include #include

〈string. h>

void FormatString (char str [], int len) [

if (str == NULL | | len <= 0) {

return;

int i = 0; int j = 0;

if (str[i] ==‘‘){

while (str [i] == ' ') {

++i;

while (str[i] != '

){

if (str [i] ==''&& str [i - 1] == ' ' | | str [i + 1] == ' \\0‘){

++i; continue; }

str[j++] = str [i++]; }

str[j] = '\\0‘; }

int main() {

char a[] = i am a little boy. ”; int len = strlen(a); printf (°%d\\n°, len); Format String (a, len); printf(°%d\\n°, strlen(a)); printf(°%s\\n°, a); return 0; }

16.给定一颗二叉树,以及其中的两个node (地址均非空), 要求

给岀这两个node的一个公共父节点,使得这个父节点 与两个节

点的路径之和最小。描述你程序的最坏时间复杂 度,并实现具体函数,函数输入输岀请参考如下的函数原型; 型:

stmcy TreeMode {

TreeHode* left; /月^向左子树 TreeHode* right; /滞子树 TreeHode* f ather; /潴向父亲节点

I;

TreeMode* LowestCommonAncestor (TreeHode* f irst, TreeMode* second) {

}

int no deHeight(TreeNode* node)

int height = 0; while(no de != NULL) height++;

node = no de~'father;

}

I

TreeNode* LowestCommonAncestor(TreeHode* first, TreeNode* second)

[

int diff = no deHeight(first) - no deHeight(second); if (diff > 0)

[

while(diff > 0)

[

first = first~>father; diff—;

} }

else

[

while(diff < 0)

[

second = sec ond~ ather. diff++;

} }

while(first != second)

[

first = first->father;

second = sec ondather; }

return first; }

-

17.计算第K个能表示(2Z * 3勺* 5M)的正整数(i,j,k为整 数)?其

前7个满足此条件的数分别是1,234,5,6,8.

public class Main {

public static void main( String [. args) {

int [] a = new int [1501]; a[l] = 1;

TreeMap

Deque Q2 Deque Q3 Deque Q5

new AxrayDeque^Integer^ (); new AxrayDeque^Integer^ (); new AxrayDeque^Integer^ ();

map. put(2, 2); map. put(3, 3); map. put(5, 5);

for (int i = 2; i < 1501; i—) {

if (map. isEmpty ())

break;

Map. Ent ry< Int eg er. Integer〉e = map. pollFirstEntry (); int key = e. getKey ();

int val = e. getValue (); if (val == 5) {

Q5. add (key * 5);

map. put(Q5. pollFirs~ (), 5); } else if (val == 3) {

Q5. add (key * 5); Q3. add (key * 3);

map. put(Q3. pollFirsi (), 3); } else {

Q5. add (key * 5); Q3. add (key * 3); Q2. add (key * 2);

map. put(Q2. pollFirsi(), 2);

a[i] = key; }

Scanner sc = new Scanner (System, in); while (sc.hasNextO) {

System, out. prmtln(a[sc.nextlnt ()]);

18. B-树和B+树的区别是什么?

B-树是一种多路搜索树(并不是二叉的。),一颗m阶的B-树,或为空树,或者定义 任意非

叶子结点最多只有M个儿子。 且M>2;根结点的儿子数为[2, M]。

除根结点以外的非叶子结点的儿子数为[H/2]。

每个结点存放至少M/2-1 (职上整)和至多M-1个关键字;(至少2个关键字)非叶子 结点的

关键字个数=指向儿子的指针个数T ; B+树,B+树是B-树的变体,也是一种多路搜索树:其定义基本与B-树同。

B-树是一种 多路搜索树(并不是二叉的。),一颗m阶的B-树,或为空树, 或 者定义任意

非叶子结点最 多只 有M个儿子。 且M>2;根结点的儿子数为[2, M]。

除根结点以外的非叶子结点的儿子数对[M/2]。

每个结点存放至 少M/^l (职上整)和至多M-1个 关键 字;(至少2个关 键字)非叶子结点的关键字个数=指向儿子指针个数T;

B+树,B+树是B-树的变体,也是一种多路搜索树:其定义基本与B-树同。

19.分布式服务接口的幕等性如何设计(比如不能重复扣

款)?

所谓幕等性,就是说一个接口,多次发起同一个请求,你这个接口得保证结果是准确的, 比如不能多扣款,不能多插入一条数据,不能将统计值多加了 1。这就是幕等性,不给 大家来学术性词语了。

其实保证幕等性主要是三点:

(1) 对于每个请求必须有一个唯一的标识,举个例子:订单支付请求,肯定得包含订 单id,—

个订单id最多支付一次,对吧

(2) 每次处理完请求之后,必须有一个记录标识这个请求处理过了,比如说常见的方 案是

在吋四1中记录个状态嗜的,比如支付之前记录一条这个订单的支付流水,而且支 付流水采

(3) 每次接收请求需要进行判断之前是否处理过的逻辑处理,比如说,如果有一个订 单已

经支付了,就已经有了一条支付流水,那么如果重复发送这个请求,则此时先插入 支付流水,

orderld已经存在了,唯一键约束生效,报错插入不进去的。然后你就不用 再扣款了。 (4) 上面只是给大家举个例子,实际运作过程中,你要结合自己的业务来,比如说用 redis

用皿derid作为唯一键。只有成功插入这个支付流水,才可以执行实际的支付扣

要求是支付一个订单,必须插入一条支何流水,order.id建一个唯一键,unique key 所以你在支付一个订单之前,先插入一条支付流水,ordez_id就已经进去了 你就可以写一个标识到

re dis里面去,set order_id payed,下一次重复请求过来了, 先查:redis的order_id对应的value,妇果是payed就说明已经支付过了,你就别重 复支付了

然后呢,你再重复支付这个订单的时候,你写尝试插入一条支付流水,数据库给你报错 了,说unique key冲突了,整个事务回滚就可以了

来保存一个是否处理过的标识也可以,服务的不同实例可以一起操作redis。

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

型:voidFoxmatString(charstr[],intlen){}#include#include〈string.h>voidFormatString(charstr[],intlen)[if(str==NULL|
推荐度:
点击下载文档文档为doc格式
8utyq5c5gu8mpoj7ocb09o8y29wtcx00z09
领取福利

微信扫码领取福利

微信扫码分享