• 动图了解I/O多路复用
    啥叫I/O多路复用?epoll又是个什么东西?你或许看过很多文章,但是还是感觉云里雾里的,今天,我们抛开文字,释放动图,或许你就理解了。I/O多路复用通常的一次的请求过程如下图所示:但是,服务器往往不会只处理一次请求,往往是多个请求,这一个请求,这时候每来一个请求,就会生成一个进程或线程。在这些请求线程或者进程中,大部分都处于等待阶段,只有少部分是接收数据。这样一来,非常耗费资源,而且这些线程或者进程的管理,也是个事儿。于是,有人想到一个办法:我们只用一个线程或者进程来和系统内核打交道,并想办法把每个应用的...
  • 第 5 届阿里中间件性能挑战赛全程复盘!
    要求能够具备以下能力:Gateway 端能够自动根据服务处理能力变化动态最优化分配请求保证较低响应时间,较高吞吐量;Provider 端能自动进行服务容量评估,当请求数量超过服务能力时,允许拒绝部分请求,以保证服务不过载;当请求速率高于所有的 Provider 服务能力之和时,允许 Gateway 拒绝服务新到请求。
  • 再有人问你 Java 内存模型是什么,就把这篇文章发给他。
    Java内存模型,是这三个知识点当中最晦涩难懂的一个,而且涉及到很多背景知识和相关知识。网上有很多关于Java内存模型的文章,在《深入理解Java虚拟机》和《Java并发编程的艺术》等书中也都有关于这个知识点的介绍。本文,就来整体的介绍一下Java内存模型,目的很简单,让你读完本文以后,就知道到底Java内存模型是什么,为什么要有Java内存模型,Java内存模型解决了什么问题等。希望能够让读者可以对Java内存模型有更加清晰的认识。
  • 多线程
    什么是线程Java从诞生开始就明智地选择了内置对多线程的支持,线程作为操作系统调度的最小单元,多个线程能够同时执行,在多核环境中表现得更加明显。线程优先级在Java线程中,通过一个整型成员变量priority来控制优先级,优先级的范围从1~10,在线程构建的时候可以通过setPriority方法来修改优先级,默认优先级是5,优先级高的线程分配时间片的数量要多于优先级低的线程。多线程的几种实现方式1、 为创建一个线程,最简单的方法就是从Thread 类继承。
  • Android原生H5混合开发之JsBridge
    / 作者简介 /本篇文章来自看书的小蜗牛的投稿,分享了android开发中JsBridge内容的相关理解,相信会对大家有所帮助!再比如:有些人通过prompt方式实现H5通知Native,而prompt是一个可能产生问题的同步方法,一旦无法返回,整个js环境就会挂掉,导致所有H5页面都无法打开,下面简单说下两种实现,一是通过addJavascriptInterface,另一种就是通过prompt。classJsMethodApi{/***js调用native,可能需要回调*/@JavascriptInterfacepublicvoidcallNative{...}}webView.addJavascriptInterface;在前端的js代码中,是可以直接通过mJsMethodApi.callNative通知Native的,而且通过addJavascriptInterface注入的对象在H5的任何地方都可以调用,不存在注入时机跟注入失败的问题,在H5的head里调用都没问题。
  • Python之线程介绍
    Python 中的线程允许程序的不同部分并发运行,并且简化了设计。但是对于 Python 3 的大部分实现,不同的线程实际上并不是同时执行的:它们只是看起来像同时执行。而由 CPython 实现的 Python 运行方式,线程可能无法加速运行所有的任务。这是由于与 GIL的交互,在根本上限制了同一时间只有一个 Python 线程在运行。使用 Python 编写代码,并在 CPython 的标准实现中运行,这是完全可行的。守护线程 deamon 对于 Python 的线程 threading 有着更具体的意义。这个停顿是 Python 在等待非守护线程完成。当 Python 程序结束时,清理线程实例也是关闭过程的一部分。
  • 线上服务 CPU 又 100% 啦?一键定位 so easy!
    快速安装使用:source<1、java 正则表达式回溯造成 CPU 100%importjava.util.ArrayList;importjava.util.List;importjava.util.regex.Matcher;importjava.util.regex.Pattern;publicclassRegexLoad{publicstaticvoidmain{String[]patternMatch={"++","++++"};List<String>patternList=newArrayList<String>();patternList.add;patternList.add;patternList.add;patternList.add;patternList.add;patternList.add;for{for{Patternpattern=Pattern.compile;Matchermatcher=pattern.matcher;System.out.println;if{System.out.println;}elseSystem.out.println;}}}}编译、运行上述代码之后,咱们就能观察到服务器多了一个 100% CPU 的 java 进程:img怎么使用呢?show-busy-java-threads.sh#从所有的 Java进程中找出最消耗CPU的线程,打印出其线程栈。show-busy-java-threads.sh-c<要显示的线程栈数>show-busy-java-threads.sh-c<要显示的线程栈数>-p<指定的JavaProcess>#-F选项:执行jstack命令时加上-F选项,一般情况不需要使用show-busy-java-threads.sh-p<指定的JavaProcess>-Fshow-busy-java-threads.sh-s<指定jstack命令的全路径>#对于sudo方式的运行,JAVA_HOME环境变量不能传递给root,#而root用户往往没有配置JAVA_HOME且不方便配置,#显式指定jstack命令的路径就反而显得更方便了show-busy-java-threads.sh-a<输出记录到的文件>show-busy-java-threads
  • 再也不用担心被虐啦,高频率JVM面试题,都在这里!
    JVM简单来说就是运行Java代码的解释器,作为螺丝钉程序员JVM其实了解下就差不多啦,不懂JVM内部细节照样能写出优质的代码!但是一到造火箭、飞机的场景(面试)不懂JVM的你,会被面试官虐的体无完肤,本期内容列举常见的JVM面试题:说一JVM的内存结构是什么样子的?面对这一大波JVM面试题,你真的Hold的住吗?再有人问你JVM的内存结构就回想下上面的图,但是知道JVM的内存模型的样子还是不行的,还要知道他们分别干什么的。两块区域交替使用,最大问题就是会导致空间的浪费,现在堆内存的使用率只有50%。
  • 实现单例模式的8种方式
    单例模式是一种常用的软件设计模式,其定义是单例对象的类只能允许一个实例存在。=instance){ instance = new Singleton04(); } return instance; }}优点:解决上面第三种实现方式的线程不安全问题,对getInstance()方法进行加锁操作,实现了线程同步。=instance){ synchronized { instance = new Singleton05(); } } return instance; }}由于第四种实现方法同步效率太低,所以摒弃同步方法,改为同步产生实例化的代码块,但是这种方式并不能起到线程同步的作用,跟第三种实现方法一样,一个线程进入到if(null !=instance)判断语句块,还未来得及往下执行,另一个线程也通过了这个判断语句,这时便会产生多个实例,所以在多线程环境下不可使用这种方式。
  • MySQL的复制功能
    MySQL会按事务提交的顺序 而非每条语句的执行顺序来记录二进制日志。主从同步的监控问题Mysql有主从同步的状态信息,可以通过命令show slave status获取,除了获知当前是否主从同步正常工作,另外一个重要指标就是Seconds_Behind_Master,从字面理解,它表示当前MySQL主从数据的同步延迟,单位是秒。
  • 一周 Go world 新鲜事
    主要涉及到的一些概念:I/O 模式、用户/内核空间、epoll、Linux 源码、goroutine scheduler 等。同时还简单分析了该库的原理. 找到容器的cgroup目录, 计算cpuacct,cpu下cpu.cfs_quota_us/cpu.cfs_period_us, 即为分配的cpu核数。原文链接No.4几种部署Goku API Gateway的方式Goku API Gateway 是一个基于 Golang 开发的运行在企业系统服务边界上的微服务网关。原文链接重磅活动预告Gopher Meetup 杭州站即将开启。
  • 面试环节:在浏览器输入 URL 回车之后发生了什么?(超详细版)
    大致流程URL 解析DNS 查询TCP 连接处理请求接受响应渲染页面一、URL 解析地址解析:首先判断你输入的是一个合法的 URL 还是一个待搜索的关键词,并且根据你输入的内容进行自动完成、字符编码等操作。HSTS由于安全隐患,会使用 HSTS 强制客户端使用 HTTPS 访问页面。在建立连接前,会先进行 TCP 三次握手。否则服务器会按照规则把请求重写到 一个 REST 风格的 URL 上。
  • 5个方案告诉你:高并发环境下,先操作数据库还是先操作缓存?
    ,但是有时候可能事与愿违,我们再看第二个流程图,如下:1)线程A发起一个写操作,第一步set cache2)线程B发起一个写操作,第一步setcache3)线程B写入数据库到DB4)线程A写入数据库到DB执行完后,缓存保存的是B操作后的数据,数据库是A操作后的数据,缓存和数据库数据不一致。
  • 线上服务 CPU 又 100% 啦?一键定位 so easy!
    尤其是在周末或大半夜,突然群里有人反馈线上机器负载特别高,不熟悉定位流程和思路的同学可能登上服务器一通手忙脚乱,定位过程百转千回。快速安装使用:source<1、java 正则表达式回溯造成 CPU 100%importjava.util.ArrayList;importjava.util.List;importjava.util.regex.Matcher;importjava.util.regex.Pattern;publicclassRegexLoad{publicstaticvoidmain{String[]patternMatch={"++","++++"};List<String>patternList=newArrayList<String>();patternList.add;patternList.add;patternList.add;patternList.add;patternList.add;patternList.add;for{for{Patternpattern=Pattern.compile;Matchermatcher=pattern.matcher;System.out.println;if{System.out.println;}elseSystem.out.println;}}}}编译、运行上述代码之后,咱们就能观察到服务器多了一个 100% CPU 的 java 进程:img怎么使用呢?show-busy-java-threads.sh#从所有的 Java进程中找出最消耗CPU的线程,打印出其线程栈。#为了能切换到Java进程的用户,需要加sudo来执行,即可以解决:su
  • 为什么建议使用你 LocalDateTime ,而不是 Date?
    当多个线程同时使用相同的SimpleDateFormat对象调用format方法时,多个线程会同时调用calendar.setTime方法,可能一个线程刚设置好time值另外的一个线程马上把设置的time值给修改了导致返回的格式化时间可能是错误的。在多并发情况下使用SimpleDateFormat需格外注意SimpleDateFormat除了format是线程不安全以外,parse方法也是线程不安全的。
  • 如何回答性能优化的问题,才能打动阿里面试官?
    在阿里面试中,性能优化也是常被问到的题目,用来考察是否有实际的线上问题处理经验。面对这类问题,阿里工程师齐光给出了详细流程。来阿里面试前,先看看这篇文章哦。第二部分会介绍性能优化的通用流程以及常见的一些误区。对应用进行合理的性能优化,可在应用稳定性、成本核算获得很大的收益。对性能问题进行粗略评估,过滤一些因为低级的业务逻辑导致的性能问题。
公众号
关注公众号订阅更多技术干货!