首页 文章 精选 留言 我的

精选列表

搜索[Java],共10000篇文章
优秀的个人博客,低调大师

突破Java面试(23-8) - Redis哨兵主备切换的数据丢失问题

Github 1 数据丢失的两个场景 主备切换的过程,可能会导致数据丢失 1.1 异步复制 由于 master => slave的复制是异步的,所以可能有部分数据还没复制到slave,master就宕机,于是这些数据就丢失了 1.2 脑裂导致 脑裂,也就是说,某个master所在节点突然脱离正常的网络,无法和其他slave机器连接,但实际上master还运行着 此时哨兵可能就会认为master宕机了,然后开启选举,将其他slave切换成了master 这个时候,集群里就会有两个master,也就是所谓的脑裂 此时虽然某个slave被切换成了master,但是可能client还没来得及切换到新的master,还继续写向旧master的数据可能也丢失了 因此旧master再次恢复时,会被作为一个slave挂到新的master上去,自己的数据会被清空

优秀的个人博客,低调大师

突破Java面试(19) - 分布式缓存的第一个问题

1 面试题 在项目中缓存是如何使用的?缓存如果使用不当会造成什么后果? 2 考点分析 这个问题,互联网公司必问,要是一个人连缓存都不太清楚,那确实比较尴尬 只要问到缓存,上来第一个问题,肯定能是先问问你项目哪里用了缓存?为啥要用?不用行不行?如果用了以后可能会有什么不良的后果? 这就是看看你对你用缓存这个东西背后,有没有思考,如果你就是傻乎乎的瞎用,没法给面试官一个合理的解答。那我只能说,面试官对你印象肯定不太好,觉得你平时思考太少,就知道干活儿。 3 详解 一个一个来看 3.1 在项目中缓存是如何使用的? 这个,你结合你自己项目的业务来,你如果用了那恭喜你,你如果没用那不好意思,你硬加也得加一个场景吧 3.2 为啥在项目里要用缓存呢? 用缓存,主要是俩用途,高性能和高并发 3.2.1 高性能 缓存是如何实现高性能的 假设这么个场景,你有个操作,一个请求过来

优秀的个人博客,低调大师

java版电子商务spring cloud分布式微服务-hystrix工作原理

Netflix的 Hystrix 是一个帮助解决分布式系统交互时超时处理和容错的类库, 它同样拥有保护系统的能力. Hystrix的设计原则包括:资源隔离、熔断器、命令模式。 下面的流程图展示了当使用Hystrix的依赖请求,Hystrix是如何工作的。 Hystrix主要有4种调用方式: toObservable() 方法 :未做订阅,只是返回一个Observable 。 observe() 方法 :调用 #toObservable() 方法,并向 Observable 注册 rx.subjects.ReplaySubject 发起订阅。 queue() 方法 :调用 #toObservable() 方法的基础上,调用:Observable#toBlocking() 和 BlockingObservable#toFuture() 返回 Future 对象 execute() 方法 :调用 #queue() 方法的基础上,调用 Future#get() 方法,同步返回 #run() 的执行结果。 主要的执行逻辑: 1.每次调用创建一个新的HystrixCommand,把依赖调用封装在run()方法中. 2.执行execute()/queue做同步或异步调用. 3.判断熔断器(circuit-breaker)是否打开,如果打开跳到步骤8,进行降级策略,如果关闭进入步骤. 4.判断线程池/队列/信号量是否跑满,如果跑满进入降级步骤8,否则继续后续步骤. 5.调用HystrixCommand的run方法.运行依赖逻辑 依赖逻辑调用超时,进入步骤8. 6.判断逻辑是否调用成功。返回成功调用结果;调用出错,进入步骤8. 7.计算熔断器状态,所有的运行状态(成功, 失败, 拒绝,超时)上报给熔断器,用于统计从而判断熔断器状态. 8.getFallback()降级逻辑。以下四种情况将触发getFallback调用: run()方法抛出非HystrixBadRequestException异常。 run()方法调用超时 熔断器开启拦截调用 线程池/队列/信号量是否跑满 没有实现getFallback的Command将直接抛出异常,fallback降级逻辑调用成功直接返回,降级逻辑调用失败抛出异常. 9.返回执行成功结果

