- 博客(135)
- 收藏
- 关注
翻译 <? super T> and <? extends T> in Java
原文链接List<? super T>andList<? extends T>之间有什么区别呢?我可以常常在List<? super T>中使用add,但是无法对List<? extends T>使用add,这是为啥?举个栗子:对泛型List<? extends Number> foo3的三个声明如下:List<? extends Number> foo3 = new ArrayList<Number...
2021-01-05 23:03:20
440
原创 IEEE754浮点数以及移码的设计思想
首先复习一下关于“码”的知识点:二进制整数都是以补码形式出现的。正数的补码与反码、原码一致, 负数的补码是反码+1.这样使减法运算可以使用加法器实现,符号位也参与运算; 移码与补码就是符号位取反 移码的设计思想首先抛出结果: (E为阶码,e为真值)。移码的几何意义是把真值映射到一个正数域,其特点是可以直观地反映两个真值的大小,即移码大的真值也大。基于这个特点,对计算机来说用移码比较两个真值的大小非常简单,只要高位对齐后逐个比较即可,不用考虑负号的问题,这也是阶码会..
2020-12-27 13:42:20
2771
2
原创 FastJson解析字符串
一.需求:获取Json字符串中的某个字段值二.实现代码public class test { private static String COMPLEX_JSON_STR = "{\"status\":\"OK\",\"request_id\":\"159227615319652307143355\",\"result\":{\"searchtime\":0.064872,\"total\":1,\"num\":1,\"viewtotal\":1,\"compute_cost\":
2020-06-16 16:24:14
1483
转载 Volatile关键字
为什么会有这个关键字?计算机在执行程序时,每条指令都是在CPU中执行的,而执行指令过程中,会涉及到数据的读取和写入,但由于CPU执行速度很快,而从内存读取数据和向内存写入数据的过程跟CPU执行指令的速度比起来要慢的多,因此如果任何时候对数据的操作都要通过和内存的交互来进行,会大大降低指令执行的速度。因此在CPU里面就有了高速缓存。也就是,当程序在运行过程中,会将运算需要的数据从主存复制一份...
2019-12-29 15:42:56
216
转载 Cookie,Session,Token
我们知道HTTP是一种无状态的协议,为了分辨链接是谁发起的,需自己去解决这个问题。而且一旦数据交换完毕,客户端与服务器端的连接就会关闭,再次交换数据需要建立新的连接。这就意味着服务器无法从连接上跟踪会话。导致有些情况下即使是同一个网站每打开一个页面也都要登录一下。而Session和Cookie就是为解决这个问题而提出来的两个机制。同样的Token也能解决这个问题,它们之间只是一个说法的差别,其...
2019-12-29 15:28:25
203
原创 DCL失效分析
JAVA 单例双重检查(double check)为什么不好用在阅读之前,请先了解下线程并发涉及到的三个概念:原子性、可见性、有序性,可以看下这篇文章:http://www.cnblogs.com/dolphin0520/p/3920373.html我假设你已经看过几篇double check的文章,但还是一知半解。我们先看这种双重检查,不加volatilepub...
2019-11-21 21:28:20
313
原创 单例模式的破坏与保护
How to prevent Singleton Pattern from Reflection, Serialization and Cloning?1.Reflection2.Serialization3. Cloning创建对象的方法有四种:new 、克隆、序列化、反射。 单例模式就是,某一个类只能有一个实例,实现的核心就是将类的构造函数私有化,只能由该类创建对象...
2019-11-21 17:41:26
300
原创 创建线程的四种方式
1. 线程的创建有四种方式2. 继承Thread类3. 实现Runnable接口4.实现Callable接口5.线程池创建线程1. 线程的创建有四种方式,分别为:继承Thread类 实现Runnable接口 实现Callable接口 使用Executor框架创建线程池编写多线程程序是为了实现多任务的并发执行,从而能够更好地与用户交互。一般有四种方法,Thread,R...
2019-11-21 00:29:29
8116
原创 反射
JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。要想解剖一个类,必须先要获取到该类的字节码文件对象。而解剖使用的就是Class类中的方法.所以先要获取到每一个字节码文件对应的Class类型的对象。1、获取类(Class)对象获取...
2019-11-18 20:29:04
152
原创 Python处理Excel
1.读Excelimport xlrddata = xlrd.open_workbook(self.filename) # 打开文件names = data.sheet_names() # 获取当前Excel中所有的sheet的名字,(列表形式)table = data.sheet_by_name(name) ...
2019-11-18 10:43:21
543
原创 MVCC
多版本并发控制(Multi-Version Concurrency Control, MVCC)是 MySQL 的 InnoDB 存储引擎实现隔离级别的一种具体方式,用于实现提交读和可重复读这两种隔离级别。而未提交读隔离级别总是读取最新的数据行,无需使用 MVCC。可串行化隔离级别需要对所有读取的行都加锁,单纯使用 MVCC 无法实现。MVCC存在的意义:可以认为MVCC是行级锁的一个变种,但...
2019-11-10 20:46:42
198
原创 数据流中的中位数
1.题目描述2.分析3.解决思路4.代码实现1.题目描述如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。我们使用Insert()方法读取数据流,使用GetMedian()方法获取当前读取数据的中位数。2.分析这个题目读完之后,第一个想...
2019-10-21 22:53:28
378
原创 贪心:花最少的代价切分整块金条
题目描述:一块金条切成两半, 是需要花费和长度数值一样的铜板的。 比如长度为20的 金条, 不管切成长度多大的两半, 都要花费20个铜板。 一群人想整分整块金 条, 怎么分最省铜板?示例:例如,给定数组{10,20,30}, 代表一共三个人, 整块金条长度为10+20+30=60. 金条要分成10,20,30三个部分。如果, 先把长度60的金条分成10和50, 花费60 再把长度5...
2019-10-21 20:55:26
439
原创 平衡二叉树
输入一棵二叉树,判断该二叉树是否是平衡二叉树。方法一:public class Solution { public boolean IsBalanced_Solution(TreeNode root) { return process(root).isB; } public class ReturnData{ boolean is...
2019-10-13 17:03:30
128
原创 二叉树中找到一个节点的后继节点
1.后继节点:二叉树的中序遍历下,某节点的后一个节点就是后继节点。2.两种情况:节点有右子树:右子树中的最左节点就是该节点的后继节点。可以通过“左中右”顺序理解一下。 节点无右子树:一直向上查找,直到该节点是父节点的左孩子,即为后继节点。3.节点的数据结构,比一般情况下多了一个parent节点。该结构比普通二叉树节点结构多了一个指向父节点的parent指针。 假设有一 棵Node类型...
2019-10-13 15:53:24
958
原创 二叉树的递归遍历、非递归遍历、层次遍历
1.递归遍历2.非递归遍历3.层次遍历1.递归遍历在使用递归遍历的时候,每个节点会经过三次.public class PreInPosTraversal { public static class Node { public int value; public Node left; public Node right; public Node(int da...
2019-10-13 15:28:28
612
原创 判断一个链表是否为回文结构
1.题目描述2.解法一:时间O(N) ,空间O(N).3.解法二:时间O(N) ,空间O(N/2).4.解法三:时间O(N) ,空间O(1).1.题目描述【 题目】 给定一个链表的头节点head, 请判断该链表是否为回文结构。 例如: 1->2->1, 返回true。 1->2->2->1, 返回true。15->6->15, 返...
2019-10-13 10:25:48
251
原创 Comparator&&Comparable自定义比较器
1.自定义的比较器的实现步骤实现实现Comparator接口,并且重写compare方法。 在compare()方法中返回(可以根据返回数值来自定义升序或是降序):负数:表示第一个参数排在前面 正数:表示第二个参数排在前面 零:表示两个参数相等2.比较器应用的场景Arrays.sort(arr, new ImplComparator()) TreeSet<Student...
2019-10-13 00:39:38
837
原创 Java实现堆结构
public class HeapSort { // 堆排序O(nlogn) public static void heapSort(int[] arr) { if (arr == null || arr.length < 2) { return; } for (int i = 0; i < arr.length; i++) { heapIn...
2019-10-12 23:01:36
164
转载 如何实现大正整数相加?
原文链接在不使用BigInteger类的情况下,如何计算两个大正整数的和?程序不可能通过一条指令计算出两个大整数的和,但我们可以把一个大运算拆分成多个小运算, 像小学生一样列竖式进行按位运算。这里还有一个问题,我们都知道long类型的取值范围是: 12 最小值:Long.MIN_VALUE=-9223372036854775808 (-2的63次方)...
2019-10-11 15:26:17
445
原创 使用“前缀树”过滤敏感词
1.前缀树- 名称:Trie、字典树、查找树- 特点:查找效率高,消耗内存大- 应用:字符串检索、词频统计、字符串排序等2.敏感词过滤器- 定义前缀树- 根据敏感词,初始化前缀树- 编写过滤敏感词的方法3.代码实现@Componentpublic class SensitiveFilter { private static final Logger lo...
2019-10-09 20:52:39
487
原创 Queue、Deque、Stack
Table of Contents1.类图结构2.Queue3.Deque(Double Ended Queue双端队列)4.Stack1.类图结构2.Queue1.使用场景:需要出现队列的数据结构时,使用Queue.2.使用方法:Queue<Integer> queue = new LinkedList<>();3.Queue的方法...
2019-08-31 23:16:11
291
原创 List 之 ArrayList源码分析
List 之 ArrayList介绍类图结构 ArrayList 是一个数组队列,相当于动态数组。与Java中的数组相比,它的容量能动态增长。 ArrayList的适用场景:数组大小动态变化,效率高,查询多,不需要线程安全。 Arra...
2019-08-31 22:38:26
121
原创 array == null和array.length == 0的区别且注意写法
1.示例代码public static void main(String[] args) { int[] a; int[] b = null; int[] c = new int[3]; //System.out.println(a); //System.out.println(b); ...
2019-07-24 22:10:31
1592
原创 (三)Spring之依赖注入Bean属性
目录1.构造方法注入2.Setter方法注入3.集合注入4.注解注入5.P命名空间注入6.SpEL表达式1.构造方法注入2.Setter方法注入方法一:<bean id="user" class="com.gyf.spring.demo04.User"> <property name="username" value="zh...
2019-06-29 15:36:07
213
原创 (二)Spring之IoC
1.IoC百度解释百度百科:控制反转(Inversion of Control,缩写为IoC),是面向对象编程中的一种设计原则,可以用来减低计算机代码之间的耦合度。其中最常见的方式叫做依赖注入(Dependency Injection,简称DI),还有一种方式叫“依赖查找”(Dependency Lookup)。通过控制反转,对象在被创建的时候,由一个调控系统内所有对象的外界实体将其所依赖的对...
2019-06-29 15:05:27
98
原创 (一)Spring介绍
1.Spring介绍Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson 在其著作Expert One-On-One J2EE Development and Design中阐述的部分理念和原型衍生而来。它是为了解决企业应用开发的复杂性而创建的。Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Sp...
2019-06-27 10:45:09
168
原创 扫盲:DDL DML DCL
1.DDLDDL(Data Definition Language 数据定义语言)用于操作对象和对象的属性,这种对象包括数据库本身,以及数据库对象,像:表、视图等等,DDL对这些对象和属性的管理和定义具体表现在Create、Drop和Alter上。特别注意:DDL操作的“对象”的概念,”对象“包括对象及对象的属性,而且对象最小也比记录大个层次。以表举例:Create创建数据表,Alter可以更...
2019-05-11 14:57:00
278
原创 (Java实现)冒泡、插入、选择、堆、快速、归并、桶排序
1.冒泡排序public class Code_00_BubbleSort { public static void bubbleSort(int[] arr) { if (arr == null || arr.length < 2) { return; } for (int e = arr.length - 1; e > 0; e--) { for ...
2019-05-11 14:45:16
153
原创 Java使用“阻塞队列”和“wait、notify”实现生产者消费者模型
使用阻塞队列来实现//生产者public class Producer implements Runnable{ private final BlockingQueue<Integer> queue; public Producer(BlockingQueue q){ this.queue=q; } @Override pub...
2019-05-11 09:23:28
561
原创 单例模式的解释以及多种实现
1.什么是单例模式?2.如果理解单例模式做什么用?优缺点?使用场景?3.饿汉式和懒汉式:4.手撕单例模式1.饿汉 (这其实就是静态工厂方法)2. 线程不安全 + 懒汉3. 单锁线程安全 + 懒汉4. DCL双重检测(会失效版本)5. 正常版的双重检测实现单例(使用了volatile)6. 利用静态内部类实现线程安全的懒汉式单例模式7. 利用枚举实现单例1...
2019-05-04 21:57:15
392
原创 面向对象六大基本原则
1.开闭原则很多教程都把开闭原则作为这六大原则中最基本的原则,也就是说他是各个原则的核心。开闭原则指的是,一个软件实体如类、模块和函数应该对扩展开放,对修改关闭。对于开闭原则,我们在设计软件的时候,首先要搞清楚程序当中什么是未来可能变化的,什么是未来不会变化的。对于可能变化的东西,我们要提前给与可以对应的扩展接口。当然实际开发中,即便是我们认为这些不会变化的地方,未来还是可能变化的,这种变...
2019-05-04 21:07:51
2708
1
原创 MySQL——事务(Transaction)详解
一、事务定义Transaction 事务:一个最小的不可再分的工作单元;通常一个事务对应一个完整的业务(例如银行账户转账业务,该业务就是一个最小的工作单元) 一个完整的业务需要批量的DML(insert、update、delete)语句共同联合完成(DML:数据操纵语言,是SQL语言中,负责对数据库对象运行数据访问工作的指令集,以INSERT、UPDATE、DELETE三种指令为核心) ...
2019-05-04 20:50:40
1314
原创 深入理解Java虚拟机(一)
1 概述对于Java程序员来说,在虚拟机自动内存管理机制下,不再需要像C/C++程序开发程序员这样为内一个new 操作去写对应的delete/free操作,不容易出现内存泄漏和内存溢出问题。正是因为Java程序员把内存控制权利交给Java虚拟机,一旦出现内存泄漏和溢出方面的问题,如果不了解虚拟机是怎样使用内存的,那么排查错误将会是一个非常艰巨的任务。2 运行时数据区域Java虚拟机在执...
2019-04-28 18:56:21
112
转载 红黑树
一、定义红黑树的五个性质:一般的,红黑树(一棵自平衡的排序二叉树),满足以下性质,即只有满足以下性质的树,我们才称之为红黑树:1)每个结点要么是红的,要么是黑的。2)根结点是黑的。3)每个叶结点,即空结点(NIL)是黑的。4)如果一个结点是红的,那么它的俩个儿子都是黑的。5)对每个结点,从该结点到其子孙结点的所有路径上包含相同数目的黑结点。抓住了红黑树的那5个性质,...
2019-04-25 09:09:39
135
原创 Error和Exception,throw和throws的区别
1 Error类和Exception类1.1Error(错误)1.2Exception(异常)1.3常见的RuntimeException异常1.4常见的CheckedException异常2 throw和throws2.1 位置不同2.2 功能不同1 Error类和Exception类Error类和Exception类都是继承Throwable类1...
2019-04-23 22:29:38
1203
原创 摩尔投票法找到众数
给定一个大小为 n 的数组,找到其中的众数。众数是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素。你可以假设数组是非空的,并且给定的数组总是存在众数。示例 1:输入: [3,2,3]输出: 3示例 2:输入: [2,2,1,1,1,2,2]输出: 2这道题用摩尔投票法,这种方法是因为题目中说众数是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素。所以设置一个计数器,选定第一个值作为...
2019-04-23 14:48:26
173
转载 白话解析:一致性哈希算法consistent hashing
这把文章写的很好:http://www.zsythink.net/archives/1182
2019-04-22 21:59:58
1200
原创 AOP、AspectJ、Spring AOP、JDK动态代理、CGLib动态代理
Table of Contents1. AOP介绍2.AOP的实现3.Spring AOP的两种实现方式4.AspectJ实现示例5.JDK动态代理、CGLib动态代理 实现示例6.小结1. AOP介绍AOP称为面向切面编程,它是一种编程思想,是对OOP的补充,可以进一步提高编程效率,在程序开发中主要用来解决一些系统层面上的问题,比如日志,事务,权限等待,Strut...
2019-04-22 12:49:04
1371
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人