经过几个月的努力,基于Electron框架开发的新版淘宝直播推流软件终于上线了。随之而来的就是线上用户反馈的各种问题,其中最影响用户体验的当属应用崩溃问题了。当应用程序出现未 catch 的异常时就会发生崩溃,本文介绍了客户端应用崩溃的处理流程。
Java缓存技术可分为远端缓存和本地缓存,远端缓存常用的方案有著名的redis和memcache,而本地缓存的代表技术主要有HashMap,Guava Cache,Caffeine和Encahche。远端缓存将在后面的博文中进行深入探讨,此处挖个坑,因此本篇博文仅覆盖了本地缓存,且突出探讨高性能的本地缓存。 本篇博文将首先介绍常见的本地缓存技术,对本地缓存有个大概的了解;其次介绍本地缓存中号称性能最好的Cache,可以探讨看看到底有多好?怎么做到这么好?最后通过几个实战样例,在日常工作中应用高性能的本地缓存。
2022年年初至今,团队持续在给业务应用做性能优化,主要目标是提高业务应用稳定性和降低业务应用的机器成本。到现在,代码层面的优化已经到了一定的瓶颈。所以就把优化的思路伸向了JVM的调优。有赞目前所有的Java应用采用的JDK版本是1.8.0_201,这个版本支持多个垃圾回收机制,比如CMS和G1等,而在有赞,除了个别应用有调整成G1垃圾收集机制的需求以外,其他所有应用都还采用着ParNew+CMS。有赞也将从G1身上挖掘出能够提供应用稳定性和降本的价值。
还是先给出结论,没时间看分析过程的同学至少可以看一眼结论: 1. Channel本质上是由三个FIFO(First In FirstOut,先进先出)队列组成的用于协程之间传输数据的协程安全的通道;FIFO的设计是为了保障公平,让事情变得简单,原则是让等待时间最长的协程最有资格先从channel发送或接收数据; 2. 三个FIFO队列依次是buf循环队列,sendq待发送者队列,recvq待接收者队列。buf循环队列是大小固定的用来存放channel接收的数据的队列;sendq待发送者队列,用来存放等待发送数据到channel的goroutine的双向链表,recvq待接收者队列,用来存放等待从channel读取数据的goroutine的双向链表;sendq和recvq可以认为不限大小; 3. 跟函数调用传参本质都是传值一样,channel传递数据的本质就是值拷贝,引用类型数据的传递也是地址拷贝;有从缓冲区buf地址拷贝数据到接收者receiver栈内存地址,也有从发送者sender栈内存地址拷贝数据到缓冲区buf;
在所有的互联网企业中,告警经常性的误告,都是让技术人员最头疼的问题之一。试想一下,在凌晨两三点时,你收到了来自告警平台的电话告警,于是你揉了揉惺忪的双眼,短暂的回味了下刚才的美梦,下床打开电脑,开始排查问题,却发现这是一个误告,线上业务都是在有序的运行当中,于是你关上电脑,重新上床睡觉,但此时你已睡意全无,在床上辗转反侧一个小时才睡着,于是乎,第二天同事看到了一脸沧桑的你。这种误告一次两次还能接受,但如果是每隔一天或者是每晚都会触发呢?
远程桌面客户端允许你连接到任何其他桌面/服务器,并远程执行任务。它是一种重要的 IT 支持和商业用例。在 Linux 中,有许多远程桌面客户端可用。其中一些是免费的,而另一些是付费版本。所有这些客户端都支持流行的 远程桌面协议(Remote Desktop Protocol)(RDP),如 VNC、RDP 等等。 本文将介绍一些适用于 Ubuntu 和其他发行版的最佳免费远程桌面客户端。该列表包括自由开源的应用程序,以及一些免费使用但专有的应用程序。 注意:你的目标系统中需要一个远程桌面服务器(如 Xrdp)来成功建立远程连接。然后你才能使用以下应用程序进行连接。这是一个双向的过程。如果你想了解更多的情况,请参考我们的一个案例研究: