DataTable使用详解
Java架构进阶面试及知识点文档笔记这份文档共498页,其中包括Java集合,并发编程,JVM,Dubbo,Redis,Spring全家桶,MySQL,Kafka等面试解析及知识点整理Java分布式高级面试问题解析文档其中都是包括分布式的面试问题解析,内容有分布式消息队列,Redis缓存,分库分表,微服务架构,分布式高可用,读写分离等等!互联网Java程序员面试必备问题解析及文档学习笔记Java架
/*
-
sDom
-
默认值为lfrtip (when bJQueryUI is false) or <"H"lfr>t<"F"ip> (when bJQueryUI is true)
-
该初始化属性用来指定你想把各种控制组件注入到dom节点的位置(比如你想把分页组件放到表格的顶部)
-
DIV元素(带或者不带自定的class)可以添加目标样式,下列语法被使用
-
可供使用的选项
-
'l' - 长度改变
-
'f' - 过滤输入
-
't' - 表格
-
'i' - 信息
-
'p' - 分页
-
'r' - 处理
-
可供使用的常量
-
'H' - jQueryUI theme "header" classes('fg-toolbar ui-widget-header ui-corner-tl ui-corner-tr ui-helper-clearfix')
-
'F' - jQueryUI theme "footer" classes ('fg-toolbar ui-widget-header ui-corner-bl ui-corner-br ui-helper-clearfix')
-
需要的语法
-
'<' 和 '>' - div元素
-
'<"class" and '>' - 带有class属性的div元素
-
'<"#id" and '>' - 带有id属性的div元素
-
例子
-
'<"wrapper"flipt>'
-
'<lf<t>ip>'
*/
$(document).ready(function(){
$(‘#example’).dataTable( {
“sDom”: ‘<"top"i>rt<"bottom"flp><“clear”&lgt;’
});
});
/*
-
sPaginationType
-
默认为two_button
-
DataTable内建了两种交互式分页策略,两个按钮和全页数,展现给终端用户不同的控制方式
-
可以通过API增加策略
*/
$(document).ready(function(){
$(‘#example’).dataTable( {
“sPaginationType”: “full_numbers”
});
})
/*
-
sScrollXInner
-
默认为空字符串,即:无效
-
当横向滚动可用的时候,该属性可以用来强制DataTable的宽度比需要的更长
-
比如你需要表格彼此相隔适宜,该变量可以用来使表格变大,而且强制滚动
-
该该属性可以是css设置,或者一个数字(作为像素量度来使用)
*/
$(document).ready(function(){
$(‘#example’).dataTable( {
“sScrollX”: “100%”,
“sScrollXInner”: “110%”
});
});
/*
-
sServerMethod
-
默认值为GET
-
设置使用Ajax方式调用的服务器端的处理方法或者Ajax数据源的HTTP请求方式
*/
$(document).ready(function(){
$(‘#example’).dataTable({
“bServerSide”: true,
“sAjaxSource”: “scripts/post.php”,
“sServerMethod”: “POST”
});
});
/------------------------------------------------Callback------------------------------------------------/
/*
-
fnCookieCallback
-
无默认值
-
当DataTable的状态保留可用时,自定义被保存的cookie和参数。只要cookie被修改就会调用此方法
-
该方法需要返回一个格式良好的cookie字符串,注意数据对象是以Javascript对象的形式传递进来的,必须转换成字符串,例如JSON格式
*/
$(document).ready(function (){
$(‘#example’).dataTable({
“fnCookieCallback”: function (sName, oData, sExpires, sPath) {
// Customise oData or sName or whatever else here
return sName + “=”+JSON.stringify(oData)+“; expires=” + sExpires +“; path=” + sPath;
}
});
});
/*
-
fnCreatedRow
-
无默认值
-
当一个新的TR元素(并且所有TD子元素被插入)被创建或者被作为一个DOM资源被注册时调用该函数
-
允许操作该TR元素
*/
$(document).ready(function(){
$(‘#example’).dataTable({
“fnCreatedRow”: function( nRow, aData, iDataIndex ){
// Bold the grade for all ‘A’ grade browsers
if ( aData[4] == “A” )
{
$(‘td:eq(4)’, nRow).html( ‘A’ );
}
}
});
});
/*
-
fnDrawCallback
-
无默认值
-
每当draw事件发生时调用该函数,允许你动态编辑新建的dom对象的任何属性
*/
$(document).ready( function(){
$(‘#example’).dataTable({
“fnDrawCallback”: function(){
alert( ‘DataTables has redrawn the table’ );
}
});
});
/*
-
fnFooterCallback
-
无默认值
-
与fnHeaderCallback()完全相同,只是该函数允许你在每一个draw时间发生时修改页脚
*/
$(document).ready( function(){
$(‘#example’).dataTable({
“fnDrawCallback”: function() {
alert( ‘DataTables has redrawn the table’ );
}
});
});
/*
-
fnFormatNumber
-
无默认值
-
当渲染表格信息(例如:显示57条记录中的1-10条)中大的数字时
-
为了方便用户,DataTable会使用逗号分割每千单位(例如1000000会被渲染为1,000,000)
-
该函数会重写DataTable默认使用的策略
*/
$(document).ready(function(){
$(‘#example’).dataTable({
“fnFormatNumber”: function ( iIn ) {
if ( iIn < 1000 ) {
return iIn;
} else {
var
s=(iIn+“”),
a=s.split(“”), out=“”,
iLen=s.length;
for ( var i=0 ; i<iLen ; i++ ) {
if ( i%3 === 0 && i !== 0 ) {
out = “'”+out;
}
out = a[iLen-i-1]+out;
}
}
return out;
};
});
});
/*
-
fnHeaderCallback
-
无默认值
-
每当draw事件发生时调用该函数,允许你动态编辑表头行,可以用来计算和展示关于表格的有用的信息
*/
$(document).ready(function(){
$(‘#example’).dataTable({
“fnFormatNumber”: function ( iIn ) {
if ( iIn < 1000 ) {
return iIn;
} else {
var
s=(iIn+“”),
a=s.split(“”), out=“”,
iLen=s.length;
for ( var i=0 ; i<iLen ; i++ ) {
if ( i%3 === 0 && i !== 0 ) {
out = “'”+out;
}
out = a[iLen-i-1]+out;
}
}
return out;
};
});
});
/*
-
fnInfoCallback
-
无默认值
-
信息元素可以用来传输表格当前状态的信息,尽管DataTable提供的国际化的选项在处理大多数自定义情况时已经相当方便了
-
或许你有时仍然希望自定义深层的字符串,该函数会满足你的需要
*/
$(‘#example’).dataTable( {
“fnInfoCallback”: function( oSettings, iStart, iEnd, iMax, iTotal, sPre ) {
return iStart +" to "+ iEnd;
}
});
/*
-
fnInitComplete
-
无默认值
-
当表格被初始化后调用该函数,通常DataTable会被持续初始化,并不需要该函数
-
可是,当使用异步的XmlHttpRequest从外部获得语言信息时,初始化并不是持续的
*/
$(document).ready( function(){
$(‘#example’).dataTable({
“fnInitComplete”: function(oSettings, json) {
alert( ‘DataTables has finished its initialisation.’ );
}
});
})
/*
-
fnPreDrawCallback
-
无默认值
-
在每一个表格draw事件发生前调用该函数,通过返回false来取消draw事件
-
其它任何的返回值,包括undefined都会导致draw事件的发生
*/
$(document).ready( function(){
$(‘#example’).dataTable({
“fnPreDrawCallback”: function( oSettings ) {
if ( $(‘#test’).val() == 1 ) {
return false;
}
}
});
});
/*
-
fnRowCallback
-
无默认值
-
你可以通过该函数在每一个表格绘制事件发生之后,渲染到屏幕上之前,向表格里的每一行传递’处理过程’
-
该函数可以用来设置行的class名字等
*/
$(document).ready(function(){
$(‘#example’).dataTable({
“fnRowCallback”: function( nRow, aData, iDisplayIndex, iDisplayIndexFull ) {
// Bold the grade for all ‘A’ grade browsers
if ( aData[4] == “A” )
{
$(‘td:eq(4)’, nRow).html( ‘A’ );
}
}
});
});
/*
-
fnServerData
-
无默认值
-
你可以使用该参数重写从服务器获取数据的方法($.getJSON),从而使其更适合你的应用
-
例如你可以使用POST方式提交,或者从Google Gears或者AIR数据库获取数据
*/
// POST data to server
$(document).ready(function(){
$(‘#example’).dataTable( {
“bProcessing”: true,
“bServerSide”: true,
“sAjaxSource”: “xhr.php”,
“fnServerData”: function ( sSource, aoData, fnCallback ) {
$.ajax( {
“dataType”: ‘json’,
“type”: “POST”,
“url”: sSource,
“data”: aoData,
“success”: fnCallback
} );
}
});
});
/*
-
fnServerParams
-
无默认值
-
用来在向服务器发送Ajax请求时发送额外的数据,例如自定义的过滤信息,该函数使向服务器发送额外参数变得简单
-
传递进来的参数是DataTable建立的数据集合,你可以根据需要添加或者修改该集合
*/
$(document).ready(function(){
$(‘#example’).dataTable( {
“bProcessing”: true,
“bServerSide”: true,
“sAjaxSource”: “scripts/server_processing.php”,
“fnServerParams”: function ( aoData ) {
aoData.push( { “name”: “more_data”, “value”: “my_value” } );
}
});
});
/*
-
fnStateLoad
-
无默认值
-
加载表格状态,使用该函数你可以定义状态信息加载的位置和方式,默认情况下DataTable会从cookie中加载
-
不过你或许希望使用本地存储(HTML5支持),或者服务端数据库
*/
$(document).ready(function(){
$(‘#example’).dataTable({
“bStateSave”: true,
“fnStateSave”: function (oSettings, oData) {
var o;
// Send an Ajax request to the server to get the data. Note that
// this is a synchronous request.
$.ajax( {
“url”: “/state_load”,
“async”: false,
“dataType”: “json”,
“success”: function (json) {
o = json;
}
} );
return o;
}
});
});
/*
-
fnStateLoadParams
-
无默认值
-
该回调可以用来在加载状态信息之前编辑状态信息
-
函数在表格从存储的数据加载状态信息时调用,在表格<当前使用的设置对象>被<从保存信息中加载的设置对象>修改以前调用
-
注意作为插件开发者,你应该使用’stateLoadParams’事件去加载plug-in的参数
*/
// Remove a saved filter, so filtering is never loaded
$(document).ready(function(){
$(‘#example’).dataTable({
“bStateSave”: true,
“fnStateLoadParams”: function (oSettings, oData) {
oData.oFilter.sSearch = “”;
});
});
// Disallow state loading by returning false
$(document).ready(function(){
$(‘#example’).dataTable({
“bStateSave”: true,
“fnStateLoadParams”: function (oSettings, oData) {
return false;
});
});
/*
-
fnStateLoaded
-
无默认值
-
在表格状态被状态存储方法读取和DataTable设置对象被修改时调用,作为被状态信息被加载的结果
*/
// Show an alert with the filtering value that was saved
$(document).ready(function(){
$(‘#example’).dataTable({
“bStateSave”: true,
“fnStateLoaded”: function (oSettings, oData) {
alert( 'Saved filter was: '+oData.oFilter.sSearch );
});
});
/*
-
fnStateSave
-
无默认值
-
保存表格状态,使用该函数你可以定义状态信息保存的位置和方式,默认情况下DataTable会保存在cookie中
-
不过你或许希望使用本地存储(HTML5支持),或者服务端数据库
*/
$(document).ready(function(){
$(‘#example’).dataTable({
“bStateSave”: true,
“fnStateSave”: function (oSettings, oData) {
// Send an Ajax request to the server with the state object
$.ajax( {
“url”: “/state_save”,
“data”: oData,
“dataType”: “json”,
“method”: “POST”
“success”: function () {}
});
}
});
});
/*
-
fnStateSaveParams
-
无默认值
-
该回调允许你编辑被保存的状态信息,在表格改变了状态信息需要保存的时候调用
-
可以使用该回调在保存状态信息的对象被保存以前对其进行修改,包括添加或者其它状态属性或者修改
*/
// Remove a saved filter, so filtering is never saved
$(document).ready(function(){
$(‘#example’).dataTable({
“bStateSave”: true,
“fnStateLoadParams”: function (oSettings, oData) {
oData.oFilter.sSearch = “”;
});
});
/------------------------------------------------Columns------------------------------------------------/
/*
-
aDataSort
-
默认为null,自动使用列序号作为默认
-
在排序一列的时候同时将其它几列也排序,例如名和姓作为多列排序
*/
// Using aoColumnDefs
$(document).ready(function(){
$(‘#example’).dataTable({
“aoColumnDefs”: [
{ “aDataSort”: [ 0, 1 ], “aTargets”: [ 0 ] },
{ “aDataSort”: [ 1, 0 ], “aTargets”: [ 1 ] },
{ “aDataSort”: [ 2, 3, 4 ], “aTargets”: [ 2 ] }
]
});
});
// Using aoColumns
$(document).ready(function(){
$(‘#example’).dataTable({
“aoColumns”: [
{ “aDataSort”: [ 0, 1 ] },
{ “aDataSort”: [ 1, 0 ] },
{ “aDataSort”: [ 2, 3, 4 ] },
null,
null
]
});
});
/*
-
asSorting
-
默认为[ ‘asc’, ‘desc’ ]
-
你可以通过该参数控制默认排序的方向,甚至改变排序处理器的行为(例如:只允许升序排序)
*/
// Using aoColumnDefs
$(document).ready(function(){
$(‘#example’).dataTable({
“aoColumnDefs”: [
{ “asSorting”: [ “asc” ], “aTargets”: [ 1 ] },
{ “asSorting”: [ “desc”, “asc”, “asc” ], “aTargets”: [ 2 ] },
{ “asSorting”: [ “desc” ], “aTargets”: [ 3 ] }
]
});
});
// Using aoColumns
$(document).ready(function(){
$(‘#example’).dataTable( {
“aoColumns”: [
null,
{ “asSorting”: [ “asc” ] },
{ “asSorting”: [ “desc”, “asc”, “asc” ] },
{ “asSorting”: [ “desc” ] },
null
]
});
});
/*
-
bSearchable
-
默认为true
-
是否在列上应用过滤
*/
// Using aoColumnDefs
$(document).ready(function(){
$(‘#example’).dataTable({
“aoColumnDefs”: [
{ “bSearchable”: false, “aTargets”: [ 0 ] }
]} );
});
// Using aoColumns
$(document).ready(function(){
$(‘#example’).dataTable({
“aoColumns”: [
{ “bSearchable”: false },
null,
null,
null,
null
] });
});
/*
-
bSortable
-
默认为true
-
是否在某一列上开启排序
*/
// Using aoColumnDefs
$(document).ready(function(){
$(‘#example’).dataTable({
“aoColumnDefs”: [
{ “bSortable”: false, “aTargets”: [ 0 ] }
] });
});
// Using aoColumns
$(document).ready(function(){
$(‘#example’).dataTable( {
“aoColumns”: [
{ “bSortable”: false },
null,
null,
null,
null
] });
});
/*
-
bUseRendered
-
默认为true
-
当对一列使用使用fnRender时,你或许希望使用原始的数据(渲染以前)去排序或者过滤(默认是使用用户看到的渲染过的数据)
-
或许对日期类型有些用处,注意,现在建议使用mDataProp作为函数并且使用该函数提供的type参数,来允许不同的数据被用来排序,过滤,展现和类型检测
*/
// Using aoColumnDefs
$(document).ready(function() {
$(‘#example’).dataTable( {
“aoColumnDefs”: [
{
“fnRender”: function ( oObj ) {
return oObj.aData[0] +’ '+ oObj.aData[3];
},
“bUseRendered”: false,
“aTargets”: [ 0 ]
}
]
} );
} );
// Using aoColumns
$(document).ready(function() {
$(‘#example’).dataTable( {
“aoColumns”: [
{
“fnRender”: function ( oObj ) {
return oObj.aData[0] +’ '+ oObj.aData[3];
},
“bUseRendered”: false
},
null,
null,
null,
null
]
} );
} );
/*
-
bVisible
-
默认值为true
-
是否展示某一列
*/
// Using aoColumnDefs
$(document).ready(function() {
$(‘#example’).dataTable( {
“aoColumnDefs”: [
{ “bVisible”: false, “aTargets”: [ 0 ] }
] } );
} );
// Using aoColumns
$(document).ready(function() {
$(‘#example’).dataTable( {
“aoColumns”: [
{ “bVisible”: false },
null,
null,
null,
null
] } );
} );
/*
-
fnCreatedCell
-
无默认值
-
每当新的单元格被建立(Ajax源等)或者处理输入(DOM源)时,开发者可定义的函数会被调用
-
该属性用作fnRender的补充来允许你修改在fnRender函数调用之后新建的DOM元素(例如增加背景颜色)
-
nTd:TD元素, sData:单元格的值, oData:单元格所在的行值, iRow:当前页面显示行的索引, iCol:当前所在列的索引
*/
$(document).ready(function() {
$(‘#example’).dataTable( {
“aoColumnDefs”: [ {
“aTargets”: [3],
“fnCreatedCell”: function (nTd, sData, oData, iRow, iCol) {
if ( sData == “1.7” ) {
$(nTd).css(‘color’, ‘blue’)
}
}
} ]
});
} );
/*
-
fnRender
-
无默认值
-
自定义列中每个单元格被展示的时候调用的展示函数
*/
// Using aoColumnDefs
$(document).ready(function() {
$(‘#example’).dataTable( {
“aoColumnDefs”: [
{
“fnRender”: function ( o, val ) {
return o.aData[0] +’ '+ o.aData[3];
},
“aTargets”: [ 0 ]
}
]
} );
} );
// Using aoColumns
$(document).ready(function() {
$(‘#example’).dataTable( {
“aoColumns”: [
{ “fnRender”: function ( o, val ) {
return o.aData[0] +’ '+ o.aData[3];
} },
null,
null,
null,
null
]
} );
} );
/*
-
iDataSort
-
默认值为-1,使用自动计算的列标
-
当选择该列进行排序的时候,你希望调用排序操作的列的列号,该参数可以用来按隐藏列排序
*/
// Using aoColumnDefs
$(document).ready(function() {
$(‘#example’).dataTable( {
“aoColumnDefs”: [
{ “iDataSort”: 1, “aTargets”: [ 0 ] }
]
} );
} );
// Using aoColumns
$(document).ready(function() {
$(‘#example’).dataTable( {
“aoColumns”: [
{ “iDataSort”: 1 },
null,
null,
null,
null
]
} );
} );
/*
-
mDataProp
-
默认为null,使用自动计算的列标
-
该属性可以从任何JSON格式数据源读取属性,包括深层网状的对象和属性,
-
有几种不同的传递方式可以影响mDataProp的行为
-
整型:被当作数据源的数组下表,是DataTable使用的默认行为(每列递增)
-
字符串类型:被当作从数据源获取的对象的属性名,注意你可以使用Javascript点号访问符去访问深层次的属性或数组
-
null:sDafaultContent选项会被使用到单元格上,(默认是空字符串,当生成可编辑列、可删除列的时候可以使用该属性)
-
函数:当表格获取或者设置单元格时被调用的函数,函数有三个参数
-
{array|object}:该行的数据源
-
{string}:调用数据请求的类型,设置数据时是'set',收集数据时是'filter','display','type','sort'
-
{*}:当第二个参数是set的时候,要被设置的数据
-
当类型是'set'的时候,该函数不需要返回一个值,除此之外,返回值是可以用来请求数据的
*/
// Read table data from objects
$(document).ready(function() {
var oTable = $(‘#example’).dataTable( {
“sAjaxSource”: “sources/deep.txt”,
“aoColumns”: [
{ “mDataProp”: “engine” },
{ “mDataProp”: “browser” },
{ “mDataProp”: “platform.inner” },
{ “mDataProp”: “platform.details.0” },
{ “mDataProp”: “platform.details.1” }
]
} );
} );
// Using mDataProp as a function to provide different information for
// sorting, filtering and display. In this case, currency (price)
$(document).ready(function() {
var oTable = $(‘#example’).dataTable( {
“aoColumnDefs”: [
{
“aTargets”: [ 0 ],
“mDataProp”: function ( source, type, val ) {
if (type === ‘set’) {
source.price = val;
// Store the computed dislay and filter values for efficiency
source.price_display = val==“” ? “” : “$”+numberFormat(val);
source.price_filter = val==“” ? “” : “$”+numberFormat(val)+" "+val;
return;
}
else if (type === ‘display’) {
return source.price_display;
}
else if (type === ‘filter’) {
return source.price_filter;
}
// ‘sort’ and ‘type’ both just use the integer
return source.price;
}
]
} );
} );
/*
-
sClass
-
默认值为空字符串
-
该列的每一个单元格被赋予的class
*/
// Using aoColumnDefs
$(document).ready(function() {
$(‘#example’).dataTable( {
“aoColumnDefs”: [
{ “sClass”: “my_class”, “aTargets”: [ 0 ] }
]
} );
} );
// Using aoColumns
$(document).ready(function() {
$(‘#example’).dataTable( {
“aoColumns”: [
{ “sClass”: “my_class” },
null,
null,
null,
null
]
} );
} );
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)
最后
Java架构进阶面试及知识点文档笔记
这份文档共498页,其中包括Java集合,并发编程,JVM,Dubbo,Redis,Spring全家桶,MySQL,Kafka等面试解析及知识点整理
Java分布式高级面试问题解析文档
其中都是包括分布式的面试问题解析,内容有分布式消息队列,Redis缓存,分库分表,微服务架构,分布式高可用,读写分离等等!
互联网Java程序员面试必备问题解析及文档学习笔记
Java架构进阶视频解析合集
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
ple’).dataTable( {
“aoColumnDefs”: [
{ “sClass”: “my_class”, “aTargets”: [ 0 ] }
]
} );
} );
// Using aoColumns
$(document).ready(function() {
$(‘#example’).dataTable( {
“aoColumns”: [
{ “sClass”: “my_class” },
null,
null,
null,
null
]
} );
} );
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。[外链图片转存中…(img-9GCxYVsn-1712567968232)]
[外链图片转存中…(img-OI9OTQoT-1712567968232)]
[外链图片转存中…(img-McB3vj7R-1712567968232)]
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)
最后
Java架构进阶面试及知识点文档笔记
这份文档共498页,其中包括Java集合,并发编程,JVM,Dubbo,Redis,Spring全家桶,MySQL,Kafka等面试解析及知识点整理
[外链图片转存中…(img-rv2q0k7M-1712567968233)]
Java分布式高级面试问题解析文档
其中都是包括分布式的面试问题解析,内容有分布式消息队列,Redis缓存,分库分表,微服务架构,分布式高可用,读写分离等等!
[外链图片转存中…(img-bwhyNNPw-1712567968233)]
互联网Java程序员面试必备问题解析及文档学习笔记
[外链图片转存中…(img-0oMlkqy9-1712567968233)]
Java架构进阶视频解析合集
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
更多推荐
所有评论(0)