优秀的个人博客,低调大师

java下载多文件夹的文件最终打zip包返回给用户

业务需求,需要做一个导出用户单据图片的功能,需求为:按单据单号分文件夹分别存储单据的图片!最终导出zip包给用户。通过网上各种找代码,写出一个小demo,供各位看官学习! // 假装是一个单据集合 List<String> imgUrls = new ArrayList<>(); imgUrls.add("http://img1.imgtn.bdimg.com/it/u=2171717409,2602158110&fm=26&gp=0.jpg"); imgUrls.add("http://images.ofweek.com/Upload/News/2016-5/Finn/53/20160503055505730.jpg"); imgUrls.add("http://y1.ifengimg.com/a/2016_04/4855d9fcb2ccade.jpg"); try { //zip包的名称 String downloadFilename = "图片.zip"; downloadFilename = URLEncoder.encode(downloadFilename, "UTF-8"); // 指明response的返回对象是文件流 response.setContentType("application/octet-stream"); // 设置在下载框默认显示的文件名 response.setHeader("Content-Disposition", "attachment;filename=" + downloadFilename); @Cleanup ZipOutputStream zos = new ZipOutputStream(response.getOutputStream()); imgUrls.forEach(i -> { InputStream fis = null; try { // 跨平台建文件夹和文件名字 // File.separator 根据操作系统来判断用什么文件分隔符 // 这里只建立了一个文件夹,如果想分类的话,在后面加上想要的文件夹名称即可 ZipEntry zipEntry = new ZipEntry("img_download" + File.separator +imgUrls.indexOf(i)+ ".jpg"); // 放到压缩包里 zos.putNextEntry(zipEntry); // 获得图片流 fis = getInputStreamByGet(i); if (null != fis) { byte[] buffer = new byte[1024]; int r = 0; // 从输入流读取一定数量的字节,存到缓存区中 while ((r = fis.read(buffer)) != -1) { zos.write(buffer, 0, r); } } } catch (Exception e) { e.printStackTrace(); } }); zos.flush(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } /** * 通过get请求得到读取器响应数据的数据流 * @param url * @return */ private static InputStream getInputStreamByGet(String url) { try { HttpURLConnection conn = (HttpURLConnection) new URL(url).openConnection(); conn.setReadTimeout(5000); conn.setConnectTimeout(5000); conn.setRequestMethod("GET"); if (conn.getResponseCode() == HttpURLConnection.HTTP_OK) { return conn.getInputStream(); } } catch (IOException e) { e.printStackTrace(); } return null; } 写到这里就联想到用这个方法可以从网上爬一些照片到本地!

优秀的个人博客,低调大师

会员卡模板查询接口(alipay.marketing.card.template.query)JAVA版本demo

说明: 该接口主要用于查询已创建的会员卡模板参数详细信息,官方接口文档请点击【会员卡模板查询接口】 创建模板接口参考该贴:[url]https://openclub.alipay.com/read.php?tid=1577&fid=71[/url] 修改模板接口参考该贴:[url]https://openclub.alipay.com/read.php?tid=4503&fid=71[/url]代码调用示例: //alipay.marketing.card.template.query (会员卡模板查询接口) public static void template_query(){ AlipayClient alipayClient=alipa

优秀的个人博客,低调大师

会员卡模板修改接口(alipay.marketing.card.template.modify)JAVA版本demo

说明: 该接口主要用于创建之后的会员卡的模板修改,官方接口文档请点击【会员卡模板修改】 创建模板接口请参考我的这个帖子:[url]https://openclub.alipay.com/read.php?tid=1577&fid=71[/url]接口调用示例: //alipay.marketing.card.template.modify (会员卡模板修改) public static void template_modify(){ AlipayClient alipayClient=alipayclient(); AlipayMarketingCardTemplateModifyRequest request = new AlipayMarketingCardTe

资源下载

更多资源
Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册