Java小数点数字和百分号数字之间的转换
小数点数字和百分号(百分比)需要进行两者之间相互转换。如代码:
1234567891011121314151617181920212223242526String s1 = "21.8%";String s2 = "-21.7%"; NumberFormat numberFormat = NumberFormat.getPercentInstance();try { Number n1 = numberFormat.parse(s1); Number n2 = numberFormat.parse(s2); Log.d("小数点字符串转百分数", n1.floatValue() + " , " + n2.floatValue()); // 小数点字符串转百分数: 0.218 , -0.217} catch (Exception e) { e.printStackTrace();} float f1 = 0.218f;float f2 = ...
深入学习G1垃圾收集器
G1 (Garbage-First) 垃圾收集器在是Java9的默认垃圾收集器。G1 的主要关注点在于达到可控的停顿时间,在这个基础上尽可能提高吞吐量。
如果你的应用使用了较大的堆(如 6GB 及以上)而且还要求有较低的垃圾收集停顿时间(如 0.5 秒),那么 G1 是你绝佳的选择。
从分代上看,G1依然属于分代垃圾回收器,它会区分年代和老年代,依然有eden和survivor区,但从堆的结构上看,它并不要求整个eden区、年轻代或者老年代都连续。
分代收集器将堆分为年轻代、老年代和永久代,每个代空间都是确定的。
而 G1 将整个堆划分为一个个大小相等的小块(每一块称为一个 region),在jvm启动时会设置 region 的数量,取决于堆的大小,每个 region 的大小可在 1MB ~ 32 MB调整,最好不要超过2048个 region 。和分代算法一样,G1 中每个块也会充当 Eden、Survivor、Old 三种角色,但是它们不是固定的,这使得内存使用更加地灵活。
执行垃圾收集时,和 CMS 一样,G1 收集线程在标记阶段和应用程序线程并发执行,标记结束后,G1 ...
linux查找日志技巧
linux 日志查找技巧
查询日志中含有某个关键字的信息cat app.log |grep 'error'关键字后10行日志cat app.log |grep -10 'error'
查询日志尾部最后10行的日志tail -n 10 app.log 实时更新日志tail -f app.log 从尾部查询日志,并过显示关键字后10行日志tail app.log |grep -10 'error'
查询10行之后的所有日志tail -n +10 app.log
查询日志文件中的头10行日志head -n 10 app.log
查询日志文件除了最后10行的其他所有日志head -n -10 app.log
查询日志中含有某个关键字的信息,显示出行号(在1的基础上修改)cat -n app.log |grep 'error'
显示102行,前10行和后10行的日志(不太好理解)cat -n app.log |tail -n +92|head -n 20
根据日期时间段查询(前提日志总必须打印日期, ...
mysql 查询设置事务隔离级别
查询mysql 5.7
1SELECT @@tx_isolation;
mysql 8.0
1select @@transation_isolation;
设置设置 seesion 级别为可重复读1set session transaction ISOLATION level repeatable read;
设置系统级别为可重复读1set global transaction ISOLATION level repeatable read;
所有的隔离级别
read uncommitted : 读未提交 (可以读到未提交的数据 (脏读) )
read committed : 读已提交 — oracle 默认隔离级别 (可能每次读取的数据结果不一致 (幻读))
repeatable read : 可重复读 — mysql 默认隔离级别 ( innodb 采用 mvcc 解决幻读问题)
serializable : 串行化 (类似锁,写数据必须等待另一个事务结束)
设置 事务不自动提交123set autocommit = 0 ;或者start transation;
提 ...
重学spring(三) Spring IOC 源码分析--获取单例Bean
简介上一篇文章演演示了Bean的生命周期,我们从容器中获取bean使用一般是 ctx.getBean("xxx"),但这个这个方法具体做了哪些事情我们并不知道,在这篇文章我将详细分析getBean("xxx")方法实现细节,代码比较长,分析不到位的地方,请见谅。
源码分析入口getBean(String)源码ctx.getBean("xxx") 调用了BeanFactory 接口的getBean(String name)方法,这里只分析getBean的主逻辑,其调用的方法放在后面分析。
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011 ...
重学spring(二) Spring中Bean的生命周期
Bean生命周期上篇文章讲了Bean的四种实例化的四种方式。在传统应用这Bean的生命周期很简单,使用new关键字进行Bean的实例化,不再使用则由GC进行回收,相比之下,Spring管理Bean的生命周期则比较复杂。
如下图:
该图描述了singleton类型Bean的实例化过程
Spring对Bean进行实例化;
Spring将值和对Bean的引用注入进Bean对应的属性中;
如果Bean实现了BeanNameAware接口,Spring将Bean的ID传递给setBeanName()接口方法;
如果Bean实现了BeanFactoryAware接口,Spring将调用setBeanFactory()接口方法,将BeanFactory容器实例传入;
如果Bean实现了ApplicationContextAware接口,Spring将调用setApplicationContext()接口方法,将应用上下文的引用传入;
如果Bean实现了BeanPostProcessor接口,Spring将调用它们的postProcessBeforeInitialization()接口方法;
如果 ...
重学spring(一) Spring中Bean实例化的四种方式
从工作开始到现在一直都有使用Spring,日常开发中总有spring的身影,但实话实讲,对spring的认识一直停留在使用阶段,只知其然。做技术当然不能这样,柄着知其所以然的态度,想系统的学习分析一下spring,无奈懒惰让我一直没有着手做。不积跬步,无以至千里,万事得开个头,终于下定决定写下第一篇。
tip: 本系列根据spring 5.2.6.RELEASE 进行分析。
引入spring依赖
123456789101112<dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>5.2.6.RELEASE</version></dependency><dependency> <groupId>org.springframework</groupId> <artifactId> ...
Java线上CPU占用过高问题排查--火焰图
日常开发过程中,有时会出现线上机器CPU飙高,这很可能导致服务宕机,造成线上事故。如何快速找出程序问题所在,是必须掌握的技巧,这里分享使用火焰图来定位问题。
首先得明白什么是火焰图。简单的讲:整个图形看起来就像一团跳动的火焰. 燃烧在火苗尖部的就是 CPU 正在执行的操作, 不过需要说明的是颜色是随机的, 本身并没有特殊的含义, 纵向表示调用栈的深度, 横向表示消耗的时间. 因为调用栈在横向会按照字母排序, 并且同样的调用栈会做合并, 所以一个格子的宽度越大越说明其可能是瓶颈. 所以, 主要就是看那些比较宽大的火苗, 特别留意那些类似平顶山的火苗.
要生成火焰图, 必须要有一个顺手的 Tracer 工具, 如果操作系统是 Linux 的话, 那么选择通常是 perf, systemtap 中的一种. 其中 perf 相对更常用, 因为它是 Linux Kernel 内置的性能调优工具, 多数 Linux 都包含了它, 有兴趣的读者稍后可以参考 Linux Profiling at Netflix 中的介绍.
火焰图生成工具常用的生成工具是Brendan D. Gregg 的 Flam ...
electron导出excel
前言最近在弄一个Electron小项目,需要生成并导出Excel文件,踩到了一些坑,记录一下,避免以后再翻车。
正文eletron进程分为主进程和渲染进程,文件导出在两个进程中实现不一样,这里主要讲使用json导出excel,其他格式导出方法类似,话不多说,直接上代码
在渲染进程中使用第一步: 安装 file-saver 和 xlsx
1yarn add file-saver xlsx
第二步:在要用的组件用中引入
123456789101112131415161718192021222324import FileSaver from 'file-saver'import XLSX from 'xlsx'// 需要导出的jsonconst json =[{ 'name':'weylan', 'sex':'男', 'age':18}]const exportExcel = ()=>{ c ...
spring中发布订阅模式实践
概述在实际开发中,经常会碰到要去解耦合一些依赖调用,比如单成功后会发送手机短信、发送绑定邮箱、数据库更新后通知发送mq等。而且通知这个操作又不希望强耦合在主业务流程中,这个时候我们很容易就想到了发布订阅(观察者)设计模式。
首先看代码实现:
定义事件类型
1234567891011121314151617import org.springframework.context.ApplicationEvent;public class MessageEvent extends ApplicationEvent { private String message; public MessageEvent(Object source, String message) { super(source); this.message = message; } public String getMessage() { return message; }}
定义监听类写 ...