保存成功
订阅成功
保存失败,请重试
提交成功
草宝虫

草宝虫

架构师
草宝虫,现任某 IT 公司架构师、IT 写作者。精通多门编程语言,主攻 Java 后台、大数据开发,十多年项目经验,希望在 IT 领域发挥自己的光辉,给大家做一个启发或者引导。...更多
创作文章15

从底层重学 Java 之 String 字符串

从底层,从原理,我们来重学一次 Java。String 是字符串类,包含比特流与字符串的互转,字符串的常用切割、定位、相等判断,他的源码及实现是怎样的呢? 本系列秉承所有结论尽量从源码中来,没有源码的尽量标明出处。相关源码会附着在文章中,读本文即可,不用再自行查找源码及资料学习,方便大家充分利用路上的碎片时间。 本篇 Chat 对 String 的属性、构造函数、常用字符串处理进行逐一源码分析,帮助大家深入理解和学习 JDK 源码的牛掰优化。 本文包含以下内容: - 类信息 - 类的定义 - 类的继承结构 - 局部变量 - value - hash - 构造函数 - String() - String(String original) - String(StringBuffer buffer) - String(StringBuilder builder) - String(char value[]) - String(char[] value, boolean share) - String(char value[], int offset, int count) - String(int[] codePoints, int offset, int count) - Character.isBmpCodePoint(int codePoint) - Character.isValidCodePoint(int codePoint) - Character.toSurrogates(int codePoint, char[] dst, int index) - Character.highSurrogate(int codePoint) - Character.lowSurrogate(int codePoint) - String(byte bytes[], int offset, int length, String charsetName) - checkBounds(byte[] bytes, int offset, int length) - StringCoding.decode(String charsetName, byte[] ba, int off, int len) - StringCoding.deref(ThreadLocal<SoftReference<T>> tl) - StringCoding.lookupCharset(String csn) - StringCoding.StringDecoder - StringCoding.set(ThreadLocal<SoftReference<T>> tl, T ob) - CharSequence - 接口定义 - length() - charAt(int index) - subSequence(int start, int end) - toString() - chars() - codePoints() - length() - isEmpty() - charAt(int index) - getBytes(String charsetName) - getBytes(Charset charset) - getBytes() - StringCoding.encode(char[] ca, int off, int len) - System.exit(int status) - StringCoding.encode(String charsetName, char[] ca, int off, int len) - StringCoding.deref - StringCoding.set - StringCoding.lookupCharset(String csn) - StringCoding.set(ThreadLocal tl, T ob) - StringCoding.StringEncoder - StringCoding.safeTrim(byte[] ba, int len, Charset cs, boolean isTrusted) - Arrays.copyOf(byte[] original, int newLength) - CharsetEncoder.encode(CharBuffer in, ByteBuffer out, boolean endOfInput) - CharsetEncoder.flush(ByteBuffer out) - equals(Object anObject) - 为什么“==”不行呢? - contentEquals(StringBuffer sb) - contentEquals(CharSequence cs) - equalsIgnoreCase(String anotherString) - regionMatches(boolean ignoreCase, int toffset, String other, int ooffset, int len) - regionMatches(int toffset, String other, int ooffset, int len) - compareTo(String anotherString) - CASE_INSENSITIVE_ORDER - compareToIgnoreCase(String str) - startsWith(String prefix, int toffset) - startsWith(String prefix) - endsWith(String suffix) - hashCode() - indexOf(int ch) - indexOf(int ch, int fromIndex) - lastIndexOf(int ch) - lastIndexOf(int ch, int fromIndex) - indexOf(String str) - indexOf(String str, int fromIndex) - indexOf(char[] source, int sourceOffset, int sourceCount, String target, int fromIndex) - indexOf(char[] source, int sourceOffset, int sourceCount, char[] target, int targetOffset, int targetCount, int fromIndex) - lastIndexOf(String str) - lastIndexOf(String str, int fromIndex) - lastIndexOf(char[] source, int sourceOffset, int sourceCount, String target, int fromIndex) - lastIndexOf(char[] source, int sourceOffset, int sourceCount, char[] target, int targetOffset, int targetCount, int fromIndex) - substring(int beginIndex) - substring(int beginIndex, int endIndex) - subSequence(int beginIndex, int endIndex) - concat(String str) - getChars(char dst[], int dstBegin) - replace(char oldChar, char newChar) - matches(String regex) - contains(CharSequence s) - replaceFirst(String regex, String replacement) - replaceAll(String regex, String replacement) - replace(CharSequence target, CharSequence replacement) - split(String regex, int limit) - split(String regex) - join(CharSequence delimiter, CharSequence... elements) - join(CharSequence delimiter, Iterable<? extends CharSequence> elements) - StringJoiner - StringJoiner(CharSequence delimiter) - StringJoiner(CharSequence delimiter, CharSequence prefix, CharSequence suffix) - setEmptyValue(CharSequence emptyValue) - toString() - add(CharSequence newElement) - merge(StringJoiner other) - prepareBuilder() - length() - toLowerCase(Locale locale) - toLowerCase() - ConditionalSpecialCasing - toLowerCaseEx(String src, int index, Locale locale) - toUpperCaseEx(String src, int index, Locale locale) - toLowerCaseCharArray(String src, int index, Locale locale) - toUpperCaseCharArray(String src, int index, Locale locale) - lookUpTable(String src, int index, Locale locale, boolean bLowerCasing) - Entry - entry - entryTable - toUpperCase(Locale locale) - toUpperCase() - trim() - toString() - toCharArray() - format(String format, Object... args) - format(Locale l, String format, Object... args) - valueOf - valueOf(char data[]) - valueOf(char data[], int offset, int count) - copyValueOf(char data[], int offset, int count) - copyValueOf(char data[]) - valueOf(boolean b) - valueOf(char c) - valueOf(int i) - valueOf(long l) - valueOf(float f) - valueOf(double d) - intern() **适用人群**:有一些 Java 基础的人群。
12 订阅

