• 高德APP启动耗时剖析与优化实践(iOS篇)

    Python实战社群Java实战社群长按识别下方二维码,按需求添加扫码关注添加客服进Python社群▲扫码关注添加客服进Java社群▲作者丨戴铭来源丨高德技术最近高德地图APP完成了一次启动优化专项,超预期将双端启动的耗时都降低了65%以上,iOS在iPhone7上速度达到了400毫秒以内。为了进一步优化所占空间,可以将Trie这种树形的确定性有限自动机压缩成确定性非循环有限状态自动体,其空间小,做法是会压缩相同分支。也就是说对启动阶段的分析以viewDidAppear为截止。总的来说,通过System Trace能清楚知道每时每刻APP对系统资源的使用情况。
  • 阿里Java面试答案【283页PDF文档免费领】

    如何拿下阿里等大厂的offer呢,今天分享一个秘密武器,资深架构师整理的Java核心知识点,面试时面试官必问的知识点,篇章包括了很多知识点,其中包括了有基础知识、Java集合、JVM、多线程并发、spring原理、微服务、Netty 与RPC 、Kafka、日记、设计模式、Java算法、数据库、Zookeeper、分布式缓存、数据结构等等。由于整个文档比较全面,内容比较多,篇幅的限制,文章中分享没有全部附上详细的解析,但是整理成了一份详细的PDF文档可分享给大家,文末有免费领取方式。戳“阅读原文”直接领PDF文档+面试资料!
  • Java 中的锁原理、锁优化、CAS、AQS 详解

    Java对象头长度32位JVM Mark Word 结构32位JVM Mark Word 状态变化64位JVM Mark Word 结构2.2.3 synchronized的锁优化JavaSE1.6为了减少获得锁和释放锁带来的性能消耗,引入了“偏向锁”和“轻量级锁”。在JavaSE1.6中,锁一共有4种状态,级别从低到高依次是:无锁状态、偏向锁状态、轻量级锁状态和重量级锁状态,这几个状态会随着竞争情况逐渐升级。
  • 阿里Java面试答案【283页PDF文档免费领】

    如何拿下阿里等大厂的offer呢,今天分享一个秘密武器,资深架构师整理的Java核心知识点,面试时面试官必问的知识点,篇章包括了很多知识点,其中包括了有基础知识、Java集合、JVM、多线程并发、spring原理、微服务、Netty 与RPC 、Kafka、日记、设计模式、Java算法、数据库、Zookeeper、分布式缓存、数据结构等等。由于整个文档比较全面,内容比较多,篇幅的限制,文章中分享没有全部附上详细的解析,但是整理成了一份详细的PDF文档可分享给大家,文末有免费领取方式。戳“阅读原文”直接领PDF文档+面试资料!
  • 一文读懂JAVA多线程

    并行和并发的目标都是最大化CPU的使用率,并发可以认为是一种程序的逻辑结构的设计模式。本文主要分享造成这些问题的原因和JAVA解决这些问题的底层逻辑。一般对应的程序的操作就是从数据库查数据到内存然后到CPU进行计算。缓存一致性,每操作一次通知2.1 JAVA内存模型上边稍微扯了一下存储体系是为了在这里写一下JAVA内存模型。前边说的都是和内存有关的内容,其实多线程有关系的还有指令重排序,指令重排序也会造成在多线程访问下结束和想的不一样的情况。
  • 用CAT搞定日均900TB实时监控流量,这样优化你也行

    作为业界知名的应用监控产品,CAT 已经成功地为多家公司提供了完整的监控领域解决方案。2015 年 CAT 在携程落地,目前已经成为公司内部非常重要的监控基础设施,很好地支撑了来自 70000+ 客户端的 8000 亿条消息 / 天、900TB/ 天的实时监控流量。本文将分享携程在 CAT 性能优化上的实践,并通过这些实践总结出一些普适性的性能优化思路与方法。这里是一个 CAT 最基本的 Transaction 报表截图,可以把它简单理解成一段时间内的一些监控指标的聚合。这就是我们当前所使用的 CAT 服务端的线程模型。
  • 阿里Java面试答案【283页PDF文档免费领】

    我特意整理了一下,有很多问题不是靠几句话能讲清楚,所以整理了一份Java核心知识点来解答这些面试题。最后祝愿即将跳槽和已经在求职的大家都能找到一份好的工作,我把这些面试题,放在我的Java资源分享群里,群里会各种书籍,群里也有资深HR可以推荐工作,跟行业大牛交流技术,欢迎大家来交流学习。
  • 吹爆系列:深入探索Android布局优化大科普

    由于布局优化这一主题包含的内容太多,因此,笔者将它分为了上、下两篇,本篇,即为深入探索Android布局优化的上篇。在Android 7.0之后,对HWUI进行了重构,它是用于2D硬件绘图并负责硬件加速的主要模块,其使用了OpenGl ES来进行GPU硬件绘图。此外,Android 7.0还支持了Vulkan,并且,Vulkan 1.1在Android 被引入。
  • 异常、堆内存溢出、OOM的几种情况

    它们通常用于指示发生了异常情况。Exception Exception及其子类是 Throwable 的一种形式,它指出了合理的应用程序想要捕获的条件。RuntimeExceptionRuntimeException是那些可能在 Java 虚拟机正常运行期间抛出的异常的超类。编译器不会检查RuntimeException异常。如果代码会产生RuntimeException异常,则需要通过修改代码进行避免。例如,除数为零时产生的ArithmeticException异常,数组越界时产生的IndexOutOfBoundsException异常,fail-fail机制产生的ConcurrentModificationException异常等,都属于运行时异常。被检查异常通常都是可以恢复的。当资源不足、约束失败、或是其它程序无法继续运行的条件发生时,就产生错误。
  • Thread.sleep(0) 有什么用?

    思考下面这两个问题:假设现在是 2008-4-7 12:00:00.000,如果我调用一下 Thread.Sleep ,在 2008-4-7 12:00:01.000 的时候,这个线程会不会被唤醒?某人的代码中用了一句看似莫明其妙的话:Thread.Sleep 。既然是 Sleep 0 毫秒,那么他跟去掉这句代码相比,有啥区别么?那么,Thread.Sleep 函数是干吗的呢?看完了 Thread.Sleep 的作用,我们再来想想文章开头的两个问题。与此相似的,Thread有个Resume函数,是用来唤醒挂起的线程的。因此,Thread.Sleep的作用,就是“触发操作系统立刻重新进行一次CPU竞争”。这也是我们在大循环里面经常会写一句Thread.Sleep ,因为这样就给了其他线程比如Paint线程获得CPU控制权的权力,这样界面就不会假死在那里。
  • 使用Python的concurrent.futures轻松实现并发编程

    使用concurrent.futures并发执行简单任务用Python编写并发代码可能很棘手。Python标准库还包含一个名为concurrent.futures的模块。concurrent.futures剖析从官方文件来看,concurrent.futures模块为异步执行可调用函数提供了一个高级接口。若要使用池中的workers,应用程序将创建相应executor的实例,然后将workers提交给实例运行。如果调用了__next__(),并且在对Executor.map()的原始调用超时后结果仍不可用,则返回的迭代器将抛出concurrent.futures.TimeoutError。当使用ProcessPoolExecutor时,此方法将iterable分为若干块,并作为单独的任务提交给池。注意变量futures,其中原始任务使用字典映射到对应的futures。当使用ProcessPoolExecutor时,对于很长的iterable,使用一个较大的chunksize值与默认大小1相比可以显著提高性能。
  • Java并发编程那些事儿(五)——闭锁、栅栏、信号量

    上一篇介绍了线程间的通信问题,这篇主要说一下JDK提供的比较常用的三个并发工具类,闭锁,栅栏,和信号量。闭锁——CountDownLatch闭锁类似于一道大门,所有的线程都在大门外等候,当大门打开时,所有线程一起开工。3*每个线程执行结束后,都对endGate自动减一,这样主线程会等所有线程操作完成后,进行时间统计。4*/ 5 6publicclassCountDownLatchDemo{ 7privatestaticCountDownLatchstartGate=newCountDownLatch; 8privatestaticCountDownLatchendGate=newCountDownLatch; 910publicstaticvoidmainthrowsInterruptedException{11for{12Threadthread=newThread;13thread.start();14}15longstartTime=System.nanoTime();16System.out.println;17startGate.countDown();18endGate.await();19longendTime=System.nanoTime();20System.out.println;21}22}栅栏——CyclicBarrier栅栏和闭锁有相似的地方,他们都会执行等待,直到某个条件发生。栅栏的特点是用于线程间互相等待,而闭锁更多是用于等待某个事件,此外栅栏CyclicBarrier可以通过reset()方法进行重用,而CountDownLatch则不可以。
  • 俯瞰Java 虚拟机

    --苏轼近十年来,在编程语言领域,从1995年Java 语言的发布到日渐变的火热, Java 虚拟机 也同时受到了极大的关注。这其中不仅有 Java 虚拟机的开发者,还包括从普通的 Java 开发者,到其它像 Scala、Kotlin、Jython等「JVM语言」的开发者。这其中, Oracle 的 HotSpot 虚拟机做为官方出品,受到了最多的关注。今天咱们要说的这本『虚拟机设计与实现-以JVM为例』就是这样一本,既能带你深入到虚拟机的底层细节,又能站的远一点,角度高一点,以JVM为例,俯瞰通用语言虚拟机的设计。
  • 【Java后端面试经历】我和阿里面试官的“又”一次“邂逅”(附问题详解)

    大家好,我是 Guide哥,一个三观比主角还正的技术人。承接上一篇深受好评的文章:《我和阿里面试官的一次“邂逅”》 。时隔 n 个月,又一篇根据读者投稿的《5 面阿里,终获 offer》改编的 “Java 大厂真实面试经历” 文章来啦!不同求职者的阿里面试经历因为面试官以及你的简历和能力的不同会有比较大的差异,但是在一些常见的问题上还是比较一致的。另外,考虑到尽量涵盖多一点的知识点,这篇文章并没有在一个问题上非常深入下去,阿里的面试大概率会在一个问题深入下去。Java 内存模型了解吗?二面和三面开始了。
  • IntelliJ IDEA 调试技巧,比 Eclipse 强太多了!

    Java技术栈www.javastack.cn优秀的Java技术公众号大家周末愉快啊,今天分享一下 IntelliJ IDEA 的高级调试技巧,来看下有多骚,确实要比 Eclipse 强太多了!另外,想学更多技巧,可以关注微信公众号:Java技术栈,在后台回复:idea,获取我整理的 N 篇 IDEA 干货。
  • 线上故障排查全套路,总有一款适合你

    同时例如 jstack、jmap 等工具也是不囿于一个方面的问题的,基本上出问题就是df、free、top 三连,然后依次jstack、jmap伺候,具体问题具体分析即可。CPU一般来讲我们首先会排查 CPU 方面的问题。上下文切换针对频繁上下文问题,我们可以使用vmstat命令来进行查看cs一列则代表了上下文切换的次数。如果我们希望对特定的 pid 进行监控那么可以使用 pidstat -w pid命令,cswch 和 nvcswch 表示自愿及非自愿切换。Exception in thread “main” java.lang.StackOverflowError表示线程栈需要的内存大于 Xss 值,同样也是先进行排查,参数方面通过Xss来调整,但调整的太大可能又会引起 OOM。和线程相关的问题可以选择 thread overview 进行分析。
  • Nginx为什么快到根本停不下来?

    Nginx 以其高性能,稳定性,丰富的功能,简单的配置和低资源消耗而闻名。本文从底层原理分析 Nginx 为什么这么快!Nginx 高性能、高并发Nginx 为什么拥有高性能并且能够支撑高并发?Nginx 也是这个套路,整体流程一致:模块化体系结构Nginx 的模块根据其功能基本上可以分为以下几种类型:event module:搭建了独立于操作系统的事件处理机制的框架,及提供了各具体事件的处理。Nginx 具体使用何种事件处理模块,这依赖于具体的操作系统和编译选项。Nginx 上配置 Worker 进程的数量:worker_processes。上面是 Nginx 作为通用服务器时,最大的连接数。
  • Linux下查看进程线程数的方法

    阅读文本大概需要3分钟。00:00:00/sbin/rsyslogd-c4root2986728596298670122:45pts/500:00:00greprsyslogdrsyslogd这个进程有5个线程,所以ps -ef只有一行,而ps -eLf就有5行ps -eLf各字段含义UID:用户IDPID:process id 进程idPPID: parent process id 父进程idLWP:表示这是个线程;要么是主线程(进程),要么是线程NLWP: num of light weight process 轻量级进程数量,即线程数量STIME: start time 启动时间TIME: 占用的CPU总时间TTY:该进程是在哪个终端运行的;pts/0255代表虚拟终端,一般是远程连接的终端;tty1tty7 代表本地控制台终端CMD:进程的启动命令0x02:top -H -p ${pid}或者 top -p ${pid} 然后 shitf + H0x03:cat /proc/${pid}/status或者 ls /proc/${pid}/task其中Threads后面跟的就是线程数0x04:pstree -p ${pid}0x05:ps -hH -p ${pid}[root@localhost~]#ps-hH-p14141414?
  • 面了一个工作4年的程序员,这些面试题一个答不上来

    最近有很多朋友去目前主流的大型互联网公司面试,面试回来之后会发给我一些面试题。我特意整理了一下,有很多问题不是靠几句话能讲清楚,所以整理了一份Java核心知识点来解答这些面试题。最后祝愿即将跳槽和已经在求职的大家都能找到一份好的工作,我把这些面试题,放在我的Java资源分享群里,群里会各种书籍,群里也有资深HR可以推荐工作,跟行业大牛交流技术,欢迎大家来交流学习。
公告

《从零开始开发BBS》课程上线啦,快来跟着我一步步搭建属于你的BBS吧。

课程地址:https://www.shiyanlou.com/courses/1436
9折优惠邀请码: ZHwfIjb1

该课程会带领大家一步步的了解并熟悉Go语言开发,如果你是一个Go语言初学者,或者正准备学习Go语言,那么这个课程非常适合你。如果你熟练掌握了本课程中的知识点,相信你就已经入门Go语言开发,并能胜任日常的开发工作了。