递归问题:递归引用传递的问题 5C

最近在学递归有两个问题困扰了我很久,
问题:递归引用传递的问题
贴个代码说事

 public static List<List<Integer>> threeSum(int[] nums,int counter,List<List<Integer>> results,List<Integer> result) {
    //递归
    }
就拿这个做例子,我发现比如说数组原始内容是{-1, 0, 1, 2, -1, -4},递归做的是找出三个元素使得a+b+c=0,比如说我在里面有循环,当我从第三次次递归回调到第二次递归时,数组里的变量也会回退到第二次的情况,但是为什么List列表不会回退到第二次呢,而是不管递归了多少次他都会一直往下记录?

2个回答

请注意,对于引用对象来说,它们无论是几个变量名,都指向同一个对象。
你有两个操作:
(1)将一个引用指向另一个对象,比如
list = new List...
此时再操作的list和原来的没有任何关系了。并且函数实参修改引用不改变形参指向的对象。
(2)通过引用修改对象,比如
list.add(...)
此时通过任何一个引用添加或者修改对象,别的引用访问的对象也会改变,因为只有一个对象,这个修改的不是引用而是对象本身

1 你传的4个参数:
int[] nums,--传址,
int counter, --传值。只有这一个参数才是调用结束后,不会影响到调用它的变量。
List> results,,--传址
List result,--传址
传址只是把对象的地址传给变量,函数内对这个对象进行操作,就会改变这个对象本身的。这个你应该清楚吧。
2 你第一层递归结束后,counter的值消失,与第二层递归计算无关了。
但, nums所指向数组里的元素值如果有改变的话,是会成为改变后的值留下的。 results和 result所指向集合里的元素值有改变或者元素个数有增加删除也是会留下的。
3 你说数组没变应该是你没改变数组内元素的值吧。或者你每次递归都new了一个新的数组对象出来。新new出来的数组对象是和别的调用无关了。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
排序的递归问题:能否用函数指针以及栈代替递归??
最近学习排序,对于快排,归并等处理海量数据效率高的算法很钟意,但是其自身的递归特性有很多缺点,譬如数据量过大时存在溢出的风险,也影响了算法的效率,故想到用栈代替递归这一过程。大致想法就是创建个函数指针类型的栈,然后将每个子排序的函数指针压入其中,然后再一个一个用*解引用来运行函数。当然我知道改成非递归有别的方法,但是可能会比这复杂,就想考虑用栈来实现。我想知道的是,对于快排和归并等递归排序算法,用以上方法实现的话,算法的开销(时间复杂度和空间复杂度),以及实际效率会是如何,有实际意义么。问题描述不全,毕竟第一次在CSDN提问,望前辈们多看看。本人大二,学了c++ java。
java循环匹配递归的问题
wuxian递归的问题 wuxian递归的问题wuxian递归的问题wuxian递归的问题 wuxian递归的问题wuxian递归的问题 wuxian递归的问题 wuxian递归的问题wuxian递归的问题 wuxian递归的问题
汉诺塔问题的递归思想
今天一天主要研究递归问题和递归思想。在网上查了点关于递归思想的程序题看,前几个求阶乘,求和以及求费波拉契数列的递归思想都很简单。但是汉诺塔问题却解决不了。查了查网上的代码,虽然能看懂思想,但是每一步是如何实现递![图片说明](https://img-ask.csdn.net/upload/201701/16/1484575387_201636.png)归的却非常的迷,哪位大神可以帮助我一下,谢谢啦
josephus问题递归求解,函数返回值问题,返回值为none?
# josephus问题递归求解,函数返回值问题 ``` def josephus(args,number):#传入列表和数字 tidailiebiao=[i for i in args]#为了多次调用,使用替代列表 print(tidailiebiao) if(len(tidailiebiao)<number):#递归结束条件 #print(tidailiebiao) #print(len(tidailiebiao)) return tidailiebiao#返回值 else: delete_people=tidailiebiao.pop(number-1)#删除元素 print("remove:%d"%delete_people) tidailiebiao=tidailiebiao[number-1:]+tidailiebiao[:number-1]#生成新列表 josephus(tidailiebiao,number)#递归 test=[i for i in range(1,42)] print(test) print(josephus(test,3))#测试 ``` ![图片说明](https://img-ask.csdn.net/upload/201912/26/1577355089_28075.png) 最后的返回值为none 尝试解决方案,将函数的返回值重新复制给一个新列表,返回新列表,不能解决问题 在函数中加入代码测试发现,当达到返回条件时,返回值不为空 求帮助,多谢各位了
这是一个关于C语言递归的相关问题
递归的应用场景是什么呢? 是不是所有的程序都能转换成递归形式的呢? 递归 只能用在函数内部? return 后面加递归操作行吗
这是一个关于函数递归的相关问题
![图片说明](https://img-ask.csdn.net/upload/201910/26/1572084912_509206.png) 这个例子中,rentun 里出现的递归函数,这是传说中的尾递归吗? 感觉这种递归不会占太多内存。因为执行return 就开始释放内存了。 return +递归函数,这种的 应该是1级函数释放掉,执行2级return 的函数,然后2级return 的函数,释放掉,执行3级的,其实用的差不多都是相同位置的内存,我的理解没错吧
关于String中的一个递归问题
今天学习java String时,遇到书上讲的一个递归问题,先上代码 import java.util.*; public class InfiniteRecursion { public String toStirng() { return "InfiniteRecursion address: "+ this +"\n"; } public static void main(String[] args) { List<InfiniteRecursion> list = new ArrayList<InfiniteRecursion>(); for(int i = 0; i <2; i++) list.add(new InfiniteRecursion()); System.out.println(list); } } 书上讲到在toString()方法里面,编译器会将this转化为String,而转换时会调用toString()方法,这样就产生了递归调用。。我思考了也这么觉得,,但是运行代码时没有报错。把this换成super.toString()也能运行。求请教,为什么没有递归(书上讲的java SE5,我的编译器是1.7的)。
这是一个 关于递归函数和while的问题
递归函数,就是递推,加一个条件,然后就退出的过程。 while(变量)形式,里面是操作,不符合条件就退出的过程。 二者本质完成的功能是一样的,而且递归存在大量占用内存的问题。我觉得递归是没有必要存在的。大佬们,我的理解对吗
悬赏问题,缺B都来!怎么用Java语言递归方法输出99乘法表,要完整的代码
悬赏问题,缺B都来!怎么用Java语言递归方法输出99乘法表,要完整的代码
递归调用循环的非递归形式
背景:之前在算法书上看到说所有的递归算法都可以写成非递归的形式。 那么遍历一个完全树的所有叶子节点,我看过两个算法,一个是递归调用,非常简单。 还有一个使用了队列:(c++ 和伪代码的混合表示) queue.push(root);//根节点进队 while (!queue.isEmpty()) { queue.push(root->left); queue.push(root->right); if (!queue.top()->hasChild()) { print queue.top()->data; } queue.pop(); } 上面的算是非递归形式。 不过我想问的是,是不是说一定需要队列或者堆栈这样的辅助数据结构才能解决该问题? 因为我觉得之前的一些递归算法改成的非递归算法都没有用到什么数据结构。 比如合并排序的非递归形式。用到的仅仅是两个向量而已。 我一直认为递归算法改成非递归形式是有一定的模板可循的。如果辅助数据结构不可避免,是不是意味着所有的递归算法只是理论上可以写成递归形式,至于写不写的出来,还要看个人的数据结构水平?
求解 java 递归问题, 感谢!
数据如下图: ![图片说明](https://img-ask.csdn.net/upload/201612/07/1481118538_103397.jpg) 数组里面可能会有多层数组, 问题: 我在外部接收一下url, 然后递归上图的数据, 如果与数组里的url相同, 那么当前数组以及他的父级、爷级的 "className"属性设置一个值. 整了半天也没想出来, 在此请求各位高手, 感谢!!!!
这是一个关于函数递归的问题
``` #include<stdio.h> #include<conio.h> /*分鱼递归函数*/ int fish(int n, int x) { if((x-1)%5 == 0) { if(n == 1) return 1; /*递归出口*/ else return fish(n-1, (x-1)/5*4); /*递归调用*/ } return 0; /*x不是符合题意的解,返回0*/ } int main() { int i=0, flag=0, x; do { i=i+1; x=i*5+1; /*x最小值为6,以后每次增加5*/ if(fish(5, x)) /*将x传入分鱼递归函数进行检验*/ { flag=1; /*找到第一个符合题意的x则置标志位为1*/ printf("五个人合伙捕到的鱼总数为%d\n", x); } } while(!flag); /*未找到符合题意的x,继续循环,否则退出循环*/ getch(); return 0; } ``` 我调试这个代码 fish函数,调试到return 0的时候,有的时候竟然下一步是else 下面的 return fish(n-1,(x-1)/5*4),,不是main函数,好奇怪
C:用递归及非递归解决迷宫问题
以下是现有的代码,但是递归放在里面出现错误,求大神给我改改。 #include<stdlib.h> #include<stdio.h> #define N 39 #define M 39 int X; int maze[N+2][M+2]; /******递归函数定义*******/ typedef struct { int x,y; }Dj; Dj move[4]; /******非递归函数定义*******/ struct point{ int row,col,predecessor; }queue[512]; int head=0,tail=0; /******* 手动生成迷宫函数**********/ void shoudong_maze(int m,int n) { int i,j; printf("\n\n"); printf("请按行输入迷宫(0表示通路,1表示障碍,不包括墙,中间用空格隔开):\n\n"); for(i=0;i<m+2;i++) for(j=0;j<n+2;j++) scanf("%d",&maze[i][j]); } /******* 自动生成迷宫函数**********/ void zidong_maze(int m,int n) { int i,j; printf("\n迷宫正在生成,请稍后。\n\n"); system("pause"); for(i=1;i<m+1;i++) for(j=1;j<n+1;j++) maze[i][j]=rand()%2; //由于rand()产生的随机数是从0到RAND_MAX(最大) //RAND_MAX是定义在stdlib.h中的,其值至少为32767) //要产生从X到Y的数,只需要这样写:k=rand()%(Y-X+1)+X; for(i=0;i<m+2;i++) { maze[0][i]=1; maze[m+1][i]=1; } for(j=0;j<n+2;j++) { maze[j][0]=1; maze[j][n+1]=1; } } /********将迷宫打印成图形*********/ void print_maze(int m,int n) { int i,j; printf("\n迷宫生成结果如下:\n\n"); printf("迷宫入口(1,1)\n"); printf(" ↓"); for(i=0;i<m+2;i++) { printf("\n"); for(j=0;j<n+2;j++) { if(maze[i][j]==0) printf("□"); if(maze[i][j]==1) printf("■"); } } printf("→\n"); printf("迷宫出口:(%d,%d)\n",m+1,n+1); } /**********打印迷宫路径 (若存在路径)***********/ void result_maze(int m,int n) { int i,j; printf("迷宫通路(用☆表示)如下所示:\n\t"); for(i=0;i<m+2;i++) { printf("\n"); for(j=0;j<n+2;j++) { if(maze[i][j]==0||maze[i][j]==2) printf("□"); if(maze[i][j]==1) printf("■"); if(maze[i][j]==3) printf("☆"); } } } /*******入队*********/ void enqueue(struct point p) { queue[tail]=p; tail++; } /*******出队*********/ struct point dequeue() { head++; return queue[head-1]; } /*******判断队列是否为空*******/ int is_empty() { return head==tail; } /*******访问节点*******/ void visit(int row,int col,int maze[41][41]) { struct point visit_point={row,col,head-1}; maze[row][col]=2; enqueue(visit_point); } /*******探索迷宫路径*******/ int mgpath(int maze[41][41],int m,int n) { int X=1; struct point p={1,1,-1}; if(maze[p.row][p.col]==1) { printf("\n===============================================\n"); printf("此迷宫无解\n\n"); X=0; return 0; } maze[p.row][p.col]=2; enqueue(p); while(!is_empty()) { p=dequeue(); if((p.row==m)&&(p.col==n)) break; if((p.col+1<n)&&(maze[p.row][p.col+1]==0))//右边界 visit(p.row,p.col+1,maze); if((p.row+1<m)&&(maze[p.row+1][p.col]==0))//下边界 visit(p.row+1,p.col,maze); if((p.col-1>=0)&&(maze[p.row][p.col-1]==0)) //左边界 visit(p.row,p.col-1,maze); if((p.row>=0)&&(maze[p.row-1][p.col]==0)) //上边界 visit(p.row-1,p.col,maze); } if(p.row==m-1&&p.col==n-1) { printf("\n==================================================================\n"); printf("迷宫路径为:\n"); printf("(%d,%d)\n",p.row,p.col); maze[p.row][p.col]=3; while(p.predecessor!=-1) { p=queue[p.predecessor]; printf("(%d,%d)\n",p.row,p.col); maze[p.row][p.col]=3; } } else { printf("\n=============================================================\n"); printf("此迷宫无解!\n\n"); X=0; } return 0; } /******递归函数*******/ int path(int maze[][N+2],Dj move[],int x,int y,int step) { int i; step++; maze[x][y]=step; step++; maze[x][y]=step; if(x==M&&y==N) return 1; for(i=0;i<4;i++) { if(maze[x+move[i].x][y+move[i].y]==0) if(path(maze,move,x+move[i].x,y+move[i].y,step)) return 1; } step--; maze[x][y]=0; return 0; } /********主函数********/ void main(void) { Dj move[4]; int maze[N+2][M+2]; int i,h,m,n,cycle=0; while(cycle!=(-1)) { printf("********************************************************************************\n"); printf(" 欢迎进入迷宫求解系统\n"); printf("********************************************************************************\n"); printf(" →_→ 手动生成迷宫 请按:1\n"); printf(" →_→ 自动生成迷宫 请按:2\n"); printf(" →_→ 退出 请按:3\n\n"); printf("********************************************************************************\n"); printf("\n"); printf("请选择你的操作:\n"); scanf("%d",&i); switch(i) { case 1:/*printf("\n请输入行数:"); scanf("%d",&m); printf("\n"); printf("请输入列数:"); scanf("%d",&n); while((m<=0||m>39)||(n<=0||n>39)) { printf("\n抱歉,你输入的行列数超出预设范围(0-39,0-39),请重新输入:\n\n"); printf("请输入行数:"); scanf("%d",&m); printf("\n"); printf("请输入列数:"); scanf("%d",&n); } */ printf("********************************************************************************\n"); printf(" →_→ 递归算法 请按:1\n"); printf(" →_→ 非递归算法 请按:2\n"); printf(" →_→ 退出 请按:3\n\n"); printf("********************************************************************************\n"); printf("\n"); printf("请选择你的操作:\n"); scanf("%d",&h); if(h==1) { printf("\n请输入行数:"); scanf("%d",&m); printf("\n"); printf("请输入列数:"); scanf("%d",&n); while((m<=0||m>39)||(n<=0||n>39)) { printf("\n抱歉,你输入的行列数超出预设范围(0-39,0-39),请重新输入:\n\n"); printf("请输入行数:"); scanf("%d",&m); printf("\n"); printf("请输入列数:"); scanf("%d",&n); } path(maze,move,0,0,0); shoudong_maze(m,n); print_maze(m,n); mgpath(maze,m,n); if(X!=0) result_maze(m,n); printf("\n\nPress Enter Contiue!\n"); getchar(); while(getchar()!='\n');break; } else { shoudong_maze(m,n); print_maze(m,n); mgpath(maze,m,n); if(X!=0) result_maze(m,n); printf("\n\nPress Enter Contiue!\n"); getchar(); while(getchar()!='\n');break; } case 2:printf("\n请输入行数:"); scanf("%d",&m); printf("\n"); printf("请输入列数:"); scanf("%d",&n); while((m<=0||m>39)||(n<=0||n>39)) { printf("\n抱歉,你输入的行列数超出预设范围(0-39,0-39),请重新输入:\n\n"); printf("请输入行数:"); scanf("%d",&m); printf("\n"); printf("请输入列数:"); scanf("%d",&n); } zidong_maze(m,n); print_maze(m,n); mgpath(maze,m,n); if(X!=0) result_maze(m,n); printf("\n\nPress Enter Contiue!\n"); getchar(); while(getchar()!='\n'); break; case 3:cycle=(-1); break; default:printf("\n"); printf("你的输入有误!\n"); printf("\nPress Enter Contiue!\n"); getchar(); while(getchar()!='\n'); break; } } }
关于无限递归的问题。
我在写归并排序时需要写一个递归实现,结果无限递归了,代码类似下面: void fun(int a, int b) { int mid; if (a < b) { mid = (a + b)/2; fun (a,mid); fun (mid,b); } } 我用vS2010试了一下,好像没问题,怎么回事? 求解?
c语言疑似递归与循环小数丢失问题
首先是题目: 问题描述 用递归方法求数列1/3+2/5+3/7+4/9+5/11+6/13+......的和 输入格式 一个正整数n 输出格式 上述数列前n项的和,保留15位小数 样例输入 200 样例输出 98.683296008649080 然后是递归代码: #include<stdio.h> double tg(double d); int main() { double n; scanf("%lf",&n); printf("%.15f\n",tg(n)); } double tg(double d) { if (d<2) return 1./3; else return tg(d-1)+d/(2*d+1); } 而后是循环代码: #include <stdio.h> double a(double n); int main() { int c; double e,d; c=1; e=0; scanf("%lf",&d); for(c=1;c<=d;c++) { e=e+a(c); } printf("%.15lf",e); } double a(double n) { double b; b=n/ (2*n+1); return b; } 输入200 测试结果 递归:98.683296008649094 递推:98.683296008649080 可是我定义数据类型中并没有区别 为何答案会有区别??
函数与递归:搜索单链表最后一个结点
LinkNode * FindRear(LinkNode *f){ if(f==NULL) return NULL; else if(f–>link==NULL) return f; else return FindRear(f->link); }函数体中第二行代码是递归终止条件,第三行是调用自己简化问题。那么第一行代码if(f==NULL) return NULL;是干啥的?可以去掉吗?
关于含递归函数的程序
关于递归有两个问题 1.读递归的程序时怎样做才不容易乱?有没有什么画流程图之类的方法,求指导~ 2.我是c++入门,自己写程序总用不上递归,也不太敢用,想请教一下递归的用法 谢谢各路大神啦!
分治与递归的一个问题!
写分治递归算法,求解这个问题:有一个字符数组,比如aabbbbbc,定义run是连续相同字母组成的字符串,例如这个例子的run分别是aa bbbbb和c一共三个。要求用分治递归求解改字符数组每个run和该字符。还是这个例子,最后应该输出(a,2)(b,5)(c,1) 我的想法是二分法,每次一半一半分,直到分到只剩一个字符,返回(a[i],1),定义一个结构体里面有character和num两个变量,(a[i],1)就对应这两个变量。但是有一个问题当左右两个run的字符相同时需要合并,怎么知道什么时候需要合并呢。还有就是二分法的话返回的可以超过两个吗?比如bbbc,一直分的话返回应该有三个,第一个run是前两个b,第二个run是第三个b 第三个run是c 不知道该怎么做了。求大神帮助啊!!!
求二分查找的递归和非递归的时间空间效率比较
求二分查找的递归和非递归的时间空间效率比较,为什么在刘汝佳的书上说,一般用非递归方法
Java学习的正确打开方式
在博主认为,对于入门级学习java的最佳学习方法莫过于视频+博客+书籍+总结,前三者博主将淋漓尽致地挥毫于这篇博客文章中,至于总结在于个人,实际上越到后面你会发现学习的最好方式就是阅读参考官方文档其次就是国内的书籍,博客次之,这又是一个层次了,这里暂时不提后面再谈。博主将为各位入门java保驾护航,各位只管冲鸭!!!上天是公平的,只要不辜负时间,时间自然不会辜负你。 何谓学习?博主所理解的学习,它是一个过程,是一个不断累积、不断沉淀、不断总结、善于传达自己的个人见解以及乐于分享的过程。
程序员必须掌握的核心算法有哪些?
由于我之前一直强调数据结构以及算法学习的重要性,所以就有一些读者经常问我,数据结构与算法应该要学习到哪个程度呢?,说实话,这个问题我不知道要怎么回答你,主要取决于你想学习到哪些程度,不过针对这个问题,我稍微总结一下我学过的算法知识点,以及我觉得值得学习的算法。这些算法与数据结构的学习大多数是零散的,并没有一本把他们全部覆盖的书籍。下面是我觉得值得学习的一些算法以及数据结构,当然,我也会整理一些看过...
大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了
大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件下载、面试/求职必备网站。 注意:文中提到的所有资源,文末我都给你整理好了,你们只管拿去,如果觉得不错,转发、分享就是最大的支持了。 一、电子书搜索 对于大部分程序员...
linux系列之常用运维命令整理笔录
本博客记录工作中需要的linux运维命令,大学时候开始接触linux,会一些基本操作,可是都没有整理起来,加上是做开发,不做运维,有些命令忘记了,所以现在整理成博客,当然vi,文件操作等就不介绍了,慢慢积累一些其它拓展的命令,博客不定时更新 free -m 其中:m表示兆,也可以用g,注意都要小写 Men:表示物理内存统计 total:表示物理内存总数(total=used+free) use...
比特币原理详解
一、什么是比特币 比特币是一种电子货币,是一种基于密码学的货币,在2008年11月1日由中本聪发表比特币白皮书,文中提出了一种去中心化的电子记账系统,我们平时的电子现金是银行来记账,因为银行的背后是国家信用。去中心化电子记账系统是参与者共同记账。比特币可以防止主权危机、信用风险。其好处不多做赘述,这一层面介绍的文章很多,本文主要从更深层的技术原理角度进行介绍。 二、问题引入 假设现有4个人...
程序员接私活怎样防止做完了不给钱?
首先跟大家说明一点,我们做 IT 类的外包开发,是非标品开发,所以很有可能在开发过程中会有这样那样的需求修改,而这种需求修改很容易造成扯皮,进而影响到费用支付,甚至出现做完了项目收不到钱的情况。 那么,怎么保证自己的薪酬安全呢? 我们在开工前,一定要做好一些证据方面的准备(也就是“讨薪”的理论依据),这其中最重要的就是需求文档和验收标准。一定要让需求方提供这两个文档资料作为开发的基础。之后开发...
网页实现一个简单的音乐播放器(大佬别看。(⊙﹏⊙))
今天闲着无事,就想写点东西。然后听了下歌,就打算写个播放器。 于是乎用h5 audio的加上js简单的播放器完工了。 演示地点演示 html代码如下` music 这个年纪 七月的风 音乐 ` 然后就是css`*{ margin: 0; padding: 0; text-decoration: none; list-...
Python十大装B语法
Python 是一种代表简单思想的语言,其语法相对简单,很容易上手。不过,如果就此小视 Python 语法的精妙和深邃,那就大错特错了。本文精心筛选了最能展现 Python 语法之精妙的十个知识点,并附上详细的实例代码。如能在实战中融会贯通、灵活使用,必将使代码更为精炼、高效,同时也会极大提升代码B格,使之看上去更老练,读起来更优雅。
数据库优化 - SQL优化
以实际SQL入手,带你一步一步走上SQL优化之路!
通俗易懂地给女朋友讲:线程池的内部原理
餐盘在灯光的照耀下格外晶莹洁白,女朋友拿起红酒杯轻轻地抿了一小口,对我说:“经常听你说线程池,到底线程池到底是个什么原理?”
经典算法(5)杨辉三角
杨辉三角 是经典算法,这篇博客对它的算法思想进行了讲解,并有完整的代码实现。
使用 Docker 部署 Spring Boot 项目
Docker 技术发展为微服务落地提供了更加便利的环境,使用 Docker 部署 Spring Boot 其实非常简单,这篇文章我们就来简单学习下。首先构建一个简单的 S...
英特尔不为人知的 B 面
从 PC 时代至今,众人只知在 CPU、GPU、XPU、制程、工艺等战场中,英特尔在与同行硬件芯片制造商们的竞争中杀出重围,且在不断的成长进化中,成为全球知名的半导体公司。殊不知,在「刚硬」的背后,英特尔「柔性」的软件早已经做到了全方位的支持与支撑,并持续发挥独特的生态价值,推动产业合作共赢。 而对于这一不知人知的 B 面,很多人将其称之为英特尔隐形的翅膀,虽低调,但是影响力却不容小觑。 那么,在...
面试官:你连RESTful都不知道我怎么敢要你?
干货,2019 RESTful最贱实践
刷了几千道算法题,这些我私藏的刷题网站都在这里了!
遥想当年,机缘巧合入了 ACM 的坑,周边巨擘林立,从此过上了"天天被虐似死狗"的生活… 然而我是谁,我可是死狗中的战斗鸡,智力不够那刷题来凑,开始了夜以继日哼哧哼哧刷题的日子,从此"读题与提交齐飞, AC 与 WA 一色 ",我惊喜的发现被题虐既刺激又有快感,那一刻我泪流满面。这么好的事儿作为一个正直的人绝不能自己独享,经过激烈的颅内斗争,我决定把我私藏的十几个 T 的,阿不,十几个刷题网...
白话阿里巴巴Java开发手册高级篇
不久前,阿里巴巴发布了《阿里巴巴Java开发手册》,总结了阿里巴巴内部实际项目开发过程中开发人员应该遵守的研发流程规范,这些流程规范在一定程度上能够保证最终的项目交付质量,通过在时间中总结模式,并推广给广大开发人员,来避免研发人员在实践中容易犯的错误,确保最终在大规模协作的项目中达成既定目标。 无独有偶,笔者去年在公司里负责升级和制定研发流程、设计模板、设计标准、代码标准等规范,并在实际工作中进行...
SQL-小白最佳入门sql查询一
不要偷偷的查询我的个人资料,即使你再喜欢我,也不要这样,真的不好;
redis分布式锁,面试官请随便问,我都会
文章有点长并且绕,先来个图片缓冲下! 前言 现在的业务场景越来越复杂,使用的架构也就越来越复杂,分布式、高并发已经是业务要求的常态。像腾讯系的不少服务,还有CDN优化、异地多备份等处理。 说到分布式,就必然涉及到分布式锁的概念,如何保证不同机器不同线程的分布式锁同步呢? 实现要点 互斥性,同一时刻,智能有一个客户端持有锁。 防止死锁发生,如果持有锁的客户端崩溃没有主动释放锁,也要保证锁可以正常释...
项目中的if else太多了,该怎么重构?
介绍 最近跟着公司的大佬开发了一款IM系统,类似QQ和微信哈,就是聊天软件。我们有一部分业务逻辑是这样的 if (msgType = "文本") { // dosomething } else if(msgType = "图片") { // doshomething } else if(msgType = "视频") { // doshomething } else { // doshom...
Nginx 原理和架构
Nginx 是一个免费的,开源的,高性能的 HTTP 服务器和反向代理,以及 IMAP / POP3 代理服务器。Nginx 以其高性能,稳定性,丰富的功能,简单的配置和低资源消耗而闻名。 Nginx 的整体架构 Nginx 里有一个 master 进程和多个 worker 进程。master 进程并不处理网络请求,主要负责调度工作进程:加载配置、启动工作进程及非停升级。worker 进程负责处...
“狗屁不通文章生成器”登顶GitHub热榜,分分钟写出万字形式主义大作
一、垃圾文字生成器介绍 最近在浏览GitHub的时候,发现了这样一个骨骼清奇的雷人项目,而且热度还特别高。 项目中文名:狗屁不通文章生成器 项目英文名:BullshitGenerator 根据作者的介绍,他是偶尔需要一些中文文字用于GUI开发时测试文本渲染,因此开发了这个废话生成器。但由于生成的废话实在是太过富于哲理,所以最近已经被小伙伴们给玩坏了。 他的文风可能是这样的: 你发现,...
程序员:我终于知道post和get的区别
是一个老生常谈的话题,然而随着不断的学习,对于以前的认识有很多误区,所以还是需要不断地总结的,学而时习之,不亦说乎
《程序人生》系列-这个程序员只用了20行代码就拿了冠军
你知道的越多,你不知道的越多 点赞再看,养成习惯GitHub上已经开源https://github.com/JavaFamily,有一线大厂面试点脑图,欢迎Star和完善 前言 这一期不算《吊打面试官》系列的,所有没前言我直接开始。 絮叨 本来应该是没有这期的,看过我上期的小伙伴应该是知道的嘛,双十一比较忙嘛,要值班又要去帮忙拍摄年会的视频素材,还得搞个程序员一天的Vlog,还要写BU...
加快推动区块链技术和产业创新发展,2019可信区块链峰会在京召开
11月8日,由中国信息通信研究院、中国通信标准化协会、中国互联网协会、可信区块链推进计划联合主办,科技行者协办的2019可信区块链峰会将在北京悠唐皇冠假日酒店开幕。   区块链技术被认为是继蒸汽机、电力、互联网之后,下一代颠覆性的核心技术。如果说蒸汽机释放了人类的生产力,电力解决了人类基本的生活需求,互联网彻底改变了信息传递的方式,区块链作为构造信任的技术有重要的价值。   1...
Java世界最常用的工具类库
Apache Commons Apache Commons有很多子项目 Google Guava 参考博客
程序员把地府后台管理系统做出来了,还有3.0版本!12月7号最新消息:已在开发中有github地址
第一幕:缘起 听说阎王爷要做个生死簿后台管理系统,我们派去了一个程序员…… 996程序员做的梦: 第一场:团队招募 为了应对地府管理危机,阎王打算找“人”开发一套地府后台管理系统,于是就在地府总经办群中发了项目需求。 话说还是中国电信的信号好,地府都是满格,哈哈!!! 经常会有外行朋友问:看某网站做的不错,功能也简单,你帮忙做一下? 而这次,面对这样的需求,这个程序员...
网易云6亿用户音乐推荐算法
网易云音乐是音乐爱好者的集聚地,云音乐推荐系统致力于通过 AI 算法的落地,实现用户千人千面的个性化推荐,为用户带来不一样的听歌体验。 本次分享重点介绍 AI 算法在音乐推荐中的应用实践,以及在算法落地过程中遇到的挑战和解决方案。 将从如下两个部分展开: AI算法在音乐推荐中的应用 音乐场景下的 AI 思考 从 2013 年 4 月正式上线至今,网易云音乐平台持续提供着:乐屏社区、UGC...
【技巧总结】位运算装逼指南
位算法的效率有多快我就不说,不信你可以去用 10 亿个数据模拟一下,今天给大家讲一讲位运算的一些经典例子。不过,最重要的不是看懂了这些例子就好,而是要在以后多去运用位运算这些技巧,当然,采用位运算,也是可以装逼的,不信,你往下看。我会从最简单的讲起,一道比一道难度递增,不过居然是讲技巧,那么也不会太难,相信你分分钟看懂。 判断奇偶数 判断一个数是基于还是偶数,相信很多人都做过,一般的做法的代码如下...
为什么要学数据结构?
一、前言 在可视化化程序设计的今天,借助于集成开发环境可以很快地生成程序,程序设计不再是计算机专业人员的专利。很多人认为,只要掌握几种开发工具就可以成为编程高手,其实,这是一种误解。要想成为一个专业的开发人员,至少需要以下三个条件: 1) 能够熟练地选择和设计各种数据结构和算法 2) 至少要能够熟练地掌握一门程序设计语言 3) 熟知所涉及的相关应用领域的知识 其中,后两个条件比较容易实现,而第一个...
Android 9.0 init 启动流程
阅读五分钟,每日十点,和您一起终身学习,这里是程序员Android本篇文章主要介绍Android开发中的部分知识点,通过阅读本篇文章,您将收获以下内容:一、启动流程概述一、 启动流程概述Android启动流程跟Linux启动类似,大致分为如下五个阶段。1.开机上电,加载固化的ROM。2.加载BootLoader,拉起Android OS。3.加载Uboot,初始外设,引导Kernel启动等。...
相关热词 c#交错数组 c# task停止 c#使用mongodb c#入门经典第七版 c#设置超时程序 c#一个日期格式加上时分 c# 按行读取excel c#画图固定 c# 读取dataset 如何c#按钮透明
立即提问