首页 > 酒水分类 > 葡萄酒

京东运营面试常见问题与答案,京东运营面试常问的问题

酒易淘 葡萄酒 2022-07-20 04:04:56

品牌名称:酱香白酒加盟 所属行业:酒水 > 白酒

基本投资:10~50万元 投资热度:

加盟意向:1634 门店数量:534家

索要资料 查看详情

  

     

  

  1.求1~N的最小公倍数。把每个数字分解质因数,算他们每个质因数的贡献,然后乘起来。我的代码没写好(算质因数不用这么慢的)。#includebits/stdc .使用命名空间标准;typedef long long ll # define maxn 100009 int事实布尔素数;ll mod=987654321int cal(int t,int p){ int CNT=0;while(t % p==0){ CNT;t/=p;}返回cnt}void first() { memset(prime,true,sizeof(prime));prime 1=false for(int I=2;I=100000 I){ int top=sqrt(I);for(int j=2;j=顶部;j){ if(I % j==0){ prime=false;打破;} } } } void solve(int Limit){ first();for(int I=2;我=极限;I){ int top=sqrt(I);for(int j=2;j=顶部;j){ if(prime I % j==0){ fact=max(fact,cal(i,j));} } if(prime) fact=max(事实,1);} } int main(){ ll n;桂皮酸求解(n);ll ans=1;for(ll I=1;I=n;I){ for(ll j=1;j=事实;j){ ans=ans * I % mod;} } coutansendl返回0;}2.去掉字符串构成回文。其实是经典的求回文子序列个数。包括比特/标准数据.使用命名空间标准;typedef long long llll f5959字符串strll dfs(int i,int j){ if(I j){ return 0;} if(I==j){ f=1;返回f;} if(f!=0){ return f;} f=dfs(i,j - 1) dfs(i 1,j) - dfs(i 1,j-1);if(str==str) f=dfs(i 1,j-1)1;返回f;} int main(){ cinstr;int len=str。长度();coutdfs(0,len-1)endl;返回0;}3.象棋的马走K步之后到(X,Y)的方案数。直接递推。包括比特/标准数据.使用命名空间标准;typedef long long llll DP 10103 ll mod=1e 9 7;int dx8={-2,-1,1,2,2,1,-1,-2 };int dy8={-1,-2,-2,-1,1,2,2,1 };int check(int x,int y) { if(x=0 x=8 y=0 y=8)返回真实的返回false}void cal(int x,int y,int state){ DP=0;for(int I=0;I 8;i ) {   

int tx = x + dx; int ty = y + dy; if(check(tx, ty)) { dp = (dp + dp) % mod; } }}int main() { int K; cin>> K; int state = 0, nowstate; dp<0><0><0> = 1; while(K--) { state = state ^ 1; for(int i = 0; i <= 8; i++) { for(int j = 0; j <= 8; j++) { cal(i, j, state); } } } int x, y; cin>>x>>y; cout<<dp<<endl; return 0;}4. 如何验证图的连通性?#include<iostream>#include<queue>#include <stdio.h> using namespace std;#define MAX_VNUM 10 typedef struct{int weight;}Adj,AdjMatrix; typedef struct{AdjMatrix adjM;int vNum;}adjGraph; //创建一个图,节点从0开始,注意传入引用void CreateGraph(adjGraph &G){cout<<"输入节点个数:"<<endl;cin>>G.vNum;cout<<"输入图的邻接矩阵:"<<endl;for (int i=0;i<G.vNum;i++){for (int j=0;j<G.vNum;j++){cin>>G.adjM.weight;}}} //输出一个图void print(adjGraph G){for(int i=0;i<G.vNum;i++){for(int j=0;j<G.vNum;j++){cout<<G.adjM.weight<<" ";}cout<<endl;//将换行流写入输出流,清空输出缓冲区}} //warshall算法判断图的连通性bool connectivityWarshall(adjGraph G){adjGraph temp;//临时判断矩阵temp.vNum = G.vNum; //初始化临时判断矩阵for (int i =0;i<temp.vNum;i++){for(int j=0;j<temp.vNum;j++){if (G.adjM.weight)temp.adjM.weight = 1;elsetemp.adjM.weight = 0;}temp.adjM.weight = 1;} //矩阵乘法算法Warshall,R(a)for (int a =0;a<temp.vNum;a++){for (int b=0;b<temp.vNum;b++){if(temp.adjM.weight){for (int c = 0;c<temp.vNum;c++){if (temp.adjM.weight)temp.adjM.weight = 1;}}} } //进行判断for (int i=0;i<temp.vNum;i++){for (int j=0;j<temp.vNum;j++){if (!temp.adjM.weight)return false;}}return true;} //广度优先搜索判断连通性bool connectivityBFS(adjGraph G){queue<int> q; //明白队列用途?bool visit; //访问数组int count = 0;memset(visit,0,sizeof(visit));q.push(0); //0节点入队列 while(!q.empty()){int v = q.front();visit = true;q.pop();count++; //与联通且没有被访问过节点入队列for (int i =0;i<G.vNum;i++){if (G.adjM.weight){if(!visit){q.push(i);}}}} if (count == G.vNum) return true;else return false;} //深度优先搜索判断图的连通性,传递数组会改变值,visit需初始化void dfs_visit(adjGraph G,int firstNode,bool visit<>){visit = 1;for(int i=0; i<G.vNum;i++){if(G.adjM.weight & !visit)dfs_visit(G,i,visit);}} bool connectivityDFS(adjGraph G){bool visit; //访问数组memset(visit,0,sizeof(visit));dfs_visit(G,0,visit); //从0节点开始访问 for(int i=0;i<G.vNum;i++){if (visit == false) return false;}return true;} int main(){adjGraph G;CreateGraph(G);//print(G); if (connectivityWarshall(G)) cout<<"连通"<<endl;else cout<<"不连通"<<endl;system("pause");return 0;}5. git pull和git merge 区别?你修改好了代码,先要提交

  