Nacos 服务中心和配置中心入门

Eureka 停更,Consul 商业版对国内的限制让人很不爽,可还有我们用的方便的服务注册中心、配置中心不?且看阿里 Nacos 撑起…… Nacos 集成了服务发现中心和配置中心。可以替代断更的 Eureka 服务发现中心和 Spring Cloud Config 配置中心。 本文从 Nacos 部署、Spring Cloud 集成及集群使用三个方面讲解 Nacos,希望能够帮助大家上手 Nacos。 本文包含以下内容: - 简介 - Nacos 安装 - 下载 - 安装 - 源码编译方式 - Spring Cloud 集成 Nacos 配置中心 - 项目代码 - Nacos 配置 - 启动顺序 - Spring Cloud 集成 Nacos 服务中心 - 项目代码 - 运行效果 - order_service - user_service 集群启动 - Nacos 集群搭建 - Spring Cloud 连接 Nacos 集群 - 集群健壮性 - 总结 **适用人群**:有一些 Java 基础的人群。
微服务
126 订阅

从底层重学 Java 之 Stream 分离器及 Sink

从底层,从原理,我们来重学一次 Java。Stream 是 JDK 8 中新引入的,方便了数据列表的过滤、投影、遍历等各种处理,他的源码及实现是怎样的呢? 本系列秉承所有结论尽量从源码中来,没有源码的尽量标明出处。相关源码会附着在文章中,读本文即可,不用再自行查找源码及资料学习,方便大家充分利用路上的碎片时间。 分离器(Spliterator)用于遍历和切分集合元素,终端操作遍历直接就是调用分离器的遍历方法,并行处理是用分离器进行并行任务切分的。例如:Arrays.stream内部返回的 StreamSupport.stream(spliterator(array, startInclusive, endExclusive), false),第一个参数就是分离器(Spliterator)。 Sink 是在 Stream 的终端操作(如 forEach)进行处理时,AbstractPipeline.wrapSink 方法向上遍历管道阶段时,中间管道阶段 opWrapSink 方法实现返回的接口。过滤(filter)、投影(map)、排序(sorted)等中间操作的核心代码均写在 Sink 的接口实现中,可见Sink的重要性。 本篇 Chat 分析了分离器(Spliterator)相关源码,以及 Sink 源码,帮助大家深入理解和学习 JDK 源码。 本文包含以下内容: - Spliterators - spliterator(Collection c, int characteristics) - Objects.requireNonNull(T obj) - Spliterators.spliteratorUnknownSize(Iterator iterator, int characteristics) - IteratorSpliterator - 类定义 - 常量 - 构造函数 - IteratorSpliterator(Collection collection, int characteristics) - IteratorSpliterator(Iterator iterator, long size, int characteristics) - IteratorSpliterator(Iterator iterator, int characteristics) - Spliterator - 类的定义 - 方法 - tryAdvance(Consumer action) - forEachRemaining(Consumer action) - trySplit() - estimateSize() - getExactSizeIfKnown() - characteristics() - hasCharacteristics(int characteristics) - getComparator() - 常量 - ORDERED - DISTINCT - SORTED - SIZED - NONNULL - IMMUTABLE - CONCURRENT - SUBSIZED - Spliterator.OfPrimitive - Spliterator.OfInt - Spliterator.OfLong - Spliterator.OfDouble - Tripwire - 类的定义 - ENABLED - trip(Class<?> trippingClass, String msg) - ArraySpliterator - 属性 - 构造函数 - trySplit - forEachRemaining - tryAdvance - estimateSize - characteristics - getComparator - Sink - 接口定义 - 接口继承结构 - begin(long size) - end() - cancellationRequested() - accept(int value) - accept(long value) - accept(double value) - OfInt - OfLong - OfDouble - ChainedReference - ChainedInt - ChainedLong - ChainedDouble **适用人群**:有一些 Java 基础的人群。
Java
116 订阅

