自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

月伴飞鱼

个人网站:http://hardyfish.top/

  • 博客(36)
  • 资源 (26)
  • 收藏
  • 关注

原创 毕业一年半拿遍所有大厂offer,我是怎么做到的?

最近一段时间面试了几家互联网公司,陆续通过了阿里、头条、美团,滴滴,京东的面试,基本上面试的公司都通过了,所以在这里想分享一些自己面试的经验给大家,希望能帮助大家拿到心仪的offer我的基本情况:19届本科,现在在一家小公司,毕业一年半,后端开发文章在牛客还挺受欢迎的,希望对大家有帮助牛客原地址:https://www.nowcoder.com/discuss/594676?source_id=profile_create_nctrack&channel=-1我在csdn上看到有人直接搬运

2021-04-02 13:16:20 1158 4

原创 Kafka知识总结(消费者+重平衡)

意思就是前面两个当同组内有新的消费者加入或者旧的消费者退出的时候,会从新开始决定消费者消费方式,但是Sticky在同组中有新的消费者加入或者旧的消费者退出时,不会直接开始重构分配策略,而是保留现有消费者消费策略,将退出的消费者所消费的分区平均分配给现有消费者,新增消费者同理,同其他现存消费者的消费策略中分离。这个分配的过程就叫 Rebalance。Consumer Group 下所有实例订阅的主题的单个分区,只能分配给组内的某个 Consumer 实例消费,这个分区也可以被其他的 Group 消费。

2024-07-25 09:38:39 546

原创 Kafka知识总结(基本介绍+基本概念)

通过异步处理提高系统性能(减少响应所需时间)削峰/限流降低系统耦合性。

2024-07-24 09:25:43 886

原创 操作系统常用知识总结(内存)

DMA意味着在不涉及CPU的情况下依然可以读取/写入内存,即DMA不需要CPU的支持。控制直接内存访问的过程。DMA的优点:缓解总线上的拥塞。DMA设备可以直接在内存之间传输数据,而不是使用CPU作为中介。提升系统并发,CPU可以去处理别的任务了。由于读写硬盘的速度比读写内存要慢很多。

2024-07-23 09:18:17 886

原创 操作系统常用知识总结(线程+CPU)

中断:当 CPU 在执行用户态的进程时,外围设备完成用户请求的操作后,会向 CPU 发出相应的中断信号,这时 CPU 会暂停执行下一条即将要执行的指令,转到与中断信号对应的处理程序去执行,也就是切换到了内核态。如果你的CPU负载是4,那说明4核CPU都被跑满了,如果你的CPU负载是6,那说明4核CPU被繁忙的使用还不够处理当前的任务,很多进程可能一直在等待CPU去执行自己的任务。假设是一个4核的CPU,此时如果你的CPU负载是0.15,这就说明,4核CPU中连一个核都没用满,4核CPU基本都很空闲。

2024-07-23 09:09:14 662

原创 操作系统常用知识总结(基本结构+磁盘+进程)

消息队列通信过程中,存在用户态与内核态之间的数据拷贝开销,因为进程写入数据到内核中的消息队列时,会发生从用户态拷贝数据到内核态的过程,同理另一进程读取内核中的消息数据时,会发生从内核态拷贝数据到用户态的过程。一个进程使用fork创建子进程,如果子进程退出,而父进程没有调用wait或waitpid获取子进程的状态信息,那么子进程的进程描述符仍然保存在系统中,这种进程(这个子进程)称之为僵尸进程。这样这个进程写入的东西,另外一个进程马上就能看到了,都不需要拷贝来拷贝去,传来传去,大大提高了进程间通信的速度。

2024-07-22 09:13:38 961

原创 如何设计一个秒杀系统

建立一个热点上报和可以按照需求订阅的热点服务的下发规范,主要目的是通过交易链路上各个系统(包括详情、购物车、交易、优惠、库存、物流等)访问的时间差,把上游已经发现的热点透传给下游系统,提前做好保护。参加秒杀的商品,一般都是抢到就是赚到,所以成功下单后却不付款的情况比较少,再加上卖家对秒杀商品的库存有严格限制,所以秒杀商品采用下单减库存更加合理。买家下单后,库存为其保留一定的时间(如10分钟),超过这个时间,库存将会自动释放,释放后其他买家就可以继续购买。如果预扣成功,则完成付款并实际地减去库存。