git commit -am “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 partition2(int arr<>,int l,int r){//基准元素设为第一个int v = arr;//i指向基准的下一个元素,j指向最后一个元素int i = l+1,j = r;while(true){while(i <= r && arr < v) i++;while(j > l && arr > v) j--;//循环终止条件if(i > j) break;//交换arr与arrint t = arr;arr = arr;arr = t;i++;j--;}//将基准元素与arr交换int t = arr;arr = arr;arr = t;//返回基准元素所在位置return j;}7. 内存分配方式有几种?内存分配方式:

  

(1)符号起始的区块(.bss段):通常指的是存放程序中未初始化或者初始化为0的变量的和静态数据的区域。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到同一个队列当中,一个队列只对应一个处理线程。

  

  

③最好能将多个操作合并成一个操作。

  

11. 给定字符串(ASCII码0-255)数组,请在不开辟额外空间的情况下删除开始和结尾处的空格,并将中间的多个连续的空格合并成一个。例如:” i am a little boy. “,变成”i am a little boy”,C++语言实现,不要用伪代码作答,函数输入输出请参考如下的函数原型:C++函数原型: void FormatString(char str<>,int len){ }#include<stdio.h>#include <string.h> void FormatString(char str<>,int len){ if (str == NULL || len <= 0) { return; } int i = 0; int j = 0; if (str == ' ') { while (str == ' ') { ++i; } } while (str != '\0') { if (str == ' ' && str == ' ' || str == '\0') { ++i; continue; } str = str; } str = '\0';} int main() { char a<> = " i am a little boy. "; int len = strlen(a); printf("%d\n",len); FormatString(a,len); printf("%d\n",strlen(a)); printf("%s\n",a); return 0;}12. 给定一颗二叉树,以及其中的两个node(地址均非空),要求给出这两个node的一个公共父节点,使得这个父节点与两个节点的路径之和最小。描述你程序的最坏时间复杂度,并实现具体函数,函数输入输出请参考如下的函数原型:C++函数原型:strucy TreeNode{ TreeNode* left; //指向左子树 TreeNode* right; //指向右子树 TreeNode* father; //指向父亲节点 }; TreeNode* LowestCommonAncestor(TreeNode* first,TreeNode* second){ } int nodeHeight(TreeNode* node){ int height = 0; while(node != NULL) { height++; node = node->father; }}TreeNode* LowestCommonAncestor(TreeNode* first, TreeNode* second){ int diff = nodeHeight(first) - nodeHeight(second); if(diff > 0) { while(diff > 0) { first = first->father; diff--; } } else { while(diff < 0) { second = second->father; diff++; } } while(first != second) { first = first->father; second = second->father; } return first;}

  

  

更多大厂面试资料(腾讯、阿里、华为等)后台私信“1”获取

免费咨询
免费获取加盟资料