从底层重学 Java 之 Stream 并行及标志

从底层,从原理,我们来重学一次 Java。Stream 是 JDK 8 中新引入的,方便了数据列表的过滤、投影、遍历等各种处理,他的源码及实现是怎样的呢? 本系列秉承所有结论尽量从源码中来,没有源码的尽量标明出处。相关源码会附着在文章中,读本文即可,不用再自行查找源码及资料学习,方便大家充分利用路上的碎片时间。 本篇 Chat 分析了并行 forEach 各种情况的源码逻辑,以及流标记类 StreamOpFlag,帮助大家深入理解和学习 JDK 源码。 本文包含以下内容: - 并行 forEach - AbstractPipeline.parallel() - ReferencePipeline.Head.forEach(Consumer\<? super E_OUT\> action) - AbstractPipeline.isParallel() - ReferencePipeline.forEach(Consumer\<? super E_OUT\> action) - AbstractPipeline.evaluate - ForEachOps.ForEachOp.evaluateParallel - ForEachTask - ForkJoinTask.invoke - ForkJoinTask.doInvoke - ForkJoinTask.doExec - CountedCompleter.exec - ForEachTask.compute - Spliterators.ArraySpliterator - AbstractPipeline.copyInto - ForEachOp.OfRef - 拆分任务的执行 - ForkJoinWorkerThread.run - ForkJoinPool.runWorker - ForkJoinPool.WorkQueue.runTask - ForkJoinTask.doExec() - CountedCompleter.exec - 堆栈信息 - 并行进行一次中间操作的 forEach - ReferencePipeline.filter - ReferencePipeline.forEach(Consumer\<? super E_OUT\> action) - AbstractPipeline.evaluate - ForEachOps.ForEachOp.evaluateParallel - ForEachTask - ForkJoinTask.invoke - ForkJoinTask.doInvoke - ForkJoinTask.doExec - CountedCompleter.exec - ForEachTask.compute - Spliterators.ArraySpliterator - AbstractPipeline.copyInto - Spliterators.ArraySpliterator.forEachRemaining - ForEachOp.OfRef - 拆分任务的执行 - ForkJoinWorkerThread.run - ForkJoinPool.runWorker - ForkJoinPool.WorkQueue.runTask - ForkJoinTask.doExec() - CountedCompleter.exec - 堆栈信息 - StreamOpFlag - 创建流标记 - 处理流时判断 - 类定义 - 说明 - 枚举值 - DISTINCT - SORTED - ORDERED - SIZED - 保留位 - SHORT_CIRCUIT - Type - 标志int常量 - set(Type t) - MaskBuilder - 掩码表 - 获取特征 - 判断函数 - 掩码 - 标记 - getMask(int flags) - toCharacteristics(int streamFlags) - fromCharacteristics(Spliterator<?> spliterator) - fromCharacteristics(int characteristics) **适用人群**:有一些 Java 基础的人群。
Java
94 订阅

