-
2021-03-07 03:49:35
7.JAVA之GUI编程鼠标事件
鼠标事件: 功能: 1.基本窗体功能实现 2.鼠标移动监听,当鼠标移动到按钮上时,触发打印事件. 3.按钮活动监听,当按钮活动时,触发打印事件. 4.按钮被单击时触发打印事件. 源码如下: impor ...
go语言文件操作,这期资料比较详细( 欢迎加入go语言群: 218160862 )
go语言文件操作,这期资料比较详细 欢迎加入go语言群: go语言深圳群 golang深圳 218160862 点击加入 文件操作 func Open(name string) (file *File ...
crossplatform---bower解决js的依赖管理
从零开始nodejs系列文章,将介绍如何利Javascript做为服务端脚本,通过Nodejs框架web开发.Nodejs框架是基于V8的引擎,是目前速度最快的Javascript引擎.chrome浏 ...
[译]36 Days of Web Testing(三)
Day 14: Automate the tedious Why ? 有些时候,web测试还是蛮单调乏味的,在开始测试前,你可能要必须跳转到一个特定的表单页面,或则为了得到一个特定的页面(或配置),你 ...
MySQL ERROR 1045错误解决办法
今天在安装MySQL数据库时,有安装过程中报ERROR 1045错误,网上查了一下,解决方法如下: 1.对于安装过程中该错选择"skip"继续向下安装,完成安装: 2.在MySQL ...
oc 可变參数传递
- (id)initWithFrame:(CGRect)frame delegate:(id)delegate focusImageI ...
ASP.NET 会话状态的模式
ASP.NET 会话状态为会话数据提供了几个不同的存储选项.每个选项都通过一个 SessionStateMode 枚举值进行识别.如下列表中描述了可用的会话状态模式: InProc 模式:把会话状态存 ...
高效判断奇偶性,利用位运算符&;
这种位运算判断奇偶性,在程序和数据库里面都是可以用的 public static bool isOdd(i) { return (i&1)!=0 } 最小奇数是:1 最小偶数是:0 所 ...
python正则表达式Re模块备忘录
title: python正则表达式Re模块备忘录 date: 2019/1/31 18:17:08 toc: true --- python正则表达式Re模块备忘录 备忘录 python中的数量词为 ...
更多相关内容 -
Java读取json文件,并转化为map取值
2021-05-12 15:55:02Java读取json文件,并转化为map取值,并附上相关jar包 -
Java读取json文件并对json数据进行读取、添加、删除与修改操作
2019-04-01 22:33:21开发过程中经常会遇到json数据的处理,而单独对json数据进行增删改并不方便,尤其是Geojson文件的处理,通过对网络资料的整理总结,下面介绍Java语言方法对json数据进行读取、添加、删除与修改操作。 -
字节面试官:java读取json文件并解析
2021-07-19 20:43:45高并发多线程面试解析与拓展 jvm面试专题与解析 JVM 由哪些部分组成? JVM 内存划分? Java 的内存模型? 引用的分类? GC什么时候开始? JVM面试专题解析与拓展! SP-1626698615301)] jvm面试专题与解析 JVM 由哪些...缓存维护方案一
如果是一读(线程B)一写(线程A)操作,「先操作缓存,再操作数据库」。流程图如下所示:
-
1.线程A发起一个写操作,第一步del cache
-
2.线程A第二步写入新数据到DB
-
3.线程B发起一个读操作,cache miss缓存失效了。
-
4.线程B从DB获取最新数据
-
5.线程B执行set cache,把从DB读到的数据,更新到缓存。
「这样看,没啥问题」。我们再看第二个流程图,如下:
-
1.线程A发起一个写操作,第一步del cache
-
2.此时线程B发起一个读操作,cache miss
-
3.线程B继续读DB,读出来一个老数据
-
4.然后老数据设置入cache
-
5.线程A写入DB最新的数据
OK,酱紫,就有问题了吧,老数据入到缓存了,「每次读都是老数据啦,缓存与数据与数据库数据不一致了」。
缓存维护方案二
上个方案是一读一写,如果是双写操作,「先操作缓存,再操作数据库」,会怎么样呢?
-
1.线程A发起一个写操作,第一步set cache
-
2.线程A第二步写入新数据到DB
-
3.线程B发起一个写操作,set cache
-
4.线程B第二步写入新数据到DB
「这样看,也没啥问题。」,但是有时候可能事与愿违,我们再看第二个流程图,如下:
-
1.线程A发起一个写操作,第一步set cache
-
2.线程B发起一个写操作,第一步set cache
-
3.线程B写入数据库到DB
-
4.线程A写入数据库到DB
执行完后,缓存保存的是B操作后的数据,数据库是A操作后的数据,「缓存和数据库数据不一致」。
缓存维护方案三
一写(线程A)一读(线程B)操作,「先操作数据库,再操作缓存」。
-
1.线程A发起一个写操作,第一步write DB
-
2.线程A第二步del cache
-
3.线程B发起一个读操作,cache miss
-
4.线程B从DB获取最新数据
-
5.线程B同时set cache
「有些朋友可能认为,在第2步删除缓存之前,线程B读过来呢?这时候,读到的是缓存老数据,这个可以认为是正常业务逻辑呀,下次再读取就是正确数据了。」
这种方案**「没有明显的并发问题」,但是有可能「步骤二删除缓存失败」,虽然概率比较小,「优于方案一和方案二」**,平时工作中也是使用方案三。
综上对比,我们一般采用方案三,但是有没有完美全解决方案三的弊端的方法呢?
缓存维护方案四
这个是方案三的改进方案,都是先操作数据库再操作缓存,我们来看一下流程图:
通过数据库的**「binlog」来「异步淘汰key」,以mysql为例 可以「使用阿里的canal将binlog日志采集发送到MQ队列」里面,然后「通过ACK机制 确认处理」** 这条更新消息,删除缓存,保证数据缓存一致性。
但是呢还有个问题,「如果是主从数据库呢」?
缓存维护方案五
主从DB问题:因为主从DB同步存在延时时间。如果删除缓存之后,数据同步到备库之前已经有请求过来时,「会从备库中读到脏数据」,如何解决呢?解决方案如下流程图:
缓存维护总结
综上所述,在分布式系统中,缓存和数据库同时存在时,如果有写操作的时候,「先操作数据库,再操作缓存」。如下:
- 1.读取缓存中是否有相关数据
- 2.如果缓存中有相关数据value,则返回
- 3.如果缓存中没有相关数据,则从数据库读取相关数据放入缓存中key->value,再返回
- 4.如果有更新数据,则先更新数据库,再删除缓存
- 5.为了保证第四步删除缓存成功,使用binlog异步删除
- 6.如果是主从数据库,binglog取自于从库
- 7.如果是一主多从,每个从库都要采集binlog,然后消费端收到最后一台binlog数据才删除缓存
最后
给读者们一个小福利,有需要这些资料的朋友们可以点击我,即可免费领取资料!
ActiveMQ消息中间件面试专题
- 什么是ActiveMQ?
- ActiveMQ服务器宕机怎么办?
- 丢消息怎么办?
- 持久化消息非常慢怎么办?
- 消息的不均匀消费怎么办?
- 死信队列怎么办?
- ActiveMQ中的消息重发时间间隔和重发次数吗?
ActiveMQ消息中间件面试专题解析拓展:
redis面试专题及答案
- 支持一致性哈希的客户端有哪些?
- Redis与其他key-value存储有什么不同?
- Redis的内存占用情况怎么样?
- 都有哪些办法可以降低Redis的内存使用情况呢?
- 查看Redis使用情况及状态信息用什么命令?
- Redis的内存用完了会发生什么?
- Redis是单线程的,如何提高多核CPU的利用率?
Spring面试专题及答案
- 谈谈你对 Spring 的理解
- Spring 有哪些优点?
- Spring 中的设计模式
- 怎样开启注解装配以及常用注解
- 简单介绍下 Spring bean 的生命周期
Spring面试答案解析拓展
高并发多线程面试专题
- 现在有线程 T1、T2 和 T3。你如何确保 T2 线程在 T1 之后执行,并且 T3 线程在 T2 之后执行?
- Java 中新的 Lock 接口相对于同步代码块(synchronized block)有什么优势?如果让你实现一个高性能缓存,支持并发读取和单一写入,你如何保证数据完整性。
- Java 中 wait 和 sleep 方法有什么区别?
- 如何在 Java 中实现一个阻塞队列?
- 如何在 Java 中编写代码解决生产者消费者问题?
- 写一段死锁代码。你在 Java 中如何解决死锁?
高并发多线程面试解析与拓展
jvm面试专题与解析
- JVM 由哪些部分组成?
- JVM 内存划分?
- Java 的内存模型?
- 引用的分类?
- GC什么时候开始?
JVM面试专题解析与拓展!
SP-1626698615301)]
jvm面试专题与解析
- JVM 由哪些部分组成?
- JVM 内存划分?
- Java 的内存模型?
- 引用的分类?
- GC什么时候开始?
JVM面试专题解析与拓展!
[外链图片转存中…(img-q55mOFjW-1626698615302)]
-
-
java读取json文件并解析成对象,系列教学
2021-06-24 19:25:29读写分离:适用于读多写少的应用,增加多个从机,提高读的速度,提高程序并发 数据容灾恢复:从机复制主机的数据,相当于数据备份,如果主机数据丢失,那么可以通过从机存储的数据进行恢复。 高并发、高可用集群...Redis主从复制
概念
Redis的主从复制概念和MySQL的主从复制大概类似。一台
主机master
,一台从机slaver
。master主机数据更新后根据配置和策略,自动同步到slaver从机,Master以写为主
,Slave以读为主
。主要用途
-
读写分离
:适用于读多写少的应用,增加多个从机,提高读的速度,提高程序并发 -
数据容灾恢复
:从机复制主机的数据,相当于数据备份,如果主机数据丢失,那么可以通过从机存储的数据进行恢复。 -
高并发、高可用集群实现的基础
:在高并发的场景下,就算主机挂了,从机可以进行主从切换
,从机自动成为主机对外提供服务。
一主多从配置
环境准备
老哥太穷了,就用一台机器模拟三个机器。
-
第一步:
将redis.conf复制3份,分别是redis6379.conf、redis6380.conf、redis6381.conf -
第二步:
修改三个redis.conf文件里的port端口、pid文件名、日志文件名、rdb文件名 -
第三步:
分别打开三个窗口模拟三台服务器,并开启redis服务。
查看当前3台机器主从角色
先用命令
info replication
看看3台机器目前的角色
是什么。# 三台机器都是这个状态 127.0.0.1:6379> info replication # 角色是master主机 role:master # 从机个数为0 connected_slaves:0
设置主从关系
这里注意,我们只设置从机就可以了,不用设置主机。我们选择
6380
和6381
作为从机
。6379
作为主机
。# 6380 端口 127.0.0.1:6380> SLAVEOF 127.0.0.1 6379 # 6381 端口 127.0.0.1:6381> SLAVEOF 127.0.0.1 6379 # 6381 端口 127.0.0.1:6381> SLAVEOF 127.0.0.1 6379
再次查看3台机器目前角色
再次执行命令:
info replication
# 主机 127.0.0.1:6379> info replication role:master # 角色:主机 connected_slaves:2 #连接的从机个数,以及从机IP和端口 slave0:ip=127.0.0.1,port=6380,state=online,offset=98,lag=1 slave1:ip=127.0.0.1,port=6381,state=online,offset=98,lag=1 # 从机1 127.0.0.1:6380> info replication role:slave # 角色:从机 master_host:127.0.0.1 # 主机的IP和端口 master_port:6379 # 从机2 127.0.0.1:6381> info replication role:slave # 角色:从机 master_host:127.0.0.1 # 主机的IP和端口 master_port:6379
搭建成功,试验一把
-
全量复制:
从机会把主机之前的数据全部都同步过来,大家可以在从机上get 某key试试。 -
增量复制:
当主机新增数据时,从机会将该新增数据同步过来,大家可以在主机上执行命令set key value,然后在从机上get 该key,看是否能获取到。
读写分离
Redis的从机
默认
不允许进行写操作
,大家可以在从机上执行命令set key value
,会报错。# 6380从机 127.0.0.1:6380> set k3 v3 (error) READONLY You can't write against a read only slave.
「呼,好累」,主从复制写的差不多了!!
主从复制原理
全量复制
**「①」**slave发送psync,由于是第一次复制,不知道master的runid,自然也不知道offset,所以发送psync ? -1
**「②」**master收到请求,发送master的runid和offset给从节点。
**「③」**从节点slave保存master的信息
**「④」**主节点bgsave保存rdb文件
**「⑤」**主机点发送rdb文件
并且在**「④」和「⑤」**的这个过程中产生的数据,会写到复制缓冲区repl_back_buffer之中去。
**「⑥」**主节点发送上面两个步骤产生的buffer到从节点slave
**「⑦」**从节点清空原来的数据,如果它之前有数据,那么久会清空数据
**「⑧」**从节点slave把rdb文件的数据装载进自身。
全量复制的开销
**「①」**bgsave时间
**「②」**rdb文件网络传输时间
**「③」**从节点清空数据的
**「④」**从节点加载rdb的时间
**「⑤」**可能的aof重写时间,这是针对从节点,例如开启了aof之后,从节点添加buffer数据时候,可能需要aof重写
基于上面的原因,有的情况下不适合使用全量复制,例如网络抖动之后,从节点只需要传送一部分数据,不需要传送全部数据,
redis2.8
之后实现了部分复制功能部分复制
**「①」**假设发送网络抖动或者别的情况,暂时失去了连接
**「②」**这个时候,master还在继续往buffer里面写数据
**「③」**slave重新连接上了master
**「④」**slave向master发送自己的offset和runid
**「⑤」**master判断slave的offset是否在buffer的队列里面,如果是,那就返回continue给slave,否则需要进行全量复制(因为这说明已经错过了很多数据了)
**「⑥」**master发送从slave的offset开始到缓冲区队列结尾的数据给slave
总结
面试建议是,一定要自信,敢于表达,面试的时候我们对知识的掌握有时候很难面面俱到,把自己的思路说出来,而不是直接告诉面试官自己不懂,这也是可以加分的。
以上就是蚂蚁技术四面和HR面试题目,以下最新总结的最全,范围包含最全MySQL、Spring、Redis、JVM等最全面试题和答案,仅用于参考
握有时候很难面面俱到,把自己的思路说出来,而不是直接告诉面试官自己不懂,这也是可以加分的。
以上就是蚂蚁技术四面和HR面试题目,以下最新总结的最全,范围包含最全MySQL、Spring、Redis、JVM等最全面试题和答案,仅用于参考
[外链图片转存中…(img-MeHoCTdy-1624533916895)]
-
-
java 解析 json文件 java 解析 json文件
2010-03-22 22:37:18java 解析 json文件java 解析 json文件java 解析 json文件java 解析 json文件java 解析 json文件 -
Java获取本地json文件并解析
2022-02-24 16:44:38public static void main(String[] args) throws IOException ... String pate="tian.json"; String Path="../ipaaaweb/WebRoot/upload"+"/"+pate; BufferedReader reader = null; String laststr = ""; try { ...public static void main(String[] args) throws IOException { //路径 String pate="tian.json"; String Path="../ipaaaweb/WebRoot/upload"+"/"+pate; BufferedReader reader = null; String laststr = ""; try { FileInputStream fileInputStream = new FileInputStream(Path); InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream, "UTF-8"); reader = new BufferedReader(inputStreamReader); String tempString = null; while ((tempString = reader.readLine()) != null) { //数据获取 laststr += tempString; } reader.close(); } catch (IOException e) { e.printStackTrace(); } finally { if (reader != null) { try { reader.close(); } catch (IOException e) { e.printStackTrace(); } } } //json 解析 JSONObject jasonDate = JSONObject.parseObject(laststr); String resCode = jasonDate.getString("data"); JSONObject jasonDate1= JSONObject.parseObject(resCode); String date=jasonDate1.getString("dataMap"); JSONArray backBodyJson = JSONArray.parseArray(date); String postid=""; String dutytype=""; // 循环获取json数据 for(int i=0;i<backBodyJson.size();i++){ String a= String.valueOf(backBodyJson.get(i)); JSONObject jasonDate3 = JSONObject.parseObject(a); postid= String.valueOf(jasonDate3.get("postid")); dutytype=String.valueOf(jasonDate3.get("dutytype")); System.out.println(jasonDate3); } }
-
Java读取json文件并进行处理
2021-02-12 11:10:10public class testTicketOID {public static void main(String[] args) throws IOException {String jsonStr = ...try {File file = new File("/Users/jinyan/IdeaProjects/88bugs_service/src/main/java/testPXQ/Se... -
Java读取本地json文件及相应处理方法
2020-10-18 01:20:27今天小编就为大家分享一篇Java读取本地json文件及相应处理方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧 -
java读取json数据并解析输出对象
2021-08-17 17:36:20文章目录1 源数据2 方案2.1 maven 阿里 fastjson2.1.1 解析JSON对象2.1.2 解析JSON对象数组 1 源数据 { "code":200, "msg":"success", "data":{ "name":"导演", "age":20, "sex":"girl" } } { "code":200, ... -
java读取本地json文件并解析多层json
2019-06-27 18:15:02json格式 { "code": "0", "msg": "成功!", "data": { "result": [ { "id": "1231231231", "title": "1231231", "img": "1232131231", "keywords": "3434", "d... -
Java读写json文件需要引用的jar包
2018-05-29 15:29:14java编程,对json文件进行读写操作,需要引用的jar包。 -
java对于Json文件的解析范例
2014-06-18 11:03:30java语言解析json文件,其中包含各种解析json文件所需要的jar包; 包含对于时间戳转化为时间的方法; 以及文件的读写,arraylist类容易出现的问题等。 -
基于Java的JSON文件解析
2021-01-24 13:23:19在JSON解析对象之前还有XML解析对象,但后来通过测试发现,JSON在传输数据上,比XML要快很多,越多的数据,体现出来的差异越明显。 JSON 可以视为一种数据编写的格式。 例: { "name" : "张三", "age" : 24, ... -
Java读取json文件,再生产新的json文件
2021-10-29 17:09:04-- 阿里JSON解析器 --> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.47</version> </dependency> //... -
关于Java读取大JSON文件并且解析问题
2022-04-26 11:47:53我在开发程序的时候,需要读取解析json文件,一开始几M的文件都没问题,但后来出现了一个30M的JSON文件,在读取... if (StringUtils.isEmpty(jsonString)) { } } 有没有一个Java关于读取大JSON文件并解析的一些解决方案 -
java解析DWG文件为json使用superMap
2020-06-23 10:38:24java使用superMap解析DWG文件为json输出,本地通过,附件中为word操方式按照步骤可以导入数据集 -
Java读取Json文件工具类
2020-12-25 21:49:13文章目录Java读取Json文件工具类 Java读取Json文件工具类 //读取json文件 public static String readJsonFile(String fileName) { String jsonStr = ""; try { File jsonFile = new File(fileName); FileReader ... -
java 读取excel文件转换成json格式的实例代码
2020-10-18 14:33:58主要介绍了 java 读取excel文件转换成json格式的实例代码,需要的朋友可以参考下 -
Java_读写json格式的文件方法详解
2015-09-29 15:31:08帮助你有效的认识json,并解决实际中常见的问题。 -
Java当中读取Json文件转换为Java对象
2022-01-12 23:27:23Java当中读取Json文件转为字符串,然后字符串转换为Java对象 -
Java解析JSON数据
2021-07-15 11:35:35这篇文章主要讲讲 通过java去解析不同地方的json文件 通常我们需要解析本地的json文件或者服务器上的json文件。我们用来解析json格式的jar包有很多,jackson,fastjson,gson都行。但本人喜欢用fastjson。所以本篇都... -
java读取json
2018-08-18 21:54:43java读取json,该代码修改别人的,需要的话拿走,不谢。 -
java实现json文件的读取和解析
2018-10-19 18:16:56* 读取文件数据加入到map缓存中 * @throws IOException */ public static void readJsonData ( ) throws IOException { ClassPathResource resource = new ClassPathResource ( "adConfig.... -
Java 读取 JSON 文件转成 Map 对象
2020-05-20 15:37:03Java 读取 JSON 文件转成 Map 对象应用场景待读取的外部 JSON 文件Java 代码读取结果Gson 应用场景 Jar 包或 War 包引用一个外部文件作为项目运行的配置文件 Json 采用 key - value 格式,作为配置文件,是一个很好... -
java学习笔记-读取json文件解析拿到需要的数据写入excel文档中
2021-04-16 19:01:39然后用inputstream类进行读取,用stringbuffer进行分类,用pattern类识别到分段(这里JSON文档里刚好是空格进行每个数据的分离的) 然后用jxl包将数据写入exl中即可 代码 File file = new File("e:/test.txt"); ... -
Java中将Json文件解析为Java类
2013-06-20 17:34:40在Java平台上,将Json文件直接转换成Java类 -
Java读取项目json文件并转为JSON对象
2019-12-26 15:31:061、创建json文件(demo.json) { "button": [ { "type": "click", "name": "今日歌曲", "key": "V1001_TODAY_MUSIC" }, { "name": "菜单", "sub_button": [ { "type": "view", ...