全菜工程师小辉的博客

275 阅读19分钟
原文链接: blog.csdn.net

原创 Firebase授权登录无法获取用户邮箱

文章目录遇到的问题解决方案Android的解决方案iOS的解决方案参考文档 手里的一个海外项目使用Firebase集中管理所有的三方授权登录,在开发过程中遇到了无法获取第三方用户邮箱的问题,所以记录一下,也分享给遇到相同问题的朋友。 Firebase 是 Google Cloud Platfor...

2020-01-05 18:10:43

阅读数 140

评论数 0

原创 简单聊聊PayPal与BrainTree选型经历

2019年9月30日,PayPal公司被批准通过对国付宝的股权收购正式进入中国。2019年12月19日晚间,PayPal公司正式宣布,已完成对国付宝信息科技有限公司(Gopay)70%的...

2019-12-30 08:00:00

阅读数 70

评论数 0

原创 轻松搞定Charles的HTTPS抓包(iOS13可用)

抓包工具在APP开发过程中使用非常频繁,对开发者理解网络传输原理以及分析定位网络方面的问题非常有帮助。笔者一直比较喜欢Wireshark,但由于最近的项目是短连接项目,Wireshark...

2019-12-16 08:00:00

阅读数 248

评论数 0

原创 JDK11无法启动VisualVM

最近新项目从JDK8升级到JDK11,在使用IDEA启动项目同时启动VisualVM时,发现启动并不成功。 然后笔者在JDK的目录里查找,发现bin目录下并没有jvisualvm的可执行文件。 谷歌查找一番之后,原来从jdk 9开始, visualVM不再集成在Oracle JDK中, 需要单独下...

2019-09-25 22:36:37

阅读数 221

评论数 2

原创 一文搞定Java热更新

Java热更新 在持续交付的时代,重新部署一个新的版本只需要点击一下按钮。但在有的情况下,重新部署过程可能比较复杂,停机是不被允许的。所以JVM提供了另外一种选择:在不重启应用的前提下进行小幅改动,又称热更新。 对于某些大型的应用来说,每次的重启都需要花费大量的时间成本,所以,如果能在不重启虚...

2019-09-25 08:00:00

阅读数 378

评论数 2

原创 一文搞定MySQL性能调优

公众号回复关键词获取免费学习资料,加入前后端技术交流群和副业群。新建立的副业Q群:735764906。 数据库的操作越来越成为整个应用的性能瓶颈,这对于Web应用尤其明显。关于数据库的性能,这并不只是DBA需要关心的,而更是后端开发需要去关注的事情。 所以本文讲解MySQL在各个方面的优化方向,...

2019-09-03 08:00:00

阅读数 7816

评论数 2

原创 回复关键词获取海量资料

关注微信公众号后,发送以下关键词可以获得网盘链接: java Java相关的视频资料。 java电子书 Java相关的电子书。 python python相关的电子书。 go go相关的电子书。 机器学习 机器学习相关的电子书。 数...

2019-08-29 08:00:00

阅读数 1614

评论数 0

原创 快速了解正向代理与反向代理

前段时间收到读者的评论,正愁不知道下一篇博客写什么的笔者,赶紧记入小本本。 正向代理 正向代理是作用在用户端的。 比如访问某些国外网站,可能需要购买vpn,并且vpn是在用户浏览器端设置的(并不是在远端的服务器设置)。浏览器先访问vpn地址,vpn地址转发请求,并最后将请求结果原路返回来...

2019-08-26 08:00:00

阅读数 1849

评论数 3

原创 explain的属性详解与提速百倍的优化示例

在MySQL中,可以通过EXPLAIN命令获取MySQL如何执行SELECT语句的信息,包括在SELECT语句执行过程中表如何连接和连接的顺序。 EXPLAIN命令虽然没有提供任何优化建议,但它能够提供重要的信息有助于调优决策。 EXPLAIN只能解释SELECT操作,其他操作要重写为S...

2019-08-19 08:00:00

阅读数 1982

评论数 1

原创 彻底搞懂MySQL的索引

前言 MyISAM和InnoDB是MySQL最常用的两个存储引擎,本文将进行详尽的介绍和对比。对于MySQL其余几种存储引擎,请读者自行搜索学习。 本文会图解两种引擎的索引结构区别,然后讲解索引的原理,理解本文内容,就能够理解索引优化的各种原则的背后原因。 限于篇幅,本篇没有介绍的知识,会在...

2019-08-12 08:00:00

阅读数 2166

评论数 1

原创 彻底搞懂java程序的初始化顺序