从底层重学 Java 之 Stream 初探

从底层,从原理,我们来重学一次 Java。Stream 是 JDK8 中新引入的,方便了数据列表的过滤、投影、遍历等各种处理,他的源码及实现是怎样的呢? 本系列秉承所有结论尽量从源码中来,没有源码的尽量标明出处。相关源码会附着在文章中,读本文即可,不用再自行查找源码及资料学习,方便大家充分利用路上的碎片时间。 本篇 Chat 从 Stream 示例开始,讲解构建 Stream 源码,分析了非并行 forEach 各种情况的源码逻辑,讲解了 Stream 的各个接口及应用示例,帮助大家深入理解和学习 JDK 源码。 本文包含以下内容: - 列表获取流 - Collection.stream() - 数组获取流 - Arrays.stream(T[] array) - Arrays.stream(T[] array, int startInclusive, int endExclusive) - 直接构建流 - Stream.of - StreamSupport - 构造函数 - stream(Spliterator<T> spliterator, boolean parallel) - Collection.spliterator() - fail-fast 快速失败机制 - 非并行 forEach - Stream 直接进行 forEach - Arrays.stream的forEach - Arrays.spliterator(T\[\] array, int startInclusive, int endExclusive) - Spliterators.spliterator(Object\[\] array, int fromIndex, int toIndex, int additionalCharacteristics) - ArraySpliterator.forEachRemaining(Consumer\<? super T> action) - 总结 - ArrayList Stream 的 forEach - Collection.stream() - ArrayList.spliterator() - ArrayList.ArrayListSpliterator - ArrayList.ArrayListSpliterator.forEachRemaining - 总结 - Stream 进行一次中间操作再 forEach - ReferencePipeline.filter - ReferencePipeline.StatelessOp - ReferencePipeline.forEach - ForEachOps - ForEachOps.makeRef(Consumer<? super T> action, boolean ordered) - ForEachOp - ForEachOp.OfRef - AbstractPipeline.evaluate - ForEachOps.ForEachOp.evaluateSequential - AbstractPipeline.wrapAndCopyInto - AbstractPipeline.wrapSink - AbstractPipeline.copyInto - Sink.ChainedReference - 总结 - Stream - 接口定义 - 接口继承结构 - filter(Predicate<? super T> predicate) - map(Function<? super T, ? extends R> mapper) - mapToInt(ToIntFunction<? super T> mapper) - mapToLong(ToLongFunction<? super T> mapper) - mapToDouble(ToDoubleFunction<? super T> mapper) - flatMap(Function<? super T, ? extends Stream<? extends R>> mapper) - flatMapToInt(Function<? super T, ? extends IntStream> mapper) - flatMapToLong(Function<? super T, ? extends LongStream> mapper) - flatMapToDouble(Function<? super T, ? extends DoubleStream> mapper) - distinct() - sorted() - sorted(Comparator<? super T> comparator) - peek(Consumer<? super T> action) - limit(long maxSize) - skip(long n) - forEach(Consumer<? super T> action) - forEachOrdered(Consumer<? super T> action) - toArray(IntFunction<A[]> generator) - reduce(T identity, BinaryOperator<T> accumulator) - reduce(BinaryOperator<T> accumulator) - reduce(U identity,BiFunction\<U, ? super T, U> accumulator,BinaryOperator\<U> combiner) - 调用示例1 - 调用示例2 - 调用示例3 - collect(Supplier\<R> supplier, BiConsumer\<R, ? super T> accumulator, BiConsumer\<R, R> combiner) - 调用示例1 - 调用示例2 - 调用示例3 - collect(Collector\<? super T, A, R> collector) - 流转 List 示例 - GroupBy 分组示例 - min(Comparator\<? super T> comparator) - max(Comparator<? super T> comparator) - count() - anyMatch(Predicate\<? super T> predicate) - 调用示例1 - 调用示例2 - allMatch(Predicate\<? super T> predicate) - 调用示例1 - 调用示例2 - noneMatch(Predicate\<? super T> predicate) - 调用示例1 - 调用示例2 - findFirst() - findAny() - builder() - empty() - of(T t) - Stream\<T> of(T... values) - iterate(final T seed, final UnaryOperator\<T> f) - Streams.NONE - Spliterators.spliteratorUnknownSize(Iterator\<? extends T> iterator, int characteristics) - 调用示例 - generate(Supplier<T> s) - StreamSpliterators - StreamSpliterators.InfiniteSupplyingSpliterator - StreamSpliterators.InfiniteSupplyingSpliterator.OfRef\<T> - 调用示例 - concat(Stream\<? extends T> a, Stream\<? extends T> b) - Streams.composedClose(BaseStream\<?, ?> a, BaseStream\<?, ?> b) - Throwable.addSuppressed(Throwable exception) - Throwable.SUPPRESSED_SENTINEL - Throwable.suppressedExceptions - Stream.Builder - accept(T t) - add(T t) - build() - BaseStream - 接口定义 - 接口继承结构 - AutoCloseable - 接口定义 - 接口继承结构 - close() - try-with-resources **适用人群**:有一些 Java 基础的人群。
Java
96 订阅

