- 浏览: 798618 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (651)
- Java (39)
- Java 初学者小问题 (66)
- 设计模式 (7)
- 项目管理 (3)
- 数据库 (1)
- 算法 (2)
- Java practices (6)
- Effective Java2读书笔记 (78)
- Linux (2)
- programming ruby 读书笔记 (5)
- Core Java Ninth Edition Volume I 读书笔记 (15)
- Pro Git 读书笔记 (12)
- Git (3)
- Maven in Action 读书笔记 (20)
- Web (12)
- 非技术类书籍 (11)
- 电影 (40)
- Web Cache (1)
- jquery (0)
- 历史 (4)
- Dive Into HTML5 读书笔记 (13)
- 三国演义小学毕业考 (79)
- 高效能人士的7个习惯 读书笔记 (12)
- Java Performance 读书笔记 (3)
- Protocol Buffer 学习笔记 (6)
- Mongo DB 学习笔记 (7)
- Morphia 学习笔记 (7)
- Algorithms -- Princeton 学习笔记 (13)
- String研究 (10)
- Hadoop: The Definitive Guide 读书笔记 (3)
- Java与模式读书笔记 (5)
- Date研究 (3)
- The Roman Empire 听课笔记 (4)
- Algorithms -- Standford 学习笔记 (16)
- Core Java Ninth Edition Volume II 读书笔记 (9)
- Thinking in Java 4th Edition 读书笔记 (21)
- Node : Up and Running 学习笔记 (5)
- Eloquent Javascript (8)
- Smashing Node.js 读书笔记 (1)
- Algorithms II -- Standford 学习笔记 (19)
- Algorithm II -- Princeton 学习笔记 (14)
- 网络安全 (2)
- Javascript (4)
- 正则表达式 (1)
- JAVA 7/8 (15)
- JVM (10)
- NodeJS (1)
- 鸟哥的linux私房菜读书笔记 (14)
- Web Service (1)
- The art of programming (9)
- Introduction to Algorithm 读书笔记 (4)
- Java 源码阅读 (0)
- Spring in Action 读书笔记 (2)
- Java Network Programming 读书笔记 (2)
最新评论
-
心存高远:
谢谢作者分享,刚好看到这里不太明白,现在茅塞顿开。不过runt ...
关于 Maven的传递依赖的理解 -
sxlkk:
851228082 写道甚至在某次技术会议现场遇到《Maven ...
关于 Maven的传递依赖的理解 -
851228082:
851228082 写道a----compile----b-- ...
第五章 坐标和依赖 -
851228082:
a----compile----b-----provided- ...
第五章 坐标和依赖 -
851228082:
甚至在某次技术会议现场遇到《Maven in action》的 ...
关于 Maven的传递依赖的理解
今天听一友人说了一道在google的面试题,题目是这样的:有一个M*N的矩阵,要求你以“Z”字型遍历矩阵。
例如,如果输入为 5 * 10的矩阵:
[00, 02, 03, 09, 10, 19, 20, 29, 30, 39]
[01, 04, 08, 11, 18, 21, 28, 31, 38, 40]
[05, 07, 12, 17, 22, 27, 32, 37, 41, 46]
[06, 13, 16, 23, 26, 33, 36, 42, 45, 47]
[14, 15, 24, 25, 34, 35, 43, 44, 48, 49]
则输出为: 00 , 01 , 02 .... 48, 49。
再如,如果输入为 10 * 8 的矩阵:
[00, 02, 03, 09, 10, 20, 21, 35]
[01, 04, 08, 11, 19, 22, 34, 36]
[05, 07, 12, 18, 23, 33, 37, 51]
[06, 13, 17, 24, 32, 38, 50, 52]
[14, 16, 25, 31, 39, 49, 53, 64]
[15, 26, 30, 40, 48, 54, 63, 65]
[27, 29, 41, 47, 55, 62, 66, 73]
[28, 42, 46, 56, 61, 67, 72, 74]
[43, 45, 57, 60, 68, 71, 75, 78]
[44, 58, 59, 69, 70, 76, 77, 79]
则输出为:00, 01, 02, ... , 77, 78, 79。
觉得不是很难,友人也这样觉得,但却在这一轮被淘汰了,不知道是什么地方欠考虑呢,还是google的面试官比较挑剔:P 现将算法贴在下面,请大侠指教。这里稍稍做了一点变化:
1)为了省去输入矩阵数据的麻烦,直接就将遍历矩阵改成了输出遍历顺序,也就是说:
输入为矩阵的维度M,N 比如5*10,输出则为如下形式的矩阵:
[00, 02, 03, 09, 10, 19, 20, 29, 30, 39]
[01, 04, 08, 11, 18, 21, 28, 31, 38, 40]
[05, 07, 12, 17, 22, 27, 32, 37, 41, 46]
[06, 13, 16, 23, 26, 33, 36, 42, 45, 47]
[14, 15, 24, 25, 34, 35, 43, 44, 48, 49]
我想这和原来的问题是等价的。
2)其实为了输出美观,做了一些处理,比如像上面这个例子,由于最大的是两位数,所以一位数前都加了0保证矩阵输出的美观性。
/* * Tranverse a matrix in a "Z" shape. */ import java.util.Arrays; public class TranverseMatrix { public static int M = 5; public static int N = 10; //用于计算输出的矩阵中元素的位数,用于格式化数据,使得输出矩阵中的所有数字位数都相同 public static int bits = 1; /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub String[][] matrix = new String[M][N]; //初始化bits initBits(); int x = 0; int y = -1; int deltax = 0; int deltay = 0; //x代表横坐标也就是列,y代表纵坐标也就是行 for (int k = 0; k < M * N; k++) { x += deltax; y += deltay; //当遍历超出下边界的情况 if (y >= M ) { deltax = 1; deltay = -1; x += 2; y = M -1; } //当遍历超出右边界的情况 else if ( x >= N) { deltax = -1; deltay = 1; x = N -1; y += 2; } //当遍历超出左边界的情况 else if (x < 0) { deltax = 1; deltay = -1; x = 0; } //当遍历超出上边界的情况 else if (y < 0) { deltax = -1; deltay = 1; y = 0; } //在相应位置赋值代表遍历顺序,赋值前先格式化一下数据 matrix[y][x] = getStringValue(k); } for (int index = 0 ; index < matrix.length ; index ++ ) System.out.println(Arrays.toString(matrix[index])); } public static void initBits() { int temp = M * N -1 ; while (temp >= 10) { bits *= 10; temp /= 10; } } public static String getStringValue ( int k ) { StringBuffer result = new StringBuffer(""); int temp = bits; while ( k < temp && temp > 1) { result.append('0'); temp /= 10; } result.append(k); return result.toString(); } }
评论
using System;
using System.Collections.Generic;
using System.Text;
namespace z字型穿梭
{
class Program
{
static void Main(string[] args)
{
string[,] zjz =
{
{"00","02","03","09","10","19","20","29","30","39"},
{"01","04","08","11","18","21","28","31","38","40"},
{"05","07","12","17","22","27","32","37","41","46"},
{"06","13","16","23","26","33","36","42","45","47"},
{"14","15","24","25","34","35","43","44","48","49"}
//{"00","02","03","09","10","19","20","29","30","39"},
//{"01","04","08","11","18","21","28","31","38","40"},
//{"05","07","12","17","22","27","32","37","41","46"},
//{"06","13","16","23","26","33","36","42","45","47"},
//{"14","15","24","25","34","35","43","44","48","49"},
//{"00","02","03","09","10","19","20","29","30","39"},
//{"01","04","08","11","18","21","28","31","38","40"},
//{"05","07","12","17","22","27","32","37","41","46"},
//{"06","13","16","23","26","33","36","42","45","47"},
//{"14","15","24","25","34","35","43","44","48","49"}
};
int x = zjz.GetLength(0)-1;
int y = zjz.GetLength(1)-1;
int i = 0, j = 0, k = 0;//i,j为数组下标变量,k为遍历方向变量
for (; i <=x & j <= y; )
{
Console.Write(zjz[i, j]+" ");
if (i == 0 || j==y)//判断边界为上边界和右边界
{
k = 1;//改变变量k
if (j == 0)//判断是否为第一点,是,则为左边界,改变量k=-1
{
i = i + k;
k = -1;
}
else if (j == y)
i = i + k;
else
j = j + k;
Console.Write("\n" + zjz[i, j]+" ");
}
else if (i == x || j == 0)//判断边界为左边界和右边界,改变量k=1
{
k = -1;
if (i == x)
j = j - k;
else if (i != x)
i = i - k;
Console.Write("\n" + zjz[i, j]+" ");
}
//根据方向变量k值改变数组下标i、j值
i = i + k >= 0 ? i + k : 0;
j = j - k >= 0 ? j - k : 0;
}
Console.Read();
}
}
}
只是一些辅助函数却写得比较破。
initBits(){ return String.valueOf(size).length(); } getStringValue ( int k ) { NumberFormat nf = NumberFormat.getInstance(); nf.setMinimumIntegerDigits(bits); nf.setGroupingUsed(false); System.out.println(nf.format(k)); }
用了1小时左右
public class TestZ
{
private static int M = 5;
private static int N = 10;
public static void main(String[] args)
{
String[][] matrix = new String[M][N];
for (int i = 0; i < M; i++)
{
for (int j = 0; j < N; j++)
{
matrix[i][j] = (Math.random() + "").split("\\.")[1].substring(0,
3);
System.out.print(matrix[i][j] + " ");
}
System.out.println("");
}
System.out.println("");
for (int k = 0; k < M + N - 1; k++)
{
if (k % 2 != 0)
{
for (int m = (k < N ? 0 : k - N + 1); m <= (k >= M ? M - 1 : k); m++)
{
System.out.print(matrix[m][k - m] + " ");
}
}
else
{
for (int m = (k >= M ? M - 1 : k); m >= (k < N ? 0 : k - N + 1); m--)
{
System.out.print(matrix[m][k - m] + " ");
}
}
System.out.println("");
}
}
}
,耐力可嘉,你的输出样式挺逗的
其实就是按斜线输出的
,耐力可嘉,你的输出样式挺逗的
下面是运行结果:
please define M < N ..
init date..
10,11,12,13,14,15,16,17,18,19,
20,21,22,23,24,25,26,27,28,29,
30,31,32,33,34,35,36,37,38,39,
40,41,42,43,44,45,46,47,48,49,
50,51,52,53,54,55,56,57,58,59,
60,61,62,63,64,65,66,67,68,69,
70,71,72,73,74,75,76,77,78,79,
80,81,82,83,84,85,86,87,88,89,
according to Z output..
10;
11;20;
30;21;12;
13;22;31;40;
50;41;32;23;14;
15;24;33;42;51;60;
70;61;52;43;34;25;16;
17;26;35;44;53;62;71;80;
81;72;63;54;45;36;27;18;
19;28;37;46;55;64;73;82;
83;74;65;56;47;38;29;
39;48;57;66;75;84;
85;76;67;58;49;
59;68;77;86;
87;78;69;
79;88;
89;
/* * * @(#)GoogleTest.java Created on Oct 25, 2010 * * Copyright 2004-2005 . author:hackpro * * Description * * CopyrightVersion * */ package com.huawei.iread.ieach; public class GoogleTest { /* * Tranverse a matrix in a "Z" shape. * */ public static int M = 8; public static int N = 10; public static String[][] matrix = new String[M][N]; /** * @param args */ public static void main(String[] args) { if (M > N) { System.out.println("please define M < N .."); return; } System.out.println("init date.."); initArray(); System.out.println(" according to Z output.. "); for (int i = 0; i < N + M; i++) { reduce(i); } } public static void initArray() { int x = 0; for (int i = 0; i < M; i++) { //为以好看,都用两位数的 for (int j = 0; j < N; j++) { matrix[i][j] = x + 10 + ""; System.out.print(x + 10 + ","); x++; } System.out.println(""); } } public static void reduce(int end) { int i = 0; int x = 0; do { x = end - i; if (x < 0) { x = 0; } if (x > N) { x = N; } if (end % 2 == 1) { if (i >= M || x >= N) { } else { System.out.print(matrix[i][x] + ";"); } } else { if (x >= M || i >= N) { } else { System.out.print(matrix[x][i] + ";"); } } i++; } while (i <= end); System.out.println(); } }
/** * z read array * @date 2010-10-23 15:30 * @author kuchaguangjie * @blog http://kuchaguangjie.iteye.com */ var arr_one = [ [ 0, 2, 3, 9, 10, 19, 20, 29, 30, 39], [ 1, 4, 8, 11, 18, 21, 28, 31, 38, 40], [ 5, 7, 12, 17, 22, 27, 32, 37, 41, 46], [ 6, 13, 16, 23, 26, 33, 36, 42, 45, 47], [14, 15, 24, 25, 34, 35, 43, 44, 48, 49 ] ]; var arr_two= [ [ 0, 2, 3, 9, 10, 20, 21, 35], [ 1, 4, 8, 11, 19, 22, 34, 36], [ 5, 7, 12, 18, 23, 33, 37, 51], [ 6, 13, 17, 24, 32, 38, 50, 52], [14, 16, 25, 31, 39, 49, 53, 64], [15, 26, 30, 40, 48, 54, 63, 65], [27, 29, 41, 47, 55, 62, 66, 73], [28, 42, 46, 56, 61, 67, 72, 74], [43, 45, 57, 60, 68, 71, 75, 78], [44, 58, 59, 69, 70, 76, 77, 79] ]; function zRead(arr) { // 行数 var rowCount = arr.length; // 列数 var colCount = arr[0].length; // 是否 row 长 var isRow = rowCount > colCount; // 斜切次数 var cut = rowCount + colCount - 1; // rowLength & colLength 中的最小值 var smaller = isRow ? colCount : rowCount; // 结果 var result = []; // 上 或 右 点 var topOrRightPoint; // 左 或 下 点 var leftOrBottomPoint; for ( var i = 0; i < cut; i++) { // 斜线超出 row 的长度 var rowExtraCount = (i + 1) > rowCount ? (i + 1 - rowCount) : 0; // 斜线超出 col 的长度 var colExtraCount = (i + 1) > colCount ? (i + 1 - colCount) : 0; // 斜线长度 var len = (i + 1) - rowExtraCount - colExtraCount; topOrRightPoint = new Point(colExtraCount, i - colExtraCount); leftOrBottomPoint = new Point(i - rowExtraCount, rowExtraCount); if (i % 2 == 0) { // 由 top 向 leftOrBottom 读数据 while (len-- > 0) { result[result.length] = arr[leftOrBottomPoint.rowIndex - len][leftOrBottomPoint.colIndex + len]; } } else { // 由 left 向 topOrRight 读数据 while (len-- > 0) { result[result.length] = arr[topOrRightPoint.rowIndex + len][topOrRightPoint.colIndex - len]; } } } return result; } /** * 行列中的 1个点的位置 * * @param rowIndex * 行 index * @param colIndex * 列 index * @return */ function Point(rowIndex, colIndex) { this.rowIndex = rowIndex; this.colIndex = colIndex; }
* html 测试文件
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <script type="text/javascript" src="js/z_read.js"></script> <script type="text/javascript"> function showResult(arr){ document.getElementById('resultDiv').innerHTML=zRead(arr); } </script> </head> <body> <input type="button" value="z_read 1" onclick="showResult(arr_one);" /> <input type="button" value="z_read 2" onclick="showResult(arr_two);" /> <div id="resultDiv" style="width: 300px;border:1px solid green;overflow: scroll;"> </div> </body> </html>
慢慢理解,呵呵~~
我写了个通用的实现,使用 javascript 实现的,
在:
http://kuchaguangjie.iteye.com/blog/792175
领教了 ,原来这个叫左斜切线,这个是线代的内容还是高代的?我忘记了已经:P
不知道左斜切线有些什么应用没?
* js
/** * z read array * @date 2010-10-23 15:30 * @author kuchaguangjie * @blog http://kuchaguangjie.iteye.com */ var arr_one = [ [ 0, 2, 3, 9, 10, 19, 20, 29, 30, 39], [ 1, 4, 8, 11, 18, 21, 28, 31, 38, 40], [ 5, 7, 12, 17, 22, 27, 32, 37, 41, 46], [ 6, 13, 16, 23, 26, 33, 36, 42, 45, 47], [14, 15, 24, 25, 34, 35, 43, 44, 48, 49 ] ]; var arr_two= [ [ 0, 2, 3, 9, 10, 20, 21, 35], [ 1, 4, 8, 11, 19, 22, 34, 36], [ 5, 7, 12, 18, 23, 33, 37, 51], [ 6, 13, 17, 24, 32, 38, 50, 52], [14, 16, 25, 31, 39, 49, 53, 64], [15, 26, 30, 40, 48, 54, 63, 65], [27, 29, 41, 47, 55, 62, 66, 73], [28, 42, 46, 56, 61, 67, 72, 74], [43, 45, 57, 60, 68, 71, 75, 78], [44, 58, 59, 69, 70, 76, 77, 79] ]; function zRead(arr) { // 行数 var rowCount = arr.length; // 列数 var colCount = arr[0].length; // 是否 row 长 var isRow = rowCount > colCount; // 斜切次数 var cut = rowCount + colCount - 1; // rowLength & colLength 中的最小值 var smaller = isRow ? colCount : rowCount; // 结果 var result = []; // 上 或 右 点 var topOrRightPoint; // 左 或 下 点 var leftOrBottomPoint; for ( var i = 0; i < cut; i++) { // 斜线超出 row 的长度 var rowExtraCount = (i + 1) > rowCount ? (i + 1 - rowCount) : 0; // 斜线超出 col 的长度 var colExtraCount = (i + 1) > colCount ? (i + 1 - colCount) : 0; // 斜线长度 var len = (i + 1) - rowExtraCount - colExtraCount; topOrRightPoint = new Point(colExtraCount, i - colExtraCount); leftOrBottomPoint = new Point(i - rowExtraCount, rowExtraCount); if (i % 2 == 0) { // 由 top 向 leftOrBottom 读数据 while (len-- > 0) { result[result.length] = arr[leftOrBottomPoint.rowIndex - len][leftOrBottomPoint.colIndex + len]; } } else { // 由 left 向 topOrRight 读数据 while (len-- > 0) { result[result.length] = arr[topOrRightPoint.rowIndex + len][topOrRightPoint.colIndex - len]; } } } return result; } /** * 行列中的 1个点的位置 * * @param rowIndex * 行 index * @param colIndex * 列 index * @return */ function Point(rowIndex, colIndex) { this.rowIndex = rowIndex; this.colIndex = colIndex; }
* html 测试文件
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <script type="text/javascript" src="js/z_read.js"></script> <script type="text/javascript"> function showResult(arr){ document.getElementById('resultDiv').innerHTML=zRead(arr); } </script> </head> <body> <input type="button" value="z_read 1" onclick="showResult(arr_one);" /> <input type="button" value="z_read 2" onclick="showResult(arr_two);" /> <div id="resultDiv" style="width: 300px;border:1px solid green;overflow: scroll;"> </div> </body> </html>
我写了个通用的实现,使用 javascript 实现的,
在:
http://kuchaguangjie.iteye.com/blog/792175
for (int k = 0; k < M * N; k++) {
这个循环每次比较K的时候都要去求M*N的结果,乘法的开销稍微有点大,M*N的结果先算好放着可能比较好。
有道理 这个确实可以改进的 不知道编译器对这种情况会不会去优化噢?
for (int k = 0; k < M * N; k++) {
这个循环每次比较K的时候都要去求M*N的结果,乘法的开销稍微有点大,M*N的结果先算好放着可能比较好。
for (int k = 0; k < M * N; k++) ,你这个代码无论怎样都要循环M*N次吧?还有谁能清楚你这个for循环是干什么的
你考虑一下如何减少你循环的次数。
对于2纬数组,你为什么只考虑一个for循环?你的M*N次循环是必须的吗?你这个代码是实现了功能,但是并不是最优化的结果,你算一下你的矩阵100*100遍历一次总共用多长时间。
为什么不考虑嵌套一个循环
行,我一定把我的完整代码给你写出来。并让它运行。我用两个嵌套循环的运算速度,我敢保证我的运行速度一定比你目前的代码运行速度快。
这个题考你的是"Z"字型遍历矩阵,他考你是一个算法。虽然你的算法功能实现了,但是这个代码不是最优的算法。你去查看一下算法方面的书。一个好的算法需要哪几个条件。
要打印这个这个举证,至少也得遍历这个矩阵的每个元素吧。
看来我是孤陋寡闻了,我比较好奇不【遍历】这个矩阵就能打印出这个矩阵的方法。
还有我期待你的完整代码。
PS:我没运行过楼主程序,就从楼主的程序来看,循环的次数是M*N,就从复杂度来讲已经最优了,唯一不足的可能就是要比较稍微多了点,或许有更巧妙的方法避免那么多的IF语句,
for (int k = 0; k < M * N; k++) ,你这个代码无论怎样都要循环M*N次吧?还有谁能清楚你这个for循环是干什么的
你考虑一下如何减少你循环的次数。
对于2纬数组,你为什么只考虑一个for循环?你的M*N次循环是必须的吗?你这个代码是实现了功能,但是并不是最优化的结果,你算一下你的矩阵100*100遍历一次总共用多长时间。
为什么不考虑嵌套一个循环
行,我一定把我的完整代码给你写出来。并让它运行。我用两个嵌套循环的运算速度,我敢保证我的运行速度一定比你目前的代码运行速度快。
这个题考你的是"Z"字型遍历矩阵,他考你是一个算法。虽然你的算法功能实现了,但是这个代码不是最优的算法。你去查看一下算法方面的书。一个好的算法需要哪几个条件。
quda兄,不要激动,我没有任何要challenge你的意思,只是希望你能指出我不足的地方,从而自己有个提高。
首先M*N的矩阵有 M*N个元素,我循环M*N次也没什么奇怪呀?复杂度是 O(M*N),你写两层循环不见得就复杂度低了吧?这和循环层数有什么任何关系么?
其次,如果你不清楚这个for循环是干什么的话,请不要武断地说别人都不清楚 没个人的思维能力是不同的。
再其次,我从来不觉得我写的code会是性能最优的,我想只有无知的人才会觉得自己写的程序是性能最优的。我之所以写这篇文章就是希望高手告诉我,我的问题在哪里,我好改进和学习。
最后,也真的很想请您赐教一下,好的算法需要哪几个条件?以及您认为的这个题的最优算法是怎样的 但我还是要强调一点,在一个大的项目里,程序的逻辑清晰与可读性是很重要的,并不是所有的标准都向性能看齐的,谢谢
相关推荐
python面试题-2023(面试).docxpython面试题-2023(面试).docxpython面试题-2023(面试).docxpython面试题-2023(面试).docxpython面试题-2023(面试).docxpython面试题-2023(面试).docxpython面试题-2023(面试)....
上海Linux运维工程师-面试题-个人总结).docx上海Linux运维工程师-面试题-个人总结).docx上海Linux运维工程师-面试题-个人总结).docx上海Linux运维工程师-面试题-个人总结).docx上海Linux运维工程师-面试题-个人总结)...
Shopee前端面试岗-面试题-历年面经 Shopee前端面试岗-面试题-历年面经 Shopee前端面试岗-面试题-历年面经 Shopee前端面试岗-面试题-历年面经 Shopee 前端岗开发面经汇总 本系列将提供Shopee 前端岗位历年面经,所有...
尚硅谷Java技术之高频面试题-v6.0
谷歌面试题解析 本资源摘要信息中,我们将对谷歌面试题进行详细的解析和知识点总结。 知识点1:数据库基本操作 在面试题中,我们可以看到基本的数据库操作命令,如create database、use database、create table、...
"算法大全-面试题-链表-栈-二叉树-数据结构"这个压缩包文件提供了丰富的知识资源,旨在帮助学习者深入理解和应用这些核心概念。 链表是一种线性数据结构,与数组不同,它的元素在内存中不是连续存储的。链表由一...
性能测试面试题宝典--覆盖大部分性能专项面试题性能测试面试题宝典--覆盖大部分性能专项面试题性能测试面试题宝典--覆盖大部分性能专项面试题性能测试面试题宝典--覆盖大部分性能专项面试题性能测试面试题宝典--覆盖...
java数据库面试题--个人专用java数据库面试题--个人专用java数据库面试题--个人专用java数据库面试题--个人专用java数据库面试题--个人专用java数据库面试题--个人专用
假如你现在有一只小兔子,第四年的时候开始生小兔,以后每年生一只,假设生的都是母兔。请问第N年的时候你有多少兔子
文档web前端笔试题-面试题-复习题文档web前端笔试题-面试题-复习题
04-Java必知必会108题01-Java公司面试真题 02-Java面试文档 03-大数据面试文档 04-Java必知必会108题01-Java公司面试真题 02-Java面试文档 03-大数据面试文档 04-Java必知必会108题01-Java公司面试真题 02-Java面试...
最新各大公司企业真实面试题-面试题(信然公司).doc最新各大公司企业真实面试题-面试题(信然公司).doc最新各大公司企业真实面试题-面试题(信然公司).doc
"Java 面试题及其答案.doc"和"JAVA面试题.doc"提供了大量的面试题及解答,涵盖了从基础知识到高级特性的广泛范围,包括反射、注解、设计模式、Spring框架、数据库操作等。通过这些题目,求职者可以自我评估,了解...
因为字数限制 下面目录只是部分 大厂面试题第一季-阿里篇-001-P7程序员面试这样解题数据库索引-1.mp4 大厂面试题第一季-阿里篇-001-P7程序员面试这样解题数据库索引-2.mp4 大厂面试题第一季-阿里篇-001-P7程序员...
因为字数限制 下面目录只是部分 大厂面试题第一季-阿里篇-001-P7程序员面试这样解题数据库索引-1.mp4 大厂面试题第一季-阿里篇-001-P7程序员面试这样解题数据库索引-2.mp4 大厂面试题第一季-阿里篇-001-P7程序员...
因为字数限制 下面目录只是部分 大厂面试题第一季-阿里篇-001-P7程序员面试这样解题数据库索引-1.mp4 大厂面试题第一季-阿里篇-001-P7程序员面试这样解题数据库索引-2.mp4 大厂面试题第一季-阿里篇-001-P7程序员...
java程序员面试题150例 java常见面试题 java工程师面试题 java面试题大全 带搜索功能,能非常方便的查找到你想要了解的 java面试题目 推荐大家下载。
java私塾面试题----SQL语句1 共3个
web前端面试题-面试题答案