使用场景 在java程序中,当实例化对象时,对象的所在类的所有成员变量首先要进行初始化,只有当所有类成员完成初始化后,才会调用对象所在类的构造函数创建对象。 原则 变量优先于块、静态优先于非静态。 父类优先于派生类初始化。 按照成员变量定义的顺序来进行初始化,即使变量...

2019-08-09 08:00:00

阅读数 2274

评论数 0

原创 彻底搞懂Java的等待-通知(wait-notify)机制

线程的生命周期转换 新建状态(New):新建一个线程对象。 就绪/可运行状态(Runnable):线程对象创建后,其他线程调用了该对象的start方法。该状态的线程位于可运行线程池中,变得可运行,等待获取CPU的使用权。 运行状态(Running):就绪状态的线程获得...

2019-08-06 08:00:00

阅读数 2592

评论数 0

原创 彻底搞懂Reactor模型和Proactor模型

在高性能的I/O设计中,有两个著名的模型:Reactor模型和Proactor模型,其中Reactor模型用于同步I/O,而Proactor模型运用于异步I/O操作。 想要了解两种模型,需要了解一些IO、同步异步的基础知识,点击查看 服务端的线程模型 无论是Reactor模型还是Proact...

2019-08-05 08:00:00

阅读数 2260

评论数 0

原创 彻底搞懂Redis的线程模型

为了接下来一篇博客,能使读者更加完整地学习线程模型,所以本文对Redis的线程模型进行必要的讲解。 由于《Redis设计与实现》对于Redis的讲解简练优雅,所以本文大部分内容节选自本书,也欢迎对Redis有更多底层了解需求的读者,自行购买学习。 文件事件处理器 Redis基于React...

2019-08-03 08:00:00

阅读数 4534

评论数 1

原创 彻底搞懂Java的网络IO

IO是Input/Output的缩写。Unix网络编程中有五种IO模型: blocking IO(阻塞IO) nonblocking IO(非阻塞IO) IO multiplexing(多路复用IO) signal driven IO(信号驱动IO) ...

2019-08-02 08:00:00

阅读数 2361

评论数 1

原创 彻底搞懂Netty高性能之零拷贝

作为Java网络编程学习者,不仅要知道NIO,还一定要学习Mina和Netty这两个优秀的网络框架。作为上一篇NIO效率高的原理之零拷贝与直接内存映射的补充,本文将针对Netty的零拷贝特性进行详细分析。 Netty高性能的原因 Netty作为异步事件驱动的网络框架,高性能主要来自于其I/O模...

2019-08-01 08:00:00

阅读数 4050

评论数 0

原创 NIO效率高的原理之零拷贝与直接内存映射

前言 在笔者上一篇博客,详解了NIO,并总结NIO相比BIO的效率要高的三个原因,点击查看。 这篇博客将针对第三个原因,进行更详细的讲解。 首先澄清,零拷贝与内存直接映射并不是Java中独有的概念,并且这两个技术并不是等价的。 零拷贝 零拷贝是指避免在用户态(User-space) 与内...

2019-07-31 08:00:00

阅读数 3955

评论数 1

原创 彻底搞懂NIO效率高的原理