从底层重学 Java 之 Character 字符型

从底层,从原理,我们来重学一次 Java。Character 是char(字符)的封装类,是 String 用于字符存储的类型,他的源码及实现是怎样的呢? 本系列秉承所有结论尽量从源码中来,没有源码的尽量标明出处。相关源码会附着在文章中,读本文即可,不用再自行查找源码及资料学习,方便大家充分利用路上的碎片时间。 本篇 Chat 对 Character 的属性、构造函数、字符数据等进行逐一源码分析,帮助大家深入理解和学习 JDK 源码。 本文包含以下内容: - 类信息 - 类的定义 - 类的继承结构 - 常量 - 进制数范围 - char 类型值域 - 基本类型 - 一般类别 - 位数、字节数 - Subset - UnicodeBlock - 类定义 - map - 构造函数 - 各块静态常量 - blockStarts - blocks - of(char c) - of(int codePoint) - forName(String blockName) - UnicodeScript - scriptStarts - scripts - aliases(别名) - of(int codePoint) - Character.isValidCodePoint(int codePoint) - Character.getType(int codePoint) - CharacterData.of(int ch) - CharacterDataLatin1 - Arrays.binarySearch(int[] a, int key) - forName(String scriptName) - value 属性 - 构造函数 - CharacterCache - valueOf - charValue - hashCode - equals - toString - toString() - String.valueOf(char data[]) - String的String(char value[])构造函数 - Arrays.copyOf(char[] original, int newLength) - toString(char c) - String.valueOf(char c) - String(char[] value, boolean share) - 比较两者 - 几个判断函数 - isValidCodePoint(int codePoint) - isBmpCodePoint(int codePoint) - isSupplementaryCodePoint(int codePoint) - isHighSurrogate(char ch) - isLowSurrogate(char ch) - isSurrogate(char ch) - isSurrogatePair(char high, char low) - charCount(int codePoint) - 大小写判断 - 小写判断 - 大写判断 - 大小写转换 - 转小写 - toLowerCase(char ch) - toLowerCase(int codePoint) - 转大写 …… **未完待续** **适用人群**:有一些 Java 基础的人群。
Java
116 订阅