2024-07-22 09:08:21 543

原创 架构设计面试经验总结

想要学习架构设计知识,可以从自己熟知的领域出发,这样你才有不断的正反馈,从而更有信心,容易理解新的知识。

2024-07-21 09:40:58 628

原创 如何成为学习高手

以我自己为例,我在自己学习的时候,对于一些很细节的部分往往不去深究,总觉得没必要,但是当我去写技术文章时,总是会孜孜不倦的翻阅很多书籍,文章,力求将每个细节都搞懂,这种心理说不清,但是驱动力很强大。在一天之内,我们按照上述的节奏学习和工作,但是这样的休息是不够的,总体上大脑还是处于亢奋的工作状态,所以在连续工作5-6天后,我们需要有一些整块的休息时间。学习和记忆的本质,就是把新知识和旧知识建立联系,存储的旧知识容量越大,种类越多,就越能随时找到与新知识的联系,越能更快更好的学习。走神之后该怎么办呢?

2024-07-20 09:50:43 950

原创 Go语言之内存分配

make 函数只用于 slice、chan 和 map 这三种内置类型的创建和初始化,因为这三种类型的结构比较复杂,比如 slice 要提前初始化好内部元素的类型,slice 的长度和容量等,这样才可以更好地使用它们。其实 make 函数就是 map 类型的工厂函数,它可以根据传递它的 K-V 键值对类型,创建不同类型的 map,同时可以初始化 map 的大小。它的作用就是根据传入的类型申请一块内存,然后返回指向这块内存的指针,指针指向的数据就是该类型的零值。内置函数 new 的作用是什么呢?

2024-07-19 09:19:17 479

原创 Go语言之参数传递

你会发现它们的内存地址都不一样,这就意味着,在 modifyPerson 函数中修改的参数 p 和 main 函数中的变量 p 不是同一个,这也是我们在 modifyPerson 函数中修改参数 p,但是在 main 函数中打印后发现并没有修改的原因。以 modifyPerson 函数来说,在调用 modifyPerson 函数传递变量 p 的时候,Go 语言会拷贝一个 p 放在一个新的内存中,这样新的 p 的内存地址就和原来不一样了,但是里面的 name 和 age 是一样的,还是张三和 18。

2024-07-19 09:17:44 1271

原创 Go语言之指针详解

举个通俗的例子,每本书中都有目录,目录上会有相应章节的页码,你可以把页码理解为一系列的内存地址,通过页码你可以快速地定位到具体的章节(也就是说,通过内存地址可以快速地找到存储的数据)。此外,除了可以通过简短声明的方式声明一个指针类型的变量外,也可以使用 var 关键字声明,如下面示例中的 var intP *int 就声明了一个 *int 类型的变量 intP。比如 int 类型的指针类型是 *int,float64 类型的指针类型是 *float64,自定义结构体 A 的指针类型是 *A。

2024-07-18 17:12:17 794

原创 Go语言之同步原语

因为 readSum 函数并没有任何加锁控制,所以它不是并发安全的,即一个 goroutine 正在执行 sum+=i 操作的时候,另一个 goroutine 可能正在执行 b:=sum 操作,这就会导致读取的 num 值是一个过期的值,结果不可预期。那么有没有办法解决这个问题呢?也就是说有没有办法监听所有协程的执行,一旦全部执行完毕,程序马上退出,这样既可保证所有协程执行完毕,又可以及时退出节省时间,提升性能。在协程执行完毕后,整个 run 函数才能执行完毕,时间不多不少,正好是协程执行的时间。

2024-07-18 17:11:17 720

原创 Go语言之并发基础

下面示例中的 counter 函数,它的参数 out 是一个只能发送的 channel,所以在 counter 函数体内使用参数 out 时,只能对其进行发送操作,如果执行接收操作,则程序不能编译通过。这也意味着,无缓冲 channel 的发送和接收操作是同时进行的,它也可以称为同步 channel。有时候,我们有一些特殊的业务需求,比如限制一个 channel 只可以接收但是不能发送,或者限制一个 channel 只能发送但不能接收,这种 channel 称为单向 channel。

2024-07-17 12:15:39 1093

原创 Go语言之错误处理

下面的代码是 Go 语言标准包 ioutil 中的 ReadFile 函数,它需要打开一个文件,然后通过 defer 关键字确保在 ReadFile 函数执行结束后,f.Close() 方法被执行,这样文件的资源才一定会释放。这种需求是存在的,比如调用一个函数,返回了一个错误信息 error,在不想丢失这个 error 的情况下,又想添加一些额外信息返回新的 error。下面的 add 函数示例,是使用 errors.New 这个工厂函数生成的错误信息,它接收一个字符串参数,返回一个 error 接口。

2024-07-17 12:12:29 775

原创 Go语言之结构体与接口

ReadWriter 接口就是 Reader 和 Writer 的组合,组合后,ReadWriter 接口具有 Reader 和 Writer 中的所有方法,这样新接口 ReadWriter 就不用定义自己的方法了,组合 Reader 和 Writer 的就可以了。在 person 这个结构体中,第一个字段是 string 类型的 name,第二个字段是 uint 类型的 age,所以在初始化的时候,初始化值的类型顺序必须一一对应,才能编译通过。直接把结构体类型放进来,就是组合,不需要字段名。

2024-07-02 13:58:41 558

原创 Go语言之函数和方法

通过下面示例中的这种方式直接为命名返回参数赋值,也就等于函数有了返回值,所以就可以忽略 return 的返回值了,也就是说,示例中只有一个 return,return 后没有要返回的值。在 Go 语言中,方法和函数是两个概念,但又非常相似,不同点在于方法必须要有一个接收者,这个接收者是一个类型,这样方法就和这个类型绑定在一起,称为这个类型的方法。函数中形参的定义和定义变量是一样的,都是变量名称在前,变量类型在后,只不过在函数里,变量名称叫作参数名称,也就是函数的形参,形参只能在该函数体内使用。

2024-06-26 10:28:42 755

原创 Go语言之集合类型

上面的示例说明,Go 语言在内存上划分了一块容量为 8 的内容空间(容量为 8),但是只有 4 个内存空间才有元素(长度为 4),其他的内存空间处于空闲状态,当通过 append 函数往切片中追加元素的时候,会追加到空闲的内存上,当切片的长度要超过容量的时候,会进行扩容。虽然切片底层用的也是 array 数组,数组对应的值已经被修改为 f,所以这也证明了基于数组的切片,使用的底层数组还是原来的数组,一旦修改切片的元素值,那么底层数组对应的值也会被修改。切片和数组一样,也可以通过索引定位元素。

2024-06-26 10:10:00 803

原创 Go语言之控制结构

当 switch 之后有表达式时,case 后的值就要和这个表达式的结果类型相同,比如这里的 j 是 int 类型,那么 case 后就只能使用 int 类型,如示例中的 case 1、case 2。这个示例和上面的 for 示例的效果是一样的,但是这里的 for 后只有 i

2024-06-25 14:35:23 853

原创 Go语言之数据类型

在 Go 语言中,通过 var 声明语句来定义一个变量,定义的时候需要指定这个变量的类型,然后再为它起个名字,并且设置好变量的初始值。在 Go 语言中,还有一种字节类型 byte,它其实等价于 uint8 类型,可以理解为 uint8 类型的别名,用于定义一个字节,所以字节 byte 类型也属于整型。Go 语言是强类型的语言,也就是说不同类型的变量是无法相互使用和计算的,这也是为了保证Go 程序的健壮性,所以不同类型的变量在进行赋值或者计算前,需要先进行类型转换。布尔值可以用于一元操作符!

2024-06-24 09:31:33 1032

原创 Go语言之基础入门

可以从官网 https://golang.org/dl/ 和 https://golang.google.cn/dl/ 下载(第一个链接是国外的官网,第二个是国内的官网,如果第一个访问不了,可以从第二个下载)。在 Go 语言中 main 函数是一个特殊的函数,它代表整个程序的入口,也就是程序在运行的时候,会先调用 main 函数,然后通过 main 函数再调用其他函数,达到实现项目业务需求的目的。代码中的 go 是一个 Go 语言开发工具包提供的命令,它和你平时常用的 ls 命令一样都是可执行的命令。

2024-06-23 10:55:20 755

原创 Effective Java-​第3章 对于所有对象都通用的方法

