
Java
文章平均质量分 89
zl1zl2zl3
这个作者很懒,什么都没留下…
展开
-
从代理机制到Spring AOP,这篇给你安排的明明白白的
这篇文章准备从Java的代理机制讲到Spring的AOP。1.代理模式代理模式是很常见的一种设计模式,代理一词拆开来看就是代为受理,那显然是要涉及到请求被代理的委托方,提供代理的代理方,以及想要通过代理来实际联系委托方的客户三个角色。举个生活中很常见的例子,各路的明星都会有个自己的经纪人来替自己打点各种各样的事情,这种场景下,明星本身是委托方,经纪人是代理方,明星把自己安排演出、出席见面会的时间安排权利委托给经纪人,这样当各个商家作为客户想要请明星来代言时,就只能通过经纪人来进行。这样明星本转载 2021-12-14 14:28:00 · 3191 阅读 · 0 评论 -
亿级大表分库分表实战总结(万字干货,实战复盘)
分库分表的文章网上非常多,但是大多内容比较零散,以讲解知识点为主,没有完整地说明一个大表的切分、新架构设计、上线的完整过程。因此,我结合去年做的一个大型分库分表项目,来复盘一下完整的分库分表从架构设计 到 发布上线的实战总结。图片1.前言为什么需要做分库分表。这个相信大家多少都有所了解。海量数据的存储和访问成为了MySQL数据库的瓶颈问题,日益增长的业务数据,无疑对MySQL数据库造成了相当大的负载,同时对于系统的稳定性和扩展性提出很高的要求。而且单台服务器的资源(CPU、磁盘、转载 2021-07-24 15:22:33 · 3668 阅读 · 0 评论 -
图解 Spring 循环依赖,写得太好了!
Spring如何解决的循环依赖,是近两年流行起来的一道Java面试题。其实笔者本人对这类框架源码题还是持一定的怀疑态度的。如果笔者作为面试官,可能会问一些诸如“如果注入的属性为null,你会从哪几个方向去排查”这些场景题。那么既然写了这篇文章,闲话少说,发车看看Spring是如何解决的循环依赖,以及带大家看清循环依赖的本质是什么。正文通常来说,如果问Spring内部如何解决循环依赖,一定是单默认的单例Bean中,属性互相引用的场景。比如几个Bean之间的互相引用:甚至自己“循环”转载 2021-06-08 09:13:45 · 637 阅读 · 0 评论 -
swagger2 注解说明 ( @ApiImplicitParams )
@Api:用在请求的类上,表示对类的说明 tags="说明该类的作用,可以在UI界面上看到的注解" value="该参数没什么意义,在UI界面上也看到,所以不需要配置" @ApiOperation:用在请求的方法上,说明方法的用途、作用 value="说明方法的用途、作用" notes="方法的备注说明" @ApiImplicitParams:用在请求的方法上,表示一组参数说明 @ApiImplicitParam:用在@ApiImplici...转载 2021-03-17 10:54:23 · 1136 阅读 · 0 评论 -
编程的智慧
编程是一种创造性的工作,是一门艺术。精通任何一门艺术,都需要很多的练习和领悟,所以这里提出的“智慧”,并不是号称一天瘦十斤的减肥药,它并不能代替你自己的勤奋。然而由于软件行业喜欢标新立异,喜欢把简单的事情搞复杂,我希望这些文字能给迷惑中的人们指出一些正确的方向,让他们少走一些弯路,基本做到一分耕耘一分收获。反复推敲代码有些人喜欢炫耀自己写了多少多少万行的代码,仿佛代码的数量是衡量编程水平的标准。然而,如果你总是匆匆写出代码,却从来不回头去推敲,修改和提炼,其实是不可能提高编程水平的。你会制造出越.转载 2021-03-03 16:18:19 · 632 阅读 · 1 评论 -
看看人家那后端API接口写得,那叫一个优雅!
前言在移动互联网,分布式、微服务盛行的今天,现在项目绝大部分都采用的微服务框架,前后端分离方式,(题外话:前后端的工作职责越来越明确,现在的前端都称之为大前端,技术栈以及生态圈都已经非常成熟;以前后端人员瞧不起前端人员,那现在后端人员要重新认识一下前端,前端已经很成体系了)。一般系统的大致整体架构图如下:需要说明的是,有些小伙伴会回复说,这个架构太简单了吧,太low了,什么网关啊,缓存啊,消息中间件啊,都没有。因为老顾这篇主要介绍的是API接口,所以我们聚焦点,其他的模块小伙伴们自行去补充转载 2020-11-10 09:50:16 · 953 阅读 · 0 评论 -
今天终于搞懂了:为什么 Java 的 main 方法必须是 public static void?
Main 方法是我们学习 Java 编程语言时知道的第一个方法,你是否曾经想过为什么 main 方法是 public、static、void 的。当然,很多人首先学的是 C 和 C++,但是在 Java 中 main 方法与前者有些细微的不同,它不会返回任何值,为什么 main 方式是 public、static、void,这篇文章尝试去找到一些答案。Main 方法是 Java 程序的入口,记住,我们这里不会讨论 Servlet、MIDlet 和其他任何容器管理的 java 程序,在 java 核心编程转载 2020-09-11 10:27:26 · 546 阅读 · 0 评论 -
为什么 RestTemplate 那么棒,看这篇就够了!
作者:duanxz来源:cnblogs.com/duanxz/p/3510622.html在微服务都是以HTTP接口的形式暴露自身服务的,因此在调用远程服务时就必须使用HTTP客户端。我们可以使用JDK原生的URLConnection、Apache的Http Client、Netty的异步HTTP Client, Spring的RestTemplate。但是,用起来最方便、最优雅的还是要属Feign了。这里介绍的是RestTemplate。什么是RestTemplate?RestTemp.转载 2020-09-07 09:58:35 · 3266 阅读 · 0 评论 -
从String中移除空白字符的多种方式!?差别竟然这么大!
字符串,是Java中最常用的一个数据类型了。我们在日常开发时候会经常使用字符串做很多的操作。比如字符串的拼接、截断、替换等。这一篇文章,我们介绍一个比较常见又容易被忽略的一个操作,那就是移除字符串中的空格。其实,在Java中从字符串中删除空格有很多不同的方法,如trim,replaceAll等。但是,在Java 11添加了一些新的功能,如strip、stripLeading、stripTrailing等。大多数时候,我们只是使用trim方法来删除多余的空格。但是好像很多人并没有去思考过,是否有更转载 2020-09-07 09:49:46 · 640 阅读 · 0 评论 -
面试官:说说 Java 中的 Unsafe 和 CAS
Unsafe简单讲一下这个类。Java无法直接访问底层操作系统,而是通过本地(native)方法来访问。不过尽管如此,JVM还是开了一个后门,JDK中有一个类Unsafe,它提供了硬件级别的原子操作。这个类尽管里面的方法都是public的,但是并没有办法使用它们,JDK API文档也没有提供任何关于这个类的方法的解释。总而言之,对于Unsafe类的使用都是受限制的,只有授信的代码才能获得该类的实例,当然JDK库里面的类是可以随意使用的。从第一行的描述可以了解到Unsafe提供了硬件级别的操作,比转载 2020-09-03 16:38:54 · 460 阅读 · 0 评论 -
遗传算法的基本概念和实现,附Java实现案例!
本文经机器之心(微信公众号:almosthuman2014)授权转载,禁止二次转载作者:MallawaarachchiFollow原文:https://medium.com/towards-data-science/introduction-to-genetic-algorithms-including-example-code-e396e98d8bf3机器之心编译,参与:俞云开、蒋思源基因遗传算法是一种灵感源于达尔文自然进化理论的启发式搜索算法。该算法反映了自然选择的过程,即最适者被选.转载 2020-09-03 10:14:18 · 409 阅读 · 0 评论 -
10分钟搞定 Java 并发队列好吗?好的
前言如果按照用途与特性进行粗略的划分,JUC 包中包含的工具大体可以分为 6 类: 执行者与线程池 并发队列 同步工具 并发集合 锁 原子变量 在【并发系列】中,主要讲解了执行者与线程池,同步工具,锁, 在分析源码时,或多或少的提及到了「队列」,队列在 JUC 中也是多种多样存在,所以本文就以「远看」视角,帮助大家快速了解与区分这些看似「杂乱」的队列并发队列Java 并发队列按照实现方式来进行划分可以分为 2 种: 阻塞队列..转载 2020-08-26 10:16:12 · 279 阅读 · 0 评论 -
天天在用Stream,那你知道如此强大的Stream的实现原理吗?
作者:CarpenterLee来源:github.com/CarpenterLee/JavaLambdaInternals我们已经学会如何使用Stream API,用起来真的很爽,但简洁的方法下面似乎隐藏着无尽的秘密,如此强大的API是如何实现的呢?比如Pipeline是怎么执行的,每次方法调用都会导致一次迭代吗?自动并行又是怎么做到的,线程个数是多少?本节我们学习Stream流水线的原理,这是Stream实现的关键所在。首先回顾一下容器执行Lambda表达式的方式,以ArrayList.转载 2020-08-25 15:56:17 · 317 阅读 · 0 评论 -
String.format() 图文详解,写得非常好!
作者:潘佳琦链接:https://segmentfault.com/a/1190000019350486引言String类的format()方法用于创建格式化的字符串以及连接多个字符串对象。熟悉C语言应该记得C语言的sprintf()方法,两者有类似之处。format()方法有两种重载形式。重载// 使用当前本地区域对象(Locale.getDefault()),制定字符串格式和参数生成格式化的字符串String String.format(String fmt, Objec.转载 2020-08-24 10:17:21 · 672 阅读 · 0 评论 -
用好 Java 中的枚举,真的没有那么简单!
1.概览在本文中,我们将看到什么是 Java 枚举,它们解决了哪些问题以及如何在实践中使用 Java 枚举实现一些设计模式。enum关键字在 java5 中引入,表示一种特殊类型的类,其总是继承java.lang.Enum类,更多内容可以自行查看其官方文档。枚举在很多时候会和常量拿来对比,可能因为本身我们大量实际使用枚举的地方就是为了替代常量。那么这种方式由什么优势呢?以这种方式定义的常量使代码更具可读性,允许进行编译时检查,预先记录可接受值的列表,并避免由于传入无效值而引起的意外行为。.转载 2020-08-22 09:26:35 · 233 阅读 · 0 评论 -
Caffeine Cache~高性能 Java 本地缓存之王
前面刚说到Guava Cache,他的优点是封装了get,put操作;提供线程安全的缓存操作;提供过期策略;提供回收策略;缓存监控。当缓存的数据超过最大值时,使用LRU算法替换。这一篇我们将要谈到一个新的本地缓存框架:Caffeine Cache。它也是站在巨人的肩膀上-Guava Cache,借着他的思想优化了算法发展而来。本篇博文主要介绍Caffine Cache 的使用方式,以及Caffine Cache在SpringBoot中的使用。1. Caffine Cache 在算法上的优点-W-Ti转载 2020-08-21 14:04:45 · 799 阅读 · 0 评论 -
抛出这8个问题,检验你是否真的会ThreadLocal
一、概述1、官方术语ThreadLocal类是用来提供线程内部的局部变量。让这些变量在多线程环境下访问(get/set)时能保证各个线程里的变量相对独立于其他线程内的变量。2、大白话ThreadLocal是一个关于创建线程局部变量的类。通常情况下,我们创建的成员变量都是线程不安全的。因为他可能被多个线程同时修改,此变量对于多个线程之间彼此并不独立,是共享变量。而使用ThreadLocal创建的变量只能被当前线程访问,其他线程无法访问和修改。也就是说:将线程公有化变成线程私有化。二、应转载 2020-08-19 19:09:39 · 219 阅读 · 1 评论 -
为什么阿里巴巴要求日期格式化时必须有使用y表示年,而不能用Y?
在Java中进行日期处理大家一定都不陌生,我们经常会需要在代码中进行日期的转换、日期的格式化等操作。而一般我们进行日期格式化的时候都会使用SimpleDateFormat工具,之前我们有一篇文章介绍过SimpleDateFormat的线程安全问题(https://www.hollischuang.com/archives/3017),这一篇文章再来介绍一个和SimpleDateFormat有关,很容易被忽视,而一旦忽视可能导致大故障的问题。SimpleDateFormatSimpleDat.转载 2020-08-15 14:58:08 · 413 阅读 · 1 评论 -
Java 强、弱、软、虚,你属于哪一种?
作者:CodeBear的园子来源:www.cnblogs.com/CodeBear/p/12447554.htmlJava中的四种引用Java中有四种引用类型:强引用、软引用、弱引用、虚引用。Java为什么要设计这四种引用Java的内存分配和内存回收,都不需要程序员负责,都是由伟大的JVM去负责,一个对象是否可以被回收,主要看是否有引用指向此对象,说的专业点,叫可达性分析。Java设计这四种引用的主要目的有两个: 可以让程序员通过代码的方式来决定某个对象的生命周期; .转载 2020-08-15 14:15:28 · 208 阅读 · 0 评论 -
面试官问:为什么 Java 线程没有Running状态?我懵了
Java虚拟机层面所暴露给我们的状态,与操作系统底层的线程状态是两个不同层面的事。具体而言,这里说的 Java 线程状态均来自于 Thread 类下的 State 这一内部枚举类中所定义的状态:什么是 RUNNABLE?直接看它的 Javadoc 中的说明:“一个在 JVM 中执行的线程处于这一状态中。(A threadexecutingin the Java virtual machine is in this state.)而传统的进(线)程状态一般划分如下:“注...转载 2020-08-13 10:54:05 · 1060 阅读 · 1 评论 -
面试:你知道 Java 中的回调机制吗?
调用和回调机制在一个应用系统中, 无论使用何种语言开发, 必然存在模块之间的调用, 调用的方式分为几种:1. 同步调用同步调用是最基本并且最简单的一种调用方式, 类 A 的方法 a() 调用类 B 的方法 b(), 一直等待 b() 方法执行完毕, a() 方法继续往下走. 这种调用方式适用于方法 b() 执行时间不长的情况, 因为 b() 方法执行时间一长或者直接阻塞的话, a() 方法的余下代码是无法执行下去的, 这样会造成整个流程的阻塞.2. 异步调用异步调用是为了解决同步转载 2020-08-11 16:40:16 · 175 阅读 · 0 评论 -
面试:一个 Java 字符串到底有多少个字符?
依照Java的文档, Java中的字符内部是以UTF-16编码方式表示的,最小值是\u0000(0),最大值是\uffff(65535), 也就是一个字符以2个字节来表示,难道Java最多只能表示 65535个字符?“char: The char data type is a single 16-bit Unicode character. It has a minimum value of '\u0000' (or 0) and a maximum value of '\uffff' (or 6..转载 2020-08-06 10:30:09 · 273 阅读 · 0 评论 -
为什么 char 数组比 String 更适合存储密码?
另一个基于String的棘手 Java 问题,相信我只有很少的 Java 程序员可以正确回答这个问题。这是一个真正艰难的核心 Java 面试问题,并且需要对String的扎实知识才能回答这个问题。这是最近在Java 面试中向我的一位朋友询问的问题。他正在接受技术主管职位的面试,并且有超过6年的经验。如果你还没有遇到过这种情况,那么字符数组和字符串可以用来存储文本数据,但是选择一个而不是另一个很难。但正如我的朋友所说,任何与String相关的问题都必须对字符串的特殊属性有一些线索...转载 2020-08-06 09:52:45 · 1161 阅读 · 1 评论 -
手把手教你,Java如何实现二维码?【附源码】
作者:红颜祸水nvn来源:http://suo.im/5R6ewH步骤1第一步首先创建一个普通的 Maven 项目,然后要实现二维码功能,我们肯定要使用别人提供好的 Jar 包,这里我用的是 google 提供的 jar,pom.xml 文件配置如下:<?xml version="1.0"encoding="UTF-8"?><projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="...转载 2020-08-03 10:21:21 · 520 阅读 · 0 评论 -
在Java中异步编程,同事非要用rxJava,被我一顿吐槽!
在Java中异步编程,不一定非要使用rxJava, Java本身的库中的CompletableFuture可以很好的应对大部分的场景。这篇文章介绍 Java 8 的CompletionStage API和它的标准库的实现CompletableFuture。API通过例子的方式演示了它的行为,每个例子演示一到两个行为。既然CompletableFuture类实现了CompletionStage接口,首先我们需要理解这个接口的契约。它代表了一个特定的计算的阶段,可以同步或者异步的被完成。你可以把...转载 2020-07-30 09:05:19 · 526 阅读 · 0 评论 -
Java中 volatile 关键字的最全总结,快给自己查缺补漏吧!
作者:老鼠只爱大米来源:blog.youkuaiyun.com/u012723673/article/details/80682208一、简介volatile是Java提供的一种轻量级的同步机制。Java 语言包含两种内在的同步机制:同步块(或方法)和 volatile 变量,相比于synchronized(synchronized通常称为重量级锁),volatile更轻量级,因为它不会引起线程上下文的切换和调度。但是volatile 变量的同步性较差(有时它更简单并且开销更低),而且其使用也更容易出错.转载 2020-07-29 09:15:07 · 273 阅读 · 0 评论 -
StringBuider 在什么条件下使用效率更高?
引言都说StringBuilder在处理字符串拼接上效率要强于 String,但有时候我们的理解可能会存在一定的偏差。最近我在测试数据导入效率的时候就发现我以前对StringBuilder的部分理解是错误的。后来我通过实践测试 + 找原理 的方式搞清楚了这块的逻辑。现在将过程分享给大家测试用例我们的代码在循环中拼接字符串一般有两种情况 第一种就是每次循环将对象中的几个字段拼接成一个新字段,再赋值给对象 第二种操作是在循环外创建一个字符串对象,每次循环向该字符串拼接新的...转载 2020-07-29 09:06:25 · 233 阅读 · 0 评论 -
从 Java 9 开始,Java 就华丽的转身为微服务了…
继 2014 年 3 月Java 8发布之后,时隔 4 年,2018 年 9 月,Java 11 如期发布,其间间隔了 Java 9 和 Java 10 两个非LTS(Long Term Support)版本。作为最新的LTS版本,相比Java 8,Java 11 包含了模块系统、改用 G1 作为默认 GC 算法、反应式流 Flow、新版 HttpClient 等诸多特性。本文将介绍此次升级最重要的特性——模块系统。1 模块系统简介如果把Java 8比作单体应用,那么引入模块系统之后,...转载 2020-07-28 17:39:44 · 233 阅读 · 1 评论 -
终于弄明白 i = i++和 i = ++i 的区别了!
写在前面:前些天看完了JVM的内存结构,自以为自己是懂了,心里想想不就是分线程共享和线程私有嘛,然后又怎么怎么分怎么怎么的嘛…直到遇到了这道题目。说句实话,曾经自己做这种运算题目,完全是靠脑子空想,然后拿上笔颤抖的写下一个自己都不知道正不正确的答案。不过过了今天,我终于能确定它的答案了。为此,我也专门写一篇博客,记录我的学习!!!1、题目package pers.mobian.questions01;publicclasstest01{publicstaticv...转载 2020-07-28 09:14:33 · 991 阅读 · 1 评论 -
拥抱 Java 8 并行流吧,速度飞起!
前言在Java7之前,如果想要并行处理一个集合,我们需要以下几步: 手动分成几部分 为每部分创建线程 在适当的时候合并。并且还需要关注多个线程之间共享变量的修改问题。 而Java8为我们提供了并行流,可以一键开启并行模式。是不是很酷呢?让我们来看看吧并行流认识和开启并行流什么是并行流:并行流就是将一个流的内容分成多个数据块,并用不同的线程分别处理每个不同数据块的流。例如有这么一个需求:有一个 List 集合,而 list 中每个 apple 对象...转载 2020-07-24 15:46:33 · 195 阅读 · 0 评论 -
参数验证 @Validated 和 @Valid 的区别,Java Web 开发必备。
Spring Validation验证框架对参数的验证机制提供了@Validated(Spring's JSR-303 规范,是标准 JSR-303 的一个变种),javax提供了@Valid(标准JSR-303规范),配合 BindingResult 可以直接提供参数验证结果。其中对于字段的特定验证注解比如 @NotNull 等网上到处都有,这里不详述在检验 Controller 的入参是否符合规范时,使用 @Validated 或者 @Valid 在基本验证功能上没有太多区别。但是在分组、注解地方、转载 2020-07-23 16:42:20 · 282 阅读 · 0 评论 -
盘点 6 个被淘汰的 Java 技术,它们都曾经风光过!
大家好啊,今天栈长给大家分享下我的开发历程中,我知道的那些被淘汰的技术或者框架,有些我甚至都没有用过,但我知道它曾经风光过。废话不多说,下面我要开始吹了……1、Swing下面这个是用 swing 开发的:图来源网络,有没有似曾相识的感觉?懂的自然懂!栈长去年中秋也用过 swing:这个中秋,我用 Java 画了一个月饼!Swing 算是 Java 早期代替 AWT 的桌面应用 GUI 开发工具包,一个听到就已经淘汰的技术,给我的感觉就是丑丑丑!现在与 AWT 一起在时间这个长转载 2020-07-23 14:06:55 · 438 阅读 · 0 评论 -
Java 集合框架,看这篇真的够了!
话不多说,直接上图:Java 集合,也称作容器,主要是由两大接口 (Interface)派生出来的:Collection 和 Map顾名思义,容器就是用来存放数据的。那么这两大接口的不同之处在于: Collection 存放单一元素; Map 存放 key-value 键值对。 就是单身狗放 Collection 里面,couple 就放 Map 里。(所以你属于哪里?学习这些集合框架,我认为有 4 个目标: 明确每个接口和类的对应关系; 对每..转载 2020-07-23 14:01:21 · 224 阅读 · 0 评论 -
写的很好!细数 Java 线程池的原理
今天我们就来详细讲解一下Java的线程池,首先我们从最核心的ThreadPoolExecutor类中的方法讲起,然后再讲述它的实现原理,接着给出了它的使用示例,最后讨论了一下如何合理配置线程池的大小。Java 中的 ThreadPoolExecutor 类java.uitl.concurrent.ThreadPoolExecutor类是线程池中最核心的一个类,因此如果要透彻地了解Java 中的线程池,必须先了解这个类。下面我们来看一下 ThreadPoolExecutor 类的具体实现源码。在.转载 2020-07-22 09:29:02 · 202 阅读 · 0 评论 -
Java 编译期与运行期,别傻傻分不清楚!
来源:小小木的博客www.cnblogs.com/wyc1994666/p/11366802.html不知大家有没有思考过,当我们使用IDE写了一个Demo类,并执行main函数打印 hello world时都经历了哪些流程么?想通过这篇文章来分析分析Java的执行流程,或者换句话说想聊聊Java的编译期与运行期的流程。 开门见山 编译期间都做了什么 运行期间都做了什么 1. 开门见山publicclassMyApp{publi...转载 2020-07-18 11:22:15 · 1475 阅读 · 0 评论 -
云原生时代,Java还是Go?
Java曾经著名的座右铭:"一次编写,到处运行",已经很过时了,因为现在我们只想在容器里运行代码。在容器里,一个 "Just in time "的编译器意义不大。出于这个原因,可能为了更好地适应云计算,Java生态系统正处于转型之中。Oracle 的GraalVm允许将字节码编译成Linux可执行文件(ELF),而Rad Heat的Quarkus以及其他框架,则立志让响应式服务这件事变得更简单。Quarkus以Netty和Vertx.x为核心,可以用来构建非常高效的响应式Web服务。Java编译成转载 2020-07-16 09:22:14 · 871 阅读 · 1 评论 -
Java 应用线上问题排查思路、常用工具小结
前言本文总结了一些常见的线上应急现象和对应排查步骤和工具。分享的主要目的是想让对线上问题接触少的同学有个预先认知,免得在遇到实际问题时手忙脚乱。毕竟作者自己也是从手忙脚乱时走过来的。只不过这里先提示一下。在线上应急过程中要记住,只有一个总体目标:尽快恢复服务,消除影响。不管处于应急的哪个阶段,我们首先必须想到的是恢复问题,恢复问题不一定能够定位问题,也不一定有完美的解决方案,也许是通过经验判断,也许是预设开关等,但都可能让我们达到快速恢复的目的,然后保留部分现场,再去定位问题、解决问题和复盘。在转载 2020-07-13 09:13:04 · 754 阅读 · 0 评论 -
Java 线程池中的线程复用是如何实现的?
前几天,技术群里有个群友问了一个关于线程池的问题,内容如图所示:关于线程池相关知识可以先看下这篇:为什么阿里巴巴Java开发手册中强制要求线程池不允许使用Executors创建?那么就来和大家探讨下这个问题,在线程池中,线程会从 workQueue 中读取任务来执行,最小的执行单位就是 Worker,Worker 实现了 Runnable 接口,重写了 run 方法,这个 run 方法是让每个线程去执行一个循环,在这个循环代码中,去判断是否有任务待执行,若有则直接去执行这个任务,因此线程数不会增转载 2020-07-13 09:04:37 · 306 阅读 · 0 评论 -
想理解Java的IO,不要从操作系统开始说起的都是耍流氓...
前言在上一篇文章中,我们了解流的概念以及JavaIO流的基本用法,但JavaIO流的演化不仅是如此简单,有心的读者会发现,在JDK1.4之前的IO类都是基于阻塞的IO(可以从InputStream.read()方法实现中看到由synchronized修饰的代码块),发展到JDK1.4之后NIO提供了selector多路复用的机制以及channel和buffer,再到JDK1.7的NIO升级提供了真正的异步api......Java网络IO涵盖的知识体系很广泛,本文将简单介绍Java网络IO的相关知识转载 2020-07-10 10:26:02 · 290 阅读 · 0 评论 -
Java 的 JSP 已经被淘汰了吗?
以前的项目大多数都是java程序猿又当爹又当妈,又搞前端(ajax/jquery/js/html/css等等),又搞后端(java/mysql/Oracle等等)。随着时代的发展,渐渐的许多大中小公司开始把前后端的界限分的越来越明确,前端工程师只管前端的事情,后端工程师只管后端的事情,正所谓术业有专攻,一个人如果什么都会,那么他毕竟什么都不精。大中型公司需要专业人才,小公司需要全才,但是对于个人职业发展来说,我建议是分开。你要是这辈子就吃java这碗饭,就不要去研究什么css,js等等。把你的精转载 2020-07-06 13:36:14 · 795 阅读 · 1 评论