从底层重学 Java 之 BigInteger 大整数

从底层,从原理,我们来重学一次 Java。BigInteger 是大整数计算类,是 BigDecimal 用于存储大数属性的类型,BigDecimal 中很多计算就是基于 BigInteger 的函数进行计算的,采用了多种优化的算法实现,他的源码及实现是怎样的呢? 本系列秉承所有结论尽量从源码中来,没有源码的尽量标明出处。相关源码会附着在文章中,读本文即可,不用再自行查找源码及资料学习,方便大家充分利用路上的碎片时间。 本篇 Chat 对 BigInteger 的属性、构造函数、四则运算、位移等进行逐一源码分析,帮助大家深入理解和学习 JDK 源码的牛掰优化。 本文包含以下内容: - 类信息 - 类的定义 - 类的继承结构 - 静态代码块 - 静态代码块 1 及相关的常量 - MAX_CONSTANT - posConst - negConst - 静态代码块 2 及相关的常量 - zeros - 常量 - 属性 - signum - mag - 构造函数 - BigInteger(int[] magnitude, int signum) - BigInteger.ZERO - 三个静态数组 - bitsPerDigit - digitsPerInt - intRadix - BigInteger(String val) - private BigInteger(long val) - 四则运算 - 加 - add(BigInteger val) - int compareMagnitude(BigInteger val) - int[] add(int[] x, int[] y) - int[] subtract(int[] big, int[] little) - 减 - 乘 - BigInteger multiply(BigInteger val) - BigInteger multiply(BigInteger val, boolean isRecursion) - BigInteger multiplyByInt(int[] x, int y, int sign) - int[] multiplyToLen(int[] x, int xlen, int[] y, int ylen, int[] z) - Karatsuba 算法 - 实现原理 - BigInteger multiplyKaratsuba(BigInteger x, BigInteger y) - BigInteger getLower(int n) - BigInteger getUpper(int n) - BigInteger abs() - Integer.numberOfLeadingZeros() - Toom-Cook 3 路算法 - BigInteger multiplyToomCook3(BigInteger a, BigInteger b) - BigInteger getToomSlice(int lowerSize, int upperSize, int slice,int fullsize) - exactDivideBy3 - 平方计算 - implSquareToLen - squareKaratsuba - squareToomCook3 - 除 - BigInteger divide(BigInteger val) - Knuth 算法 - MutableBigInteger - MutableBigInteger.divideKnuth - divideOneWord - divideMagnitude - Integer.numberOfTrailingZeros - copyAndShift - Burnikel-Ziegler 算法 - 算法文章 - 第一步计算 - divide2n1n - divide3n2n - divideAndRemainderBurnikelZiegler主算法 - Arrays.fill - 位运算 - 左移 - 右移 - valueOf - 其他计算及比较 - BigInteger abs() **适用人群**:有一些 Java 基础的人群。
Java
122 订阅

从底层重学 Java 之两大浮点类型