全部系列内容:https://xiaoflyfish.cn/覆盖equals时请遵守通用约定什么时候应该覆盖equals当类需要逻辑相等这个概念的时候就应该覆盖equals,比如要判断两个student是否是同一个人,这个时候我们就需要按需重写equals逻辑相等,就是逻辑上是相等的,比如id一样,判定它们相等,即使它们是两个不同的对象通用约定重写equals的时候就必须要遵守它的通用约定:自反性(reflexive),对于任何非null的引用值x,x.equals(x)必须

2022-02-06 17:12:55 603

原创 关于内存安全问题,你应该了解的几点!

前言Java在内存管理方面是要比C/C++更方便的,不需要为每一个对象编写释放内存的代码,JVM虚拟机将为我们选择合适的时间释放内存空间,使得程序不容易出现内存泄漏和溢出的问题不过,也正是因为Java把内存控制的权利交给了Java虚拟机,一旦出现内存泄漏和溢出方面的问题,如果不了解虚拟机是怎么使用内存的,那排查错误将会成为一项异常艰难的工作下面先看看JVM如何管理内存的文章首发在公众号(月伴飞鱼),之后同步到个人网站:xiaoflyfish.cn/喜欢的话,之后会分享更多系列文章!觉得有收获,希

2021-07-24 00:06:32 1020 2

原创 分享一些工作中常用的工具软件,值得收藏!

前言我之前分享过一篇:分享一些常用的网站和工具,值得收藏!,今天再分享一波关于工作中常用的工具软件!文章首发在公众号(月伴飞鱼),之后同步到掘金和个人网站:http://xiaoflyfish.cn/觉得有收获,希望帮忙点赞,转发下哈,谢谢,谢谢Quiver适合程序猿使用的笔记本,支持混合书写文本、代码、Markdown标记等,方便程序员记录笔记和代码片段,并提供全文搜索功能,类似印象笔记的左中右三栏布局,是一款程序猿必备的利器下载地址:http://happenapps.com/Anoth

2021-06-11 01:42:29 1137 3

原创 面试题:Redis如何实现分布式锁!

前言之前的个人网站已经下线了,https://upheart.cn/,维护太花时间了,之后会把网站内容全部搬到公众号中,内容也会比网站内容更丰富,更全面,有时间就会更新,会尽快的,带大家真正的吊打面试官!之后分享的面试系列文章,主要是对之前面经的答案总结:社招一年半面经分享(含阿里美团头条京东滴滴)文章内容会尽量少废话,多干货!开始吧!为什么需要分布式锁为什么需要分布式锁使用分布式锁的目的,无外乎就是保证同一时间只有一个客户端可以对共享资源进行操作我们在分布式应用进行逻辑处理时经常会遇到并发

2021-05-15 15:26:23 398 1

原创 实现异步编程,这个工具类你得掌握!

我们知道多线程能并发的处理多个任务,有效地提高复杂应用程序的性能,在实际开发中扮演着十分重要的角色但是使用多线程也带来了很多风险,并且由线程引起的问题往往在测试中难以发现,到了线上就会造成重大的故障和损失下面我会结合几个实际案例,帮助大家在工作做规避这些问题多线程问题首先介绍下使用的多线程会有哪些问题使用多线程的问题很大程度上源于多个线程对同一变量的操作权,以及不同线程之间执行顺序的不确定性《Java并发编程实战》这本书中提到了三种多线程的问题:安全性问题、活跃性问题和性能问题安全性问题例如

2021-04-18 14:51:26 380 1

原创 这些线程安全的坑,你在工作中踩了么?

我们知道多线程能并发的处理多个任务,有效地提高复杂应用程序的性能,在实际开发中扮演着十分重要的角色但是使用多线程也带来了很多风险,并且由线程引起的问题往往在测试中难以发现,到了线上就会造成重大的故障和损失下面我会结合几个实际案例,帮助大家在工作做规避这些问题多线程问题首先介绍下使用的多线程会有哪些问题使用多线程的问题很大程度上源于多个线程对同一变量的操作权,以及不同线程之间执行顺序的不确定性《Java并发编程实战》这本书中提到了三种多线程的问题:安全性问题、活跃性问题和性能问题安全性问题例如

2021-04-14 17:14:09 198 1

