- 博客(39)
- 收藏
- 关注
原创 HashMap和HashTable的区别
(1)两者父类不同HashMap是继承自AbstractMap类,而Hashtable是继承自Dictionary类。不过它们都实现了同时实现了map、Cloneable(可复制)、Serializable(可序列化)这三个接口。(2)对外提供的接口不同Hashtable比HashMap多提供了elments() 和contains() 两个方法。elments() 方法继承自Hashtable的父类Dictionnary。elements() 方法用于返回此Hashtable中的value的枚举。
2021-10-12 16:00:05
180
原创 String StringBuffer 和 StringBuilder 的区别是什么?
String是只读字符串,它并不是基本数据类型,而是一个对象。从底层源码来看是一个final类型的字符数组,所引用的字符串不能被改变,一经定义,无法再增删改。每次对String的操作都会生成新的String对象。private final char value[];每次+操作 :隐式在堆上new了一个跟原字符串相同的StringBuilder对象,再调用append方法 拼接+后面的字符。StringBuffer和StringBuilder他们两都继承了AbstractStringBuilder抽象类,从
2021-10-11 17:48:47
280
原创 equals与==的区别
== :== 比较的是变量(栈)内存中存放的对象的(堆)内存地址,用来判断两个对象的地址是否相同,即是否是指相同一个对象。比较的是真正意义上的指针操作。(1)比较的是操作符两端的操作数是否是同一个对象。(2)两边的操作数必须是同一类型的(可以是父子类之间)才能编译通过。(3)比较的是地址,如果是具体的阿拉伯数字的比较,值相等则为true,如:int a=10 与 long b=10L 与 double c=10.0都是相同的(为true),因为他们都指向地址为10的堆。equals:equal
2021-10-11 17:46:32
317
原创 重载和重写的区别
重写(Override)从字面上看,重写就是 重新写一遍的意思。其实就是在子类中把父类本身有的方法重新写一遍。子类继承了父类原有的方法,但有时子类并不想原封不动的继承父类中的某个方法,所以在方法名,参数列表,返回类型(除过子类中方法的返回值是父类中方法返回值的子类时)都相同的情况下, 对方法体进行修改或重写,这就是重写。但要注意子类函数的访问修饰权限不能少于父类的。public class Father {public static void main(String[] args) {// TODO
2021-10-11 17:07:53
148
原创 Java自动装箱与拆箱
装箱就是自动将基本数据类型转换为包装器类型(int–>Integer);调用方法:Integer的valueOf(int) 方法拆箱就是自动将包装器类型转换为基本数据类型(Integer–>int)。调用方法:Integer的intValue方法在Java SE5之前,如果要生成一个数值为10的Integer对象,必须这样进行:Integer i = new Integer(10);而在从Java SE5开始就提供了自动装箱的特性,如果要生成一个数值为10的Integer对象,只需要这
2021-10-11 17:06:10
131
原创 Java中序列化,有一部分字段不想进行序列化
解决办法:transient关键字用对于不想被序列化的变量,用transient关键字修饰。transient关键字的作用就是:阻止用这个关键字修饰的不想被序列化的变量序列化;transient只能修饰变量,不能修饰类和方法。...
2021-10-11 17:02:18
529
转载 oppo手机永久打开USB调试模式
现象:十分钟不使用就会自动关闭 usb 调试模式,重新打开还得输入验证码,真尼玛烦人。方法: 数字拨号盘 输入 *#8011# 就可以永久打开.
2021-09-26 09:54:50
5370
原创 mybatis 打印sql执行日志
mybatis-plus:configuration:log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
2021-09-08 15:32:00
293
转载 Java 根据经纬度计算两点间的距离
Java实现public final class DistanceUtils { /** * 地球半径,单位 km */ private static final double EARTH_RADIUS = 6378.137; /** * 根据经纬度,计算两点间的距离 * * @param longitude1 第一个点的经度 * @param latitude1 第一个点的纬度 * @param lo
2021-08-03 14:41:58
9739
1
原创 MySQL集群架构
1、集群架构设计1.1 架构设计理念在集群架构设计时,主要遵从下面三个维度:可用性扩展性一致性1.2 可用性设计站点高可用,冗余站点服务高可用,冗余服务数据高可用,冗余数据保证高可用的方法是冗余(备份)。但是数据冗余带来的问题是数据一致性问题。实现高可用的方案有以下几种架构模式:主从模式:简单灵活,能满足多种需求。比较主流的用法,但是写操作高可用需要自行处理。双主模式:互为主从,有双主双写,双主单写两种方式,建议使用双主单写。1.3扩展性设计扩展性主要围绕着读操作扩展和写操
2021-07-28 16:19:09
271
原创 synchronized的实现原理与应用
在多线程并发编程中synchronized一直是元老级角色,很多人都会称呼它为重量级锁。但 是,随着Java SE 1.6对synchronized进行了各种优化之后,有些情况下它就并不那么重了。本文 详细介绍Java SE 1.6中为了减少获得锁和释放锁带来的性能消耗而引入的偏向锁和轻量级 锁,以及锁的存储结构和升级过程。先来看下利用synchronized实现同步的基础:Java中的每一个对象都可以作为锁。具体表现 为以下3种形式。·对于普通同步方法,锁是当前实例对象。·对于静态同步方法,锁是当前
2021-07-26 14:51:28
132
原创 MySQL事务和锁
1. ACID 特性在关系型数据库管理系统中,一个逻辑工作单位要成为事务,必须满足这4个特性,即所谓的ACID:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)。1.1 原子性原子性:事务是一个原子操作单元,其对数据的修改,要么全都执行,要么全都不执行。每一个写事务,都会修改BufferPool,从而产生相应的Redo/Undo日志,在BufferPool中的页被刷到磁盘之前,这些日志信息都会写入到日志文件中,如果Buffe
2021-07-26 10:56:56
241
原创 MySQL索引原理
1.索引类型索引可以提升查询速度,会影响where查询,以及order by排序。从索引存储结构划分:B Tree索引、Hash索引、FULLTEXT全文索引、R Tree索引从应用层次划分:普通索引、唯一索引、主键索引、复合索引从索引键值(字段)类型划分:主键索引、辅助索引(二级索引)从数据存储和索引键值逻辑关系划分:聚集索引(聚簇索引)、非聚集索引(非聚簇索引)1.1普通索引这是最基本的索引类型,基于普通字段建立的索引,没有任何限制。创建索引的方法如下:CREATE INDEX <
2021-07-20 17:07:35
277
转载 jdk unsafe类源码解析
一、CAS相关public final native boolean compareAndSwapObject(Object var1, long var2, Object var4, Object var5);public final native boolean compareAndSwapInt(Object var1, long var2, int var4, int var5);public final native boolean compareAndSwapLong(Object v
2021-07-16 11:10:51
208
转载 JDK1.8 Unsafe类中的park和unpark方法解析
park是Unsafe类中的native方法,LockSupport类通过调用Unsafe类的park和unpark提供了几个操作。Unsafe的park方法如下public native void park(boolean isAbsolute, long time);第一个参数判断是否是绝对时间,第二个参数是等待时间值。如果isAbsolute为true则会实现ms定时,如果isAbsolute为false则会实现ns定时。locksupport类常用的park方法如下,无参方法public
2021-07-16 11:07:37
911
原创 MyBatis中一级缓存
一级缓存是什么是一个hashmap对象,在SQL session中的clearCache方法跳转到DefaultSqlSession中的clearCache方法@Override public void clearCache() { executor.clearLocalCache(); }Executor接口里面的clearLocalCache方法——>BaseExecutor中的clearLocalCache方法@Override public void clearL
2021-02-05 12:20:37
117
转载 mybatis中的#{}和${}区别
#将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号。如:order by #user_id#,如果传入的值是111,那么解析成sql时的值为order by “111”, 如果传入的值是id,则解析成的sql为order by “id”.$将传入的数据直接显示生成在sql中。如:order by useriduser_iduserid,如果传入的值是111,那么解析成sql时的值为order by user_id, 如果传入的值是id,则解析成的sql为order by id...
2021-02-04 20:48:20
128
原创 Solr 811安装
solrSolr是一个高性能,基于Lucene的全文搜索服务器。同时对其进行了扩展,提供了比Lucene更为丰富的查询语言,同时实现了可配置、可扩展,并对查询性能进行了优化,并且提供了一个完善的功能管理界面,是一款非常优秀的全文搜索引擎。luceneLucene是apache jakarta项目的一个子项目,是一个开放源代码的全文检索引擎开发工具包,但它不是一个完整的全文检索引擎,而是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎,部分文本分析引擎。Lucene的目的是为软件开发人员提供一个简
2020-10-12 22:13:22
369
1
原创 Maven配置 - settings.xml
Maven配置 - settings.xml<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 https://maven.apache.org/xsd/set
2020-10-12 21:35:16
203
原创 安装Lombok插件(Eclipse)
下载https://projectlombok.org/双击jar文件安装选择eclipse目录,安装Lombok插件确认安装成功启动eclipse,在“关于”中确认Lombok插件已安装成功
2020-10-12 21:30:21
311
原创 (购物项目)超时订单的处理
业务说明说明:如果订单提交之后如果30分钟没有完成付款,则将订单状态改为6.表示订单交易关闭.问题:如何实现每个订单30分钟超时呀???思路1: 利用数据库的计时的函数每当order入库之后,可以添加一个函数30分钟之后修改状态.该方法不友好, 100万的订单刚刚入库. 100万个监听的事件.思路2: 利用消息队列的方式实现 redis 开启线程向redis中存储数据之后设定超时时间.当key一旦失效则修改数据库状态.Redis主要做缓存使用. 但是不合适.思路3:开启单独的一个线程(异步)
2020-10-07 20:34:24
1249
原创 SSO单点登录/登出(cookie优化)
单点登录实现策略需求说明要求用户只需要登录一次,那么就可以访问其他的认证系统,无需用户再次登录.如果采用如下的配置,则必然会出现用户频繁登录的现象.SSO介绍单点登录(SingleSignOn,SSO),就是通过用户的一次性鉴别登录。当用户在身份认证服务器上登录一次以后,即可获得访问单点登录系统中其他关联系统和应用软件的权限,同时这种实现是不需要管理员对用户的登录状态或其他信息进行修改的,这意味着在多个应用系统中,用户只需一次登录就可以访问所有相互信任的应用系统。这种方式减少了由登录产生的时间消
2020-10-07 20:31:30
1280
原创 SpringBoot整合Redis集群
入门案例测试 /** * redis集群的入门案例 * jedisCluster 操作整个redis集群,链接redis的所有的节点 */ @Test public void testCluster(){ Set<HostAndPort> sets = new HashSet<>(); sets.add(new HostAndPort("192.168.126.129", 7000));
2020-10-07 20:17:00
414
原创 Redis分片机制和集群搭建
需求数据如果需要在redis中进行海量的数据存储,如果只有一台redis显然不能实现该功能.如果通过扩大内存的方式也不能达到要求.因为时间都浪费在寻址中. 如何有效的存储海量的数据呢???Redis分片说明说明:一般采用多台redis,分别保存用户的数据,从而实现内存数据的扩容.对于用户而言:将redis分片当做一个整体,用户不在乎数据到底存储到哪里,只在乎能不能存.分片主要的作用: 实现内存扩容.Redis分片准备创建目录说明:在redis根目录中创建一个shards目录分片搭建策略
2020-10-07 19:55:23
2669
原创 AOP实现Redis缓存服务
1.1 现有代码的分析说明:1.虽然在业务层service中完成了代码的实现.但是该代码不具有复用性.如果换了其他的业务则需要重新编辑.2.由于缓存的代码写在业务层service中,所以代码的耦合性高,不方便以后的扩展.需求:1.能否实现代码的复用.2.能否降低代码的耦合性.1.2 AOP1.2.1 AOP作用名称:面向切面编程.一句话总结: 在不改变原有代码的条件下,对功能进行扩展.公式: AOP = 切入点表达式 + 通知方法.专业术语:1.连接点: 在执行正常的业务过程中满足
2020-10-07 19:33:56
474
原创 Linux中使用和搭建redis
1.关于服务缓存说明1.1 关于缓存机制的说明缓存机制主要的目的就是降低用户访问物理设备的频次.提供用户的查询的效率.衍生: 可以利用缓存服务器有效的降低用户访问数据库的压力.1 .2 缓存要素1.如果实现缓存需要使用什么样的数据存储结构??? K-V2.缓存服务的开发应该使用什么语言?? C语言3.缓存服务运行的环境在内存中.4.缓存服务运行环境在内存中 如果断电之后数据将全部删除. 持久化(磁盘)5.缓存的数据都在内存中,如果一直存储数据则必然导致内存溢出. 内存优化LRU算法/LF
2020-10-07 19:27:20
245
原创 主从 分库 MySQL
数据库热备份说明: 可以实现数据库实时的备份,保证数据尽可能不丢失.备份原理:数据库备份原理:1.当数据库主库执行更新操作时,会将更新的内容写入到二进制日志文件中. 并且写入二进制文件的过程是一个异步的过程.2.从库会开启IO线程去读取主库的二进制日志文件,之后写入中继(临时存储)日志中.3.从库会开启SQL线程去读取中继日志中的信息.之后将数据同步到从库中.上述的操作是由从库向主库获取数据, 所以从库理论上可以配置无数个(一般2-3台即可);安装从库mysql根据安装主库的顺序安装从库
2020-10-05 21:47:54
475
1
原创 使用Linux虚拟机遇到的问题
修改虚拟机的固定IP打开虚拟机–然后输入 vi /etc/sysconfig/network-scripts/ifcfg-ens33命令。修改网卡配置文件按 i 键进行编辑。修改入下,原有的配置不要删,只要按下面修改就好。没有的配置项新增上去就好打开以后可以看到默认的配置就是dhcp,然后onboot=no,表示不会随着系统的启动而启动。我们需要修改这个配置然后在下面创建两个值ip和子网掩码加在上图任何位置就ok了IPADDR=192.168.0.116(填你的ip)
2020-10-05 21:13:09
765
原创 Linux nginx安装和使用
1 下载nginx服务在官网找到合适的版本,右键复制连接地址说明:利用Linux中提供的远程下载机制可以将nginx安装包直接下载到指定的位置.命令:wget http://nginx.org/download/nginx-1.19.2.tar.gz2 解压Nginx服务命令: tar -xvf nginx-1.19.2.tar.gz3 安装nginx服务1).配置nginx环境2).编译nginxmake 3).安装nginxmake install 4).检查
2020-10-05 20:44:07
310
原创 在Linux里安装MariaDB数据库
用户工作目录cd /usr/local/src/部署Linux JDKjdk压缩包链接:https://pan.baidu.com/s/1x5EEk0vVTqe6tZffB3_KFQ 提取码:3ldj 上传JDK说明:需要将windows中的JDK部署到Linux中.上传的文件目录**/usr/local/src**下解压jdk命令:tar -xvf jdk-8u51-linux-x64.tar.gz修改文件名称说明:将JDK解压之后的文件 修改为jdk1.8整理文件
2020-10-05 20:10:47
598
原创 Dubbo入门
1.1SOA思想面向服务的架构(SOA)是一个组件模型,它将应用程序的不同功能单元(称为服务)进行拆分,并通过这些服务之间定义良好的接口和协议联系起来。接口是采用中立的方式进行定义的,它应该独立于实现服务的硬件平台、操作系统和编程语言。这使得构件在各种各样的系统中的服务可以以一种统一和通用的方式进行交互。概括:SOA思想要求按照业务将服务进行拆分,之后按照同一的中立的接口进行交互.1.2RPC(概念)远程过程调用:在服务之间,由第三方完成自己的任务的过程称之为远程过程调用.1.3微服务调用原
2020-10-04 16:29:27
216
原创 HttpClient入门
jar包依赖<!--添加httpClient jar包 --> <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> </dependency>入门案例package com.jt.test;impor
2020-10-04 15:42:34
165
原创 什么是索引
什么是索引:索引是数据库中用于提高查询效率的技术,类似于目录一个索引是存储的表中一个特定列的值数据结构(最常见的是B-Tree)。索引是在表的列上创建。所以,要记住的关键点是索引包含一个表中列的值,并且这些值存储在一个数据结构中。请记住记住这一点:索引是一种数据结构 。为什么使用索引:如果不使用索引,数据会零散的保存在磁盘块中,查询数据需要挨个遍历每一个磁盘块,直到找到数据为止,使用索引后会将磁盘块以树桩结构进行保存,查询数据时会大大降低磁盘块的访问数量,从而提高查询效率。索引是越多越好吗?不是
2020-09-27 22:12:41
1589
转载 MySql 什么是视图
(1)视图和表都是数据库中的对象,视图可以理解成一张虚拟的表,视图本质就是取代了一段SQL查询语句(2)为什么使用视图:可以起到SQL语句重用的作用,隐藏敏感信息视图的作用重用SQL、 隐藏敏感信息视图的分类简单视图(不包含去重、函数、分组、关联查询,可以进行增删改查)和复杂视图(和简单视图相反,只能查询)视图的定义视图是从一个或者几个基本表(或视图)导出的表。它与基本表不同,是一个虚表。数据库中只存放视图的定义,而不存放视图对应的数据,这些数据仍存放在原来的基本表中。所以一旦基本表中发
2020-09-27 22:01:26
257
原创 封装ObjectMapperUtil
为了降低工具API ObjectMapper中的异常处理,需要准备一些工具API简化代码的调用.方法1: 将任意的对象转化为JSON.方法2: 将任意的JSON串转化为对象.package com.jt.util;import com.fasterxml.jackson.core.JsonProcessingException;import com.fasterxml.jackson.databind.ObjectMapper;import org.springframework.util.S
2020-09-27 20:27:53
1677
1
原创 关于Eclipse和IDEA 代码上传gitee
安装git安装 git下载 git 安装文件idea 配置git的位置settings – 搜索git – path – Program Files\Git\bin\git.exe创建远程仓库登录gitee码云新建远程仓库:XXXEclipse上传Gitee创建本地仓库右键点项目 – team – sheare project选择任意一个空目录作为本地仓库目录提交右键点项目 – team – commit把文件添加到提交列表填写提交信息commit提交推送右键点项目 –
2020-09-27 20:11:17
287
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