从底层,从原理,我们来重学一次 Java。两大 Java 浮点类 Double、Float 是我们比较常用的对象,他们的源码及实现是怎样的呢? 本系列秉承所有结论尽量从源码中来,没有源码的尽量标明出处。相关源码会附着在文章中,读本文即可,不用再自行查找源码及资料学习,方便大家充分利用路上的碎片时间。 本篇 Chat 对两大浮点类型的常量、构造函数、常用函数等进行逐一源码分析,帮助大家深入理解和学习 JDK 源码的牛掰优化。 本文包含以下内容: - Double - IEEE 754 Double 的存储原理 - 符号位 - 指数位 - 尾数位 - 示例 25.375 - 二进制转换 - 转成科学计数法 - 拆分 - 存储 - 浮点字面值(FloatingPointLiteral) - 十进制浮点字面值(DecimalFloatingPointLiteral) - 十六进制浮点字面值(HexadecimalFloatingPointLiteral) - 常量 - 构造函数 - parseDouble(String s) - FloatingDecimal.parseDouble(s) - 特殊值判断 - boolean isNaN() - boolean isInfinite() - static boolean isInfinite(double v) - static boolean isFinite(double d) - valueOf - Double valueOf(double d) - Double valueOf(String s) - 类型转换 - toString - String toString() - String toString(double d) - hashCode - int hashCode() - static int hashCode(double value) - static long doubleToLongBits(double value) - static native long doubleToRawLongBits(double value) - 计算比较 - boolean equals(Object obj) - double sum(double a, double b) - double max(double a, double b) - Math.max(double a, double b) - double min(double a, double b) - double Math.min(double a, double b) - Float - IEEE 754 Float 的存储原理 - 符号位 - 指数位 - 尾数位 - 示例 25.375 - 二进制转换 - 转成科学计数法 - 拆分 - 存储 - 浮点字面值(FloatingPointLiteral) - 十进制浮点字面值(DecimalFloatingPointLiteral) - 十六进制浮点字面值(HexadecimalFloatingPointLiteral) - 常量 - 构造函数 - Float(float value) - Float(double value) - Float(String s) - float parseFloat(String s) - FloatingDecimal.parseFloat(String s) - 特殊值判断 - boolean isNaN() - boolean isInfinite() - static boolean isInfinite(float v) - static boolean isFinite(float d) - valueOf - Float valueOf(float d) - Float valueOf(String s) - 类型转换 - toString - String toString() - String toString(float d) - hashCode - int hashCode() - static int hashCode(float value) - static int floatToIntBits(float value) - static native int floatToRawIntBits(float value) - 计算比较 - boolean equals(Object obj) - float sum(float a, float b) - float max(float a, float b) - Math.max(float a, float b) - float min(float a, float b) - Math.min(float a, float b) **适用人群**:有一些 Java 基础的人群。
Java
85 订阅

从底层重学 Java 之四大整数

从底层,从原理,我们来重学一次 Java。四大 Java 整数类 Byte、Short、Integer、Long 是我们比较常用的对象,他们的源码及实现是怎样的呢? 本系列秉承所有结论尽量从源码中来,没有源码的尽量标明出处。相关源码会附着在文章中,读本文即可,不用再自行查找源码及资料学习,方便大家充分利用路上的碎片时间。 本篇 Cha t对四大整数的常量、构造函数、常用函数等进行逐一源码分析,帮助大家深入理解和学习 JDK 源码的牛掰优化。 本文包含以下内容: - Integer - 常量 - 构造函数 - valueOf - decode 解码 - 类型转换 - toString - hashCode - 计算比较 - Long - 常量 - 构造函数 - valueOf - decode 解码 - 类型转换 - toString - hashCode - 计算比较 - Short - 常量 - 构造函数 - valueOf - decode 解码 - 类型转换 - toString - hashCode - 计算比较 - Byte - 常量 - 构造函数 - valueOf - decode 解码 - 类型转换 - toString - hashCode - 计算比较 **适用人群**:有一些 Java 基础的人群。
Java
100 订阅

Java JVM 汇编代码入门

为什么 new Integer(151)=151?我来带你们一起学习下 JVM 汇编代码吧,窥探下神奇的 Java 中间语言到底什么样子的,能帮你更深入的理解 Java。 本文包含以下内容 - 工具介绍 - JVM 汇编代码初见 - 汇编初步分析 - 局部变量生命周期 - 基础类型 - 大于 5 的数字,递增 2 - byte 范围之外的数字怎么处理? - Integer 与 Int 比较问题分析 - 二维数组操作 - 只有一个单参数的构造函数 - New 对象 **适用人群**:适合有一点 Java 基础的人学习
Java
117 订阅