前言 这篇文章读不懂的没关系,可以先收藏一下。笔者准备介绍完epoll和NIO等知识点,然后写一篇Java网络IO模型的介绍,这样可以使Java网络IO的知识体系更加地完整和严谨。初学者也可以等看完IO模型介绍的博客之后,再回头看这些博客,会更加有收获。 NIO相比BIO的优势 NIO(No...

2019-07-29 08:00:00

阅读数 4591

评论数 4

原创 彻底搞懂epoll高效运行的原理

前言 这篇文章读不懂的没关系,可以先收藏一下。笔者准备介绍完epoll和NIO等知识点,然后写一篇Java网络IO模型的介绍,这样可以使Java网络IO的知识体系更加地完整和严谨。初学者也可以等看完IO模型介绍的博客之后,再回头看这些博客,会更加有收获。 如果你顺利啃下这篇博客,恭喜你,ngi...

2019-07-28 08:00:00

阅读数 4157

评论数 0

原创 快速了解缓存穿透与缓存雪崩

缓存穿透 缓存系统,一般流程都是按照key去查询缓存,如果不存在对应的value,就去后端系统(例如:持久层数据库)查找。如果key对应的value是一定不存在的,并且对该key并发请求量很大,就会对后端系统造成很大的压力,这就叫做缓存穿透。 正常请求: 缓存击穿时: 如何避免 ...

2019-07-26 08:00:00

阅读数 6166

评论数 4

原创 Redis的过期键删除策略和数据逐出策略

Redis作为一个高性能的内存NoSQL数据库,其容量受到最大内存限制的限制。 在实际生产环境中使用Redis时,偶然会觉得Redis的内存占用要比自己预想的大。事实上,Redis占用的内存除了保存键值对所需的开销外,还有一些运行时产生的额外内存,包括: 过期Key所占空间 渐进...

2019-07-25 08:00:00

阅读数 4852

评论数 0

原创 高并发系统的限流算法与实现

开发高并发系统时有三把利器用来保护系统:缓存、降级和限流。 缓存:缓存的目的是提升系统访问速度和增大系统处理容量。 降级:降级是当服务器压力剧增的情况下,根据当前业务情况及流量对一些服务和页面有策略的降级,以此释放服务器资源以保证核心任务的正常运行。 限流:限流的目的是通...

2019-07-23 08:00:00

阅读数 6768

评论数 4

原创 彻底搞懂JDBC的运行过程

前几天笔者发布了博客手写mybatis彻底搞懂框架原理。为了帮助初学者更好理解mybatis框架,这次讲解一下Java的JDBC的运行过程。 JDBC的作用 JDBC的全称是Java DataBase Connection,也就是Java数据库连接,我们可以用它来操作关系型数据库。JDBC接口...

2019-07-22 08:00:00

阅读数 8089

评论数 4

原创 手写mybatis彻底搞懂框架原理

mybatis的前身是iBatis,其源于“Internet”和“abatis”的组合,是一款优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。mybatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集,它可以使用简单的XML或注解来配置和映射原生信息,将接口和Java的PO...

2019-07-16 08:00:00

阅读数 5823

评论数 0

原创 剑指offer最优解Java版源码索引

《剑指Offer》剖析了50个典型的程序员面试题,从基础知识、代码质量、解题思路、优化效率和综合能力五个方面系统整理了影响面试的5个要点。是一本计算机大学生算法提高必备的一本书。 笔者经过1年的PHP和Java混合开发的项目后,略感Java功力受损,所以准备花几天空闲时间,按照牛客网的题目顺序,...

2019-07-14 22:09:34

阅读数 5363

评论数 1

原创 Java中容易被遗忘的default关键字

default关键字 default关键字在JDK8中有两个用处。 1.在switch语句的时候使用default int day = 8; String dayString; switch (day) { case 1: dayString = "Monday"...

2019-07-10 08:00:00

阅读数 5736

评论数 0

原创 有关跳跃表的干货都在这里

ConcurrentSkipListSet、ConcurrentSkipListMap等数据结构用的是它,更不用说Redis也广泛用它。它是一种思想,即使你不写它。 跳表的数据结构 跳表全称叫做跳跃表,简称跳表。跳表是一个随机化的数据结构,实质就是一种可以进行二分查找的有序链表。跳表在原有的有...

2019-07-09 08:00:00

阅读数 6523

评论数 1

原创 快速了解基于AQS实现的Java并发工具类

AQS是AbstractQueuedSynchronizer的简称,类如其名,抽象的队列式的同步器,它是一个Java提高的底层同步工具类,用一个int类型的变量表示同步状态,并提供了一系列的CAS操作来管理这个同步状态,许多同步类实现都依赖于它,如常用的CountDownLatch、Semapho...

2019-07-08 08:00:00

阅读数 7049

评论数 5

原创 详解ConcurrentHashMap及JDK8的优化

由于HashMap在并发中会出现一些问题,所以JDK中提供了并发容器ConcurrentHashMap。有关HashMap并发中的问题和原理,强烈建议查看这篇文章进行复习。 ConcurrentHashMap使用分段锁技术,将整个数据结构分段(默认为16段)进行存储,然后给每一段数据配一把锁(继...

2019-07-07 08:00:00

阅读数 7416

评论数 1

原创 Java线程安全策略与多线程并发最佳实践

线程安全策略 不可变对象 不可变对象(Immutable Objects)是指对象一旦被创建它的状态(对象的数据,也即对象属性值)就不能改变,任何对它的改变都应该产生一个新的对象。 不可变对象需要满足的条件: 对象创建以后其状态就不能修改 对象所有域都是final类型 ...

2019-07-02 08:30:00

阅读数 5706

评论数 0

原创 详解并发下的HashMap以及JDK8的优化

HashMap使用链表法避免哈希冲突(相同hash值),当链表长度大于TREEIFY_THRESHOLD(默认为8)时,将链表转换为红黑树。当小于等于UNTREEIFY_THRESHOLD(默认为6)时,又会退化回链表以达到性能均衡。 下图为HashMap的数据结构(数组+链表+红黑树 ) ...

2019-06-30 08:00:00

阅读数 7217

评论数 6

原创 安全发布对象-发布与逸出

发布对象 简单来说就是提供一个对象的引用给作用域之外的代码。比如return一个对象,或者作为参数传递到其他类的方法中。 不安全的发布对象示例: @Slf4j @NotThreadSafe public class UnsafePublish { private ...

2019-06-29 08:00:00

阅读数 5642

评论数 0

原创 TCP粘拆包详解与Netty代码示例

TCP是个“流”协议,所谓流,就是没有界限的一串数据。可以想想河里的流水,是连成一片的,其间并没有分界线。TCP底层并不了解上层业务数据的具体含义,它会根据TCP缓冲区的实际情况进行包的划分,所以在业务上认为,一个完整的包可能会被TCP拆分成多个包进行发送,也有可能把多个小的包封装成一个大的数据包...

2019-06-28 08:00:00

阅读数 5649

评论数 0

原创 Java类加载及对象创建过程详解

类加载过程 类加载的五个过程:加载、验证、准备、解析、初始化。 加载 在加载阶段,虚拟机主要完成三件事: 通过一个类的全限定名来获取定义此类的二进制字节流。 将这个字节流所代表的静态存储结构转化为方法区域的运行时数据结构。 在Java堆中生成一个代表这个类的ja...

2019-06-27 08:00:00

阅读数 5703

评论数 0

原创 JVM内存模型和垃圾回收机制

JVM内存模型 根据Java虚拟机规范,Java数据区域分为五大数据区域。 其中方法区和堆是所有线程共享的,虚拟机栈、本地方法栈和程序计数器则为线程私有的。 有的博客称方法区是永久代,那是因为前者是JVM的规范,而后者则是JVM规范的一种实现,并且只有HotSpot才有永久代, JDK...

2019-06-26 08:00:00

阅读数 5705

评论数 0

原创 快速理解设计模式之创建型模式

要想更全面理解设计模式,建议先查看Spring的设计模式快速入门干货,前半部分是设计模式的分类和综述,与Spring无关。 创建型模式 对象的创建会消耗掉系统的很多资源,所以对对象的创建进行研究,从而能够高效地创建对象就是创建型模式要探讨的问题。这里有6个具体的创建型模式可供研究,它们分别是:...

2019-06-25 08:00:00

阅读数 5696

评论数 0

原创 想学人工智能害怕数学?莫慌,入门很简单

自我介绍下:笔者是15级某非著名985研究生,开学之前加在校期间加起来差不多3年的机器学习经历,研究方向是图像识别。 鉴于笔者有过机器学习的经历,身边时不时会有想进行机器学习的同学向我请教如何入门机器学习。其实在我看来,如果不是调参洗数据的话,要修改优化算法模型,除了阅读大量论文,还是要有不错的...

2019-06-24 08:00:00

阅读数 9639

评论数 16

原创 快速了解UDP协议

互联网工程任务组(IETF)官员透露,HTTP-over-QUIC实验协议将重命名为HTTP/3,并有望成为HTTP协议的第三个正式版本。 Quic(QuickUDP Internet Connections)是一种新的传输方式,与TCP相比,它减少了延迟。表面上,Quic非常类似于在UDP上实...

2019-06-23 08:00:00

阅读数 5645

评论数 0

原创 快速了解Https

HTTPS简介 HTTPS:https是http与ssl的结合,为了解决http明文传输导致信息泄露的问题。ssl通过公钥和私钥保证客户端和服务器之间的通讯加密,由权威机构办法的数字证书杜绝了中间人攻击的可能。默认端口为443。 SSL需要到ca申请证书,一般免费证书较少,因而需要一定费用。...

2019-06-22 08:00:00

阅读数 5778

评论数 0

原创 Spring的设计模式快速入门干货

设计模式是一套被反复使用的、多数人知晓的、代码设计经验的总结。使用设计模式是为了重用代码、让代码更容易被他人理解、保证代码可靠性。 设计模式的分类 1.创建型模式 对象的创建会消耗掉系统的很多资源,所以对对象的创建进行研究,从而能够高效地创建对象就是创建型模式要探讨的问题。这里有6个具体的创...

2019-06-21 08:00:00

阅读数 5634

评论数 0

  • 上一页
  • 1
  • 2
  • 3
  • 下一页