原创 Spring奇技淫巧之扩展点的应用

最近在看公司项目和中间件的时候,看到一些Spring扩展点的使用,写篇文章学习下,对大家之后看源码都有帮助首先先介绍下Bean的生命周期我们知道Bean的生命周期分为几个主干流程Bean(单例非懒加载)的实例化阶段Bean的属性注入阶段Bean的初始化阶段Bean的销毁阶段下面是整个Spring容器的启动流程,可以看到除了上述几个主干流程外,Spring还提供了很多扩展点下面详细介绍下Spring的常见的扩展点Spring常见扩展点BeanFactoryPostProcess.

2021-04-11 14:15:58 521 2

原创 面试题:Kafka如何保证高可用?有图有真相

上次面试多次被问到一个问题:❝Kafka如何保证高可用的?❞「下面来跟大家分享下当时我答到的点」什么是高可用「高可用性」,指系统无间断地执行其功能的能力,代表系统的可用性程度Kafka从0.8版本开始提供了高可用机制,可保障一个或多个Broker宕机后,其他Broker能继续提供服务备份机制Kafka允许同一个Partition存在多个消息副本,每个Partition的副本通常由1个Leader及0个以上的Follower组成,生产者将消息直接发往对应Partition的Leader,

2021-04-08 00:35:46 353 2

原创 MySQL为什么莫名其妙的断开连接以及解决方案

前言最近遇到在将本地的项目部署到服务器上之后遇到的一个奇怪问题在部署完成后,网站当时可以正常工作,但是第二天访问网站的时候却会遇到一个500 Server Error。从日志中可以看出是MySQL数据库出现了异常翻译:最后一个数据包在 83827560 ms 之前被成功接收,最后一个数据包在83827560 ms 之前被成功发送。比服务的配置参数wait_timeout的值要长。日志中给出的建议如下翻译:你应考虑在程序中进行数据库操作之前检验数据库连接的有效性或者将数据库的auto

2020-12-10 11:01:23 18698 2

原创 Redis如何解决频繁的命令往返造成的性能瓶颈

Redis客户端和服务端交互模型先来看看Redis客户端和服务端的交互模型可以得出:1.Redis是基于一个Request,一个Response的同步请求服务2.客户端将数据包发送至服务器,然后服务器再将响应数据发送回客户端,这都需要花费一定时间的。这段时间被称为往返时间RTT(Round Trip Time)。当一个客户端需要连续执行很多请求时,就很容易看出往返时间是影响系统性能的例如:如果往返时间RTT是250毫秒,即使Redis服务器每秒钟能处理1000个请求,我们也只能每秒钟最多处理四

2020-12-05 14:42:26 1400 1

原创 从源码角度解析ArrayList.subList的几个坑

前言《阿里巴巴Java开发手册》中提出了以下几点建议和规则:规则1:规则2:本文通过源码分析,给大家讲清楚《手册》为什么这么规定ArrayList的subList分析首先通过 IDEA 的提供的类图工具,我们可以查看下该类的继承体系。具体步骤:在 SubList 类中 右键,选择 “Diagrams” -> “Show Diagram” 。可以看到 SubList 和 ArrayList 的继承体系非常类似,都实现了 RandomAccess 接口 继承自 AbstarctLis

2020-11-28 15:58:23 249

原创 二分搜索算法解题步骤,吐血整理

基本介绍二分搜索(折半搜索)是一种在有序数组中查找某一特定元素的搜索算法。从定义可知,运用二分搜索的前提是数组必须是排好序的。另外,输入并不一定是数组,也有可能是给定一个区间的起始和终止的位置。他的时间复杂度是 O(lgn),非常高效。特点他的缺点要求待查找的数组或者区间是排好序的。对数组进行动态的删除和插入操作并完成查找,平均复杂度会变为 O(n)。因此,当输入的数组或者区间是排好序的,同时又不会经常变动,而要求从里面找出一个满足条件的元素的时候,二分搜索就是最好的选择。解题思路二分搜索一

2020-11-25 23:11:25 5001 1

原创 一文搞懂Kafka核心基础知识

Kafka是最初由Linkedin公司开发,是一个分布式、支持分区的(partition)、多副本的(replica),基于zookeeper协调的分布式消息系统,它的最大的特性就是可以实时的处理大量数据以满足各种需求场景:比如基于hadoop的批处理系统、低延迟的实时系统、Storm/Spark流式处理引擎,web/nginx日志、访问日志,消息服务等等,用scala语言编写,Linkedin于2010年贡献给了Apache基金会并成为顶级开源 项目。下面这篇文章会从以下方面会带大家介绍下这个强大的开源

2020-11-25 09:45:29 1400 1

原创 条件语句的多层嵌套问题优化,助你写出不让同事吐槽的代码

文章目录前言案例卫语句枚举状态模式策略+工厂模式总结最后前言《阿里巴巴开发手册》中,有关于多 if-else 分支和嵌套的建议和解决方案,如下:那么本文通过介绍几种优化方案,给大家提供几种思路案例下面是开发中可能会遇到的典型代码:public String getTweetTitle(int type) { String result; if (type == 0) { throw new IllegalArgumentException

2020-11-23 01:09:34 648 4

原创 常用的Lambda表达式案例解析,工作中都会用到

我们日常工作中,Lambda 使用比较多的场景,就是集合类下的 Lambda 流操作,往往几行代码可以帮助我们实现复杂代码接下来我们把 Lambda 流的常用方法用案列讲解一下。ForEach集合的遍历forEach方法public void testForEach(){ List<String> list = new ArrayList<String>() {{ add("1"); add("2");

2020-11-22 00:31:47 606 1

复仇者联盟精品桌面壁纸免费下载

复仇者联盟精品壁纸

2021-06-13

Sublime Text 3126.dmg

Sublime Text 3126.dmg

2019-06-06

jdk-12.0.1_osx-x64_bin.dmg

jdk-12.0.1_osx-x64_bin.dmg

2019-06-06

尚硅谷大数据技术之Kafka(笔记+代码+资料).rar

Kafka是一个开源流处理平台,由Scala和Java编写。Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者规模的网站中的所有动作流数据。在本课程中,你将学习到,Kafka架构原理、安装配置使用、详细的Kafka写入数据和处理数据以及写出数据的流程、新旧版本对比及运用、分区副本机制的详解、内部存储策略、高阶API直接消费数据、等等

2019-05-28

尚硅谷大数据之Zookeeper视频(笔记+代码+资料)

Zookeeper主要应用于大数据开发中的,统一命名服务、统一配置管理、统一集群管理、服务器节点动态上下线、软负载均衡等场景。该框架相当于大数据框架中的润滑剂。是大数据大数据开发工程师必须会的框架之一。本套课程讲解了,Zookeeper的集群安装、选举机制、监听器原理、写数据流程、Shell命令行操作、客户端API操作、服务器节点动态上下线综合案例以及企业真实面试题。

2019-05-28

尚硅谷大数据视频_Kafka视频教程-笔记.zip

尚硅谷大数据视频_Kafka视频教程-笔记

2019-05-16

SSM高级整合(SSM+BootStrap)

SSM+BootStrap实现SSM的基本整合和CRUD!!!

2017-07-23

从零开始学SpringBoot

从零开始学SpringBoot!!!

2017-07-20

SSM个人博客项目实战(SSM+EasyUI)

SSM实现个人博客项目,前台使用EasyUI!

2017-07-15

学生信息管理系统(JSP+Servlet+EasyUI)--入门项目

学生信息管理系统(JSP+Servlet+EasyUI)--入门项目!!!

2017-07-13

学生信息管理系统(SSH+EasyUI)---入门项目

SSH+EasyUI实现学生管理系统!!!

2017-07-13

EasyUI使用-中文手册

EasyUI中文手册,方便大家学习!!!

2017-07-12

学生信息管理系统(JSP+Servlet)

学完JSP和Servlet后的第一个项目!!!

2017-07-03

各种API性能_性能优化技巧

各种API性能_性能优化技巧!!!

2017-06-12

JDK API 1.8参考手册

JDK API 1.8 参考手册!

2017-06-06

张孝详JAVA就业面试宝典

Java就业面试宝典!

2017-06-06

算法图解-入门书

像小说一样有趣的算法入门书!!!

2017-06-03

IDEA-2017入门教程

IDAE工具的使用!!!

2017-05-31

MyBatis学习入门案例

MyBatis学习入门案例

2017-05-25

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除