快速入门系列之 Rust 语言

Rust 是一枚新星,兼顾开发效率和执行效率的语言。本文以实例为导向,讲解 Rust 这门语言,适合有一定其他面向对象语言基础的人员快速入门。 本文将讲解如下内容: - Hello World 从头起 - 各种类型各种算 - 各式流程来控制 - 数组集合一锅出 - 找些对象侃一侃 适用人群:有面向对象语言基础的同学
Rust
125 订阅

快速入门系列之 Scala 语言

Scala 是一门多范式的编程语言,设计初衷是要集成面向对象编程和函数式编程的各种特性。目前常应用于 Spark、后端开发等,Twitter 等公司也选择其作为后端语言。 本文以实例为导向,讲解 Scala 这门语言,适合有一定其他面向对象语言基础的人员快速入门。 本文将讲解如下内容: - Hello World 从头起 - 各种类型各种算 - 各式流程来控制 - 数组集合一锅出 - 找些对象侃一侃 适用人群:有面向对象语言基础的同学
Scala
114 订阅

Apache Nifi 实战:多表导入实现及填坑

NiFi 是美国国家安全局开发并使用了 8 年的可视化数据集成产品,2014 年 NAS 将其贡献给了 Apache 社区,2015 年成为 Apache 顶级项目。 大数据平台都需要进行数据流转,Apache Nifi 作为一款强大的数据流开源软件,支持大量的输入输出方式,能够对数据进行灵活的处理,拥有基于 Web 的可视化操作页面。 在本场 Chat 中,会讲到如下内容: - 多表导入需求 - 需求分析 - 数据准备 - PartitionRecord Processor 介绍(数据按条分割+提取属性) - Nifi 变量处理 - 多表导入流程配置实战 - 限制内存中的数据量 - Nifi 官方源码上直接开发 Processor - PutDatabaseRecord 字段自动去下划线问题分析 - PutDatabaseRecord 插件双引号增加问题分析及处理 **适合人群:** 对大数据平台、数据流、ETL 感兴趣的技术或运维人员
大数据
103 订阅

Apache Nifi 入门与进阶

NiFi 是美国国家安全局开发并使用了 8 年的可视化数据集成产品,2014 年 NAS 将其贡献给了 Apache 社区,2015 年成为 Apache 顶级项目。 大数据平台都需要进行数据流转,Apache Nifi 作为一款强大的数据流开源软件,支持大量的输入输出方式,能够对数据进行灵活的处理,拥有基于 Web 的可视化操作页面。 在本场 Chat 中,会讲到如下内容: - Apache Nifi 介绍与部署 - Apache Nifi 配置 MySQL 数据库的数据流转 - Apache Nifi 配置基于 JSON 的复杂数据流转 - Apache Nifi Api 调用 - Apache Nifi Processor 处理插件开发 **适合人群:** 对大数据平台、数据流、ETL感兴趣的技术或运维人员
严选数据可视化
177 订阅

Spring Cloud 与 Consul 的整合使用

Spring Cloud 热度日益提升,注册中心、配置中心的选型是一个必然面对的问题。 Eureka 2.0 开源工作宣告停止,Zookeeper 略显笨重,Consul 是某种业务场景下相对较好的选择。Consul 部署简单,兼具注册中心和配置中心,Go 语言带来的高效,可集群部署实现高可用,是 Spring Cloud 的较好搭配。 本场 Chat 将与大家分享 Spring Cloud 选择 Consul 作为注册中心和配置中心的整合过程,与大家分享将 Consul 作为 Spring Cloud 注册中心和配置中心的应用实践及感悟。 适合有意向或正在使用 Consul 作为 Spring Cloud 配套的 Java 开发人员。 本场 Chat 你讲学到如下内容: 1. 了解 Spring Cloud 采用 Consul 作为注册中心该如何实现。 2. 了解 Spring Cloud 采用 Consul 作为配置中心该如何实现。
免费Spring Cloud
249 订阅