- 取消短按power键做出对应的功能
frameworks/base/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java@@publicbooleanisForegroundActivity(Stringpackage_name){cancelPendingScreenshotChordAction();if(interceptPowerKeyUp(c
- Android 跨进程通信(IPC)深度技术总结
JT-Blink
Androidandroid
1.概述Android系统基于Linux内核,采用多进程架构设计。每个Android应用默认运行在独立的进程中,拥有独立的虚拟机实例和内存空间。进程间的内存隔离机制保证了系统的稳定性和安全性,但同时也带来了进程间通信的挑战。1.1为什么需要跨进程通信系统架构需求:Android系统服务(如ActivityManagerService、WindowManagerService)运行在system_s
- 后台服务启动前台Service(跨进程)
一只努力的菜鸟。
javaandroidandroidstudio
在开发中,很多时候我们会碰到在hmi里面做了页面布局,但是要求开机就显示。我们的Service是开机自启动的,但是hmi不是开机自启动。那么这个时候我们需要在hmi添加一个hmiService,用后台的Service拉起hmiService进而去显示View(这个View一般都为WindowManager,不依附Activity)上代码:前台Service(hmiService):1.首先创建一个
- Android Framework AMS面试题及参考答案
大模型大数据攻城狮
android安卓android面经生命周期frameworkzygotebinder
目录什么是AMS?AMS在Android系统中的作用?AMS是如何启动的?Zygote、SystemServer与AMS之间的关系?AMS如何与其他系统服务(如PackageManagerService、WindowManagerService、WMS)交互?AMS如何使用Binder完成通信?AMS如何管理系统服务的启动和停止?AMS在应用程序进程管理中扮演什么角色?如何创建和管理应用程序进程?
- Android 性能优化
jim_dayday_up
#Android_进阶_应用android性能优化
一、Android中检测性能工具Profiler——使用Profiler的CPU分析功能。MethodTracing————通过该方法,我们可以记录应用运行过程中的方法调用情况,包括每个方法的执行时间、调用次数等。Systrace是Android平台提供的一款工具,用于记录短期内的设备活动。Systrace允许您在系统级别(如SurfaceFlinger、WindowManagerService等
- android webview输入框_Android WebView 软键盘挡住输入框
weixin_39681621
androidwebview输入框
解决方法一:在所在的Activity中加入getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE|WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);解决方法二:1.调整AndroidManifest.xml找到对应的Activity,加入以
- dwm 开源项目启动与配置教程
dwm开源项目启动与配置教程dwmDenoWindowManager:Cross-platformwindowcreationandmanagement项目地址:https://gitcode.com/gh_mirrors/dwm4/dwm1.项目目录结构及介绍dwm项目是一个轻量级的窗口管理器,其目录结构如下:dwm/├──config.h#配置文件头文件├──dwm.c#主程序文件├──dwm
- 【Android基础回顾】四:ServiceManager
程序员-薯片
Androidandroid
Android中的ServerManager是Android框架中一个用于管理系统服务的核心机制。它是BinderIPC的一部分,用于在客户端和服务端之间建立联系,广泛应用于系统服务(如ActivityManager、WindowManager等)的注册与获取。1ServiceManager职责是什么?有什么用?ServiceManager是Android系统中一个特殊的Binder服务,其职责主
- app使用Window覆盖系统亮度的流程浅析
little six
androidjava开发语言
前言:在apk里使用下面方法来进行亮度调节遇到了问题,当亮度小于10后屏幕会变为最亮;WindowlocalWindow=getWindow();WindowManager.LayoutParamsparams=localWindow.getAttributes();params.screenBrightness=9/255.0F;localWindow.setAttributes(params)
- Android 12.0 屏蔽FallbackHome机制去掉android正在启动直接进入默认Launcher功能实现
安卓兼职framework应用工程师
android12.0Rom定制化系统讲解androidjavaFallbackHome机制去掉android正在启动android正在启动
目录1.概述2.屏蔽FallbackHome机制去掉android正在启动直接进入默认Launcher功能实现的核心类3.屏蔽FallbackHome机制去掉android正在启动直接进入默认Launcher功能实现的核心功能分析和实现3.1WindowManagerService.java中关于系统解锁,停止开机动画的相关操作流程分析3.2ActivityRecord.java的关于启动Laun
- Android系统架构开篇(深度好文,值得收藏,2019-2021历年阿里Android面试真题
m0_64604636
程序员面试移动开发android
SystemServer进程,是由Zygote进程fork而来,SystemServer是Zygote孵化的第一个进程,SystemServer负责启动和管理整个Javaframework,包含ActivityManager,WindowManager,PackageManager,PowerManager等服务。MediaServer进程,是由init进程fork而来,负责启动和管理整个C++f
- Android 14 系统统一修改app启动时图标大小和圆角
青春给了狗
android
Android14统一修改app启动时图标大小和圆角修改如下:目录:frameworks/base/core/java/android/window/SplashScreenView.javaframeworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/startingsurface/SplashscreenContentDra
- WMS层级修改与原理简单分析
一只刘小彤!
android
记录一个WMS的问题,如何修改或者添加一个WMS的层级WindowState(WindowManagerServiceservice,Sessions,IWindowc,WindowTokentoken,WindowStateparentWindow,intappOp,WindowManager.LayoutParamsa,intviewVisibility,intownerId,intshowU
- Dialog 不能全屏,左右有间距解决方案
只可远观
AndroidDialogDialog全屏
extendsDialog全屏、或者自定义间距.win.getDecorView().setPadding(0,0,0,0);就能够水平占满了。(自定义间距时使用)项目使用代码如下:WindowdialogWindow=getWindow();WindowManager.LayoutParamslp=dialogWindow.getAttributes();/***设置这个使dialog全屏*/l
- Android实现悬浮菜单功能(附带源码)
Katie。
Android实战项目android
一、项目概述1.1项目背景在很多应用场景中,悬浮菜单作为一种全局、浮在其他界面之上的操作入口,能够让用户在任何页面上都可以快速访问某些常用功能,例如快捷设置、聊天悬浮窗、工具栏、悬浮助手等。实现悬浮菜单功能不仅能优化用户体验,同时能使应用具备更强的互动性和易用性。Android平台提供了WindowManager接口,使得开发者可以在应用内乃至系统级别创建悬浮视图(常见于“聊天泡泡”、“悬浮球”等
- android14 keycode 上报 0 解决办法
fuyinghaha
android12-14遇见的bugandroid
驱动改完后发现上报了keycode=004-0713:02:33.20123232662DWindowManager:interceptKeyTqkeycode=0interactive=falsekeyguardActive=truepolicyFlags=200000004-0713:02:33.45823232662DWindowManager:interceptKeyTqkeycode=0
- Android 浮动窗口进阶——画中画,浮动视频
一叶知秋dong
androidapp开发
今天继续上一篇Android顶层窗口、浮动窗口的进阶应用。上一篇主要讲解了WindowManager服务和如何使用WindowManager编写一个顶层窗口。今天主要是讲讲如何在顶层窗口里面播放视频,这个功能对很多嵌入式设备来说十分有用。例如现在手机和平板上一些视频播放器就可以实现画中画功能,只显示一部分小窗口播放,用户可以继续操作其他功能。当你在看视频的时候收到短信,你只要进入画中画功能,视频可
- 《深度剖析Android 12 SystemUI锁屏通知布局亮屏流程:从源码到实现》
KdanMin
【高通Android系统开发系列】android
优化后文章结构:1.前言强调锁屏通知布局的重要性及分析目的,引出后续源码分析的必要性。2.核心类解析KeyguardViewMediator:锁屏核心逻辑控制,处理亮屏/息屏事件分发。PhoneWindowManager:系统输入事件(如电源键)的入口,触发屏幕状态切换。KeyguardServiceDelegate:桥接系统服务与Keyguard核心逻辑,代理关键生命周期回调。3.核心流程分析3
- Android Compose 透明状态栏实现
淘气章鱼哥
Androidandroid
目前知道的有两种:第一种,是看朱江的demo里用的方法:/***设置透明状态栏*/funActivity.transparentStatusBar(){transparentStatusBar(window)}privatefuntransparentStatusBar(window:Window){window.clearFlags(WindowManager.LayoutParams.FLAG
- Android 音量调节(二)-Android10 音量调节源码实现流程
画个太阳作晴天
androidframework音频android
上一篇文章描述了在app开发中怎么调节系统不同音频流的音量大小。这次我们看下在android10中系统调节音量的实现和系统默认音量的修改。(本次源码以Android10为主梳理系统音量修改的实现)一按实体音量键修改音量//frameworks/base/services/core/java/com/android/server/policy/PhoneWindowManager.java//以下按
- MTK6768 Android13 亮度条均匀调节实现
ItJavawfc
SystemUI亮度条定制亮度条均匀调节物理按键亮度范围定制
文章目录需求:问题现象:需求实现疑难问题点:相关资源修改的文件调试技巧具体需求实现去除亮度弹框设置去掉跳转逻辑SystemUI亮度条长按跳转屏蔽实现亮度均匀调节PhoneWindowManager.javaBrightnessUtilsconvertLinearToGammaFloatBrightnessSynchronizerbrightnessIntToFloatbrightnessFloat
- android 软键盘的显示和隐藏方法
飞_哥
android软键盘隐藏显示android
方法一:在OnCreate()函数中,加上下面的代码getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);12方法二:在AndroidManifest.xml中,在所要设置的activity中设置以下属性就行了activityandroid:windowSoftInputMode="stat
- android10 按键音量调节源码解析
@OuYang
android
/frameworks/base/services/core/java/com/android/server/policy/PhoneWindowManager.javastaticIAudioServicegetAudioService(){IAudioServiceaudioService=IAudioService.Stub.asInterface(ServiceManager.checkS
- 如何在Android 12 aosp系统源码中添加三指下滑截图功能
一航jason
androidpython开发语言
如何在Android12aosp系统源码中添加三指下滑截图功能系统中截图api非常简单:privatestaticScreenshotHelpersScreenshotHelper;sScreenshotHelper=newScreenshotHelper(mContext);//调用sScreenshotHelper.takeScreenshot(WindowManager.TAKE_SCREE
- android display 笔记(八)WMS与SurfaceFlinger交互
那天的烟花雨
android笔记交互
在Android系统中由WindowManagerService也就是WMS承担窗口位置的管理。WMSWMS是一个系统服务,运行在systemserver进程,系统启动便开始启动该服务/frameworks/base/services/java/com/android/server/SystemServer.java//Startservices.938try{939t.traceBegin("S
- View绘制流程(三) - onLayout
世道无情
1.onLayoutmeasure完毕后,表示view大小已经测量好了,然后就是onLayout了,作用是确定view的位置;performTraversals__>perforLayouthost.layout__>view.onLayout__>viewgroup.onLayout2.源码分析privatevoidperformLayout(WindowManager.LayoutParams
- 鸿蒙HarmonyOS开发手册:窗口子系统基本概念与流程分析
小小煤球
HarmonyOS鸿蒙开发OpenHarmony鸿蒙华为harmonyos前端鸿蒙系统
窗口子系统位于\fundation\windowmanager目录下,提供对窗口与Display管理的基础能力概览窗口是什么每个Ability在创建时都会创建一个主窗口,并且为该窗口设置ACE中的UIContent用于加载展示UI界面。基本上所有的UI视图都是在窗口中展示的,比如弹窗、toast、系统状态栏导航栏、应用等。因此窗口子系统是系统图形界面显示所需的基础子系统。窗口的种类主窗口应用显示的
- Activity android:configChanges属性
persist89
xml
报错android.view.windowleaked——窗口泄漏。Android的每个Activity都有个WindowManager窗口管理器,构建在某个Activity之上的对话框、PopupWindow也有对应的WindowManager窗口管理器。由于Dialog、PopupWindown不能脱离Activity而单独存在着,所以当承载某个Dialog或者某个PopupWindow正在显
- android:configChanges属性
小南胡
安卓原生
今天有幸去哥们的大公司做了半天的暂时工,一个偶现的Bug折腾了他好久,好不easy今天抓到了异常Log日志。大致的意思就是android.view.windowleaked——窗口泄漏。我在网上查了资料:Android的每个Activity都有个WindowManager窗口管理器,构建在某个Activity之上的对话框、PopupWindow也有对应的WindowManager窗口管理器。由于D
- Android 14.0 系统强制app横屏显示功能实现
安卓兼职framework应用工程师
android14.0Rom定制化系列讲解androidapp横屏显示固定横屏app横屏横屏显示app
1.概述在14.0系统产品rom定制化开发中,对于处理屏幕旋转方向,首先有kernel底层处理,从底层驱动gsensor中获取数据,从而判断屏幕方向的,然后事件上报后最后由WMS就是WindowManagerService来处理旋转的相关事件,接下来看下强制app横屏显示功能如何实现2.系统强制app横屏显示功能实现的核心类framework/base/services/java/com/andr
- Java 并发包之线程池和原子计数
lijingyao8206
Java计数ThreadPool并发包java线程池
对于大数据量关联的业务处理逻辑,比较直接的想法就是用JDK提供的并发包去解决多线程情况下的业务数据处理。线程池可以提供很好的管理线程的方式,并且可以提高线程利用率,并发包中的原子计数在多线程的情况下可以让我们避免去写一些同步代码。
这里就先把jdk并发包中的线程池处理器ThreadPoolExecutor 以原子计数类AomicInteger 和倒数计时锁C
- java编程思想 抽象类和接口
百合不是茶
java抽象类接口
接口c++对接口和内部类只有简介的支持,但在java中有队这些类的直接支持
1 ,抽象类 : 如果一个类包含一个或多个抽象方法,该类必须限定为抽象类(否者编译器报错)
抽象方法 : 在方法中仅有声明而没有方法体
package com.wj.Interface;
- [房地产与大数据]房地产数据挖掘系统
comsci
数据挖掘
随着一个关键核心技术的突破,我们已经是独立自主的开发某些先进模块,但是要完全实现,还需要一定的时间...
所以,除了代码工作以外,我们还需要关心一下非技术领域的事件..比如说房地产
&nb
- 数组队列总结
沐刃青蛟
数组队列
数组队列是一种大小可以改变,类型没有定死的类似数组的工具。不过与数组相比,它更具有灵活性。因为它不但不用担心越界问题,而且因为泛型(类似c++中模板的东西)的存在而支持各种类型。
以下是数组队列的功能实现代码:
import List.Student;
public class
- Oracle存储过程无法编译的解决方法
IT独行者
oracle存储过程
今天同事修改Oracle存储过程又导致2个过程无法被编译,流程规范上的东西,Dave 这里不多说,看看怎么解决问题。
1. 查看无效对象
XEZF@xezf(qs-xezf-db1)> select object_name,object_type,status from all_objects where status='IN
- 重装系统之后oracle恢复
文强chu
oracle
前几天正在使用电脑,没有暂停oracle的各种服务。
突然win8.1系统奔溃,无法修复,开机时系统 提示正在搜集错误信息,然后再开机,再提示的无限循环中。
无耐我拿出系统u盘 准备重装系统,没想到竟然无法从u盘引导成功。
晚上到外面早了一家修电脑店,让人家给装了个系统,并且那哥们在我没反应过来的时候,
直接把我的c盘给格式化了 并且清理了注册表,再装系统。
然后的结果就是我的oracl
- python学习二( 一些基础语法)
小桔子
pthon基础语法
紧接着把!昨天没看继续看django 官方教程,学了下python的基本语法 与c类语言还是有些小差别:
1.ptyhon的源文件以UTF-8编码格式
2.
/ 除 结果浮点型
// 除 结果整形
% 除 取余数
* 乘
** 乘方 eg 5**2 结果是5的2次方25
_&
- svn 常用命令
aichenglong
SVN版本回退
1 svn回退版本
1)在window中选择log,根据想要回退的内容,选择revert this version或revert chanages from this version
两者的区别:
revert this version:表示回退到当前版本(该版本后的版本全部作废)
revert chanages from this versio
- 某小公司面试归来
alafqq
面试
先填单子,还要写笔试题,我以时间为急,拒绝了它。。时间宝贵。
老拿这些对付毕业生的东东来吓唬我。。
面试官很刁难,问了几个问题,记录下;
1,包的范围。。。public,private,protect. --悲剧了
2,hashcode方法和equals方法的区别。谁覆盖谁.结果,他说我说反了。
3,最恶心的一道题,抽象类继承抽象类吗?(察,一般它都是被继承的啊)
4,stru
- 动态数组的存储速度比较 集合框架
百合不是茶
集合框架
集合框架:
自定义数据结构(增删改查等)
package 数组;
/**
* 创建动态数组
* @author 百合
*
*/
public class ArrayDemo{
//定义一个数组来存放数据
String[] src = new String[0];
/**
* 增加元素加入容器
* @param s要加入容器
- 用JS实现一个JS对象,对象里有两个属性一个方法
bijian1013
js对象
<html>
<head>
</head>
<body>
用js代码实现一个js对象,对象里有两个属性,一个方法
</body>
<script>
var obj={a:'1234567',b:'bbbbbbbbbb',c:function(x){
- 探索JUnit4扩展:使用Rule
bijian1013
java单元测试JUnitRule
在上一篇文章中,讨论了使用Runner扩展JUnit4的方式,即直接修改Test Runner的实现(BlockJUnit4ClassRunner)。但这种方法显然不便于灵活地添加或删除扩展功能。下面将使用JUnit4.7才开始引入的扩展方式——Rule来实现相同的扩展功能。
1. Rule
&n
- [Gson一]非泛型POJO对象的反序列化
bit1129
POJO
当要将JSON数据串反序列化自身为非泛型的POJO时,使用Gson.fromJson(String, Class)方法。自身为非泛型的POJO的包括两种:
1. POJO对象不包含任何泛型的字段
2. POJO对象包含泛型字段,例如泛型集合或者泛型类
Data类 a.不是泛型类, b.Data中的集合List和Map都是泛型的 c.Data中不包含其它的POJO
 
- 【Kakfa五】Kafka Producer和Consumer基本使用
bit1129
kafka
0.Kafka服务器的配置
一个Broker,
一个Topic
Topic中只有一个Partition() 1. Producer:
package kafka.examples.producers;
import kafka.producer.KeyedMessage;
import kafka.javaapi.producer.Producer;
impor
- lsyncd实时同步搭建指南——取代rsync+inotify
ronin47
1. 几大实时同步工具比较 1.1 inotify + rsync
最近一直在寻求生产服务服务器上的同步替代方案,原先使用的是 inotify + rsync,但随着文件数量的增大到100W+,目录下的文件列表就达20M,在网络状况不佳或者限速的情况下,变更的文件可能10来个才几M,却因此要发送的文件列表就达20M,严重减低的带宽的使用效率以及同步效率;更为要紧的是,加入inotify
- java-9. 判断整数序列是不是二元查找树的后序遍历结果
bylijinnan
java
public class IsBinTreePostTraverse{
static boolean isBSTPostOrder(int[] a){
if(a==null){
return false;
}
/*1.只有一个结点时,肯定是查找树
*2.只有两个结点时,肯定是查找树。例如{5,6}对应的BST是 6 {6,5}对应的BST是
- MySQL的sum函数返回的类型
bylijinnan
javaspringsqlmysqljdbc
今天项目切换数据库时,出错
访问数据库的代码大概是这样:
String sql = "select sum(number) as sumNumberOfOneDay from tableName";
List<Map> rows = getJdbcTemplate().queryForList(sql);
for (Map row : rows
- java设计模式之单例模式
chicony
java设计模式
在阎宏博士的《JAVA与模式》一书中开头是这样描述单例模式的:
作为对象的创建模式,单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。这个类称为单例类。 单例模式的结构
单例模式的特点:
单例类只能有一个实例。
单例类必须自己创建自己的唯一实例。
单例类必须给所有其他对象提供这一实例。
饿汉式单例类
publ
- javascript取当月最后一天
ctrain
JavaScript
<!--javascript取当月最后一天-->
<script language=javascript>
var current = new Date();
var year = current.getYear();
var month = current.getMonth();
showMonthLastDay(year, mont
- linux tune2fs命令详解
daizj
linuxtune2fs查看系统文件块信息
一.简介:
tune2fs是调整和查看ext2/ext3文件系统的文件系统参数,Windows下面如果出现意外断电死机情况,下次开机一般都会出现系统自检。Linux系统下面也有文件系统自检,而且是可以通过tune2fs命令,自行定义自检周期及方式。
二.用法:
Usage: tune2fs [-c max_mounts_count] [-e errors_behavior] [-g grou
- 做有中国特色的程序员
dcj3sjt126com
程序员
从出版业说起 网络作品排到靠前的,都不会太难看,一般人不爱看某部作品也是因为不喜欢这个类型,而此人也不会全不喜欢这些网络作品。究其原因,是因为网络作品都是让人先白看的,看的好了才出了头。而纸质作品就不一定了,排行榜靠前的,有好作品,也有垃圾。 许多大牛都是写了博客,后来出了书。这些书也都不次,可能有人让为不好,是因为技术书不像小说,小说在读故事,技术书是在学知识或温习知识,有
- Android:TextView属性大全
dcj3sjt126com
textview
android:autoLink 设置是否当文本为URL链接/email/电话号码/map时,文本显示为可点击的链接。可选值(none/web/email/phone/map/all) android:autoText 如果设置,将自动执行输入值的拼写纠正。此处无效果,在显示输入法并输
- tomcat虚拟目录安装及其配置
eksliang
tomcat配置说明tomca部署web应用tomcat虚拟目录安装
转载请出自出处:http://eksliang.iteye.com/blog/2097184
1.-------------------------------------------tomcat 目录结构
config:存放tomcat的配置文件
temp :存放tomcat跑起来后存放临时文件用的
work : 当第一次访问应用中的jsp
- 浅谈:APP有哪些常被黑客利用的安全漏洞
gg163
APP
首先,说到APP的安全漏洞,身为程序猿的大家应该不陌生;如果抛开安卓自身开源的问题的话,其主要产生的原因就是开发过程中疏忽或者代码不严谨引起的。但这些责任也不能怪在程序猿头上,有时会因为BOSS时间催得紧等很多可观原因。由国内移动应用安全检测团队爱内测(ineice.com)的CTO给我们浅谈关于Android 系统的开源设计以及生态环境。
1. 应用反编译漏洞:APK 包非常容易被反编译成可读
- C#根据网址生成静态页面
hvt
Web.netC#asp.nethovertree
HoverTree开源项目中HoverTreeWeb.HVTPanel的Index.aspx文件是后台管理的首页。包含生成留言板首页,以及显示用户名,退出等功能。根据网址生成页面的方法:
bool CreateHtmlFile(string url, string path)
{
//http://keleyi.com/a/bjae/3d10wfax.htm
stri
- SVG 教程 (一)
天梯梦
svg
SVG 简介
SVG 是使用 XML 来描述二维图形和绘图程序的语言。 学习之前应具备的基础知识:
继续学习之前,你应该对以下内容有基本的了解:
HTML
XML 基础
如果希望首先学习这些内容,请在本站的首页选择相应的教程。 什么是SVG?
SVG 指可伸缩矢量图形 (Scalable Vector Graphics)
SVG 用来定义用于网络的基于矢量
- 一个简单的java栈
luyulong
java数据结构栈
public class MyStack {
private long[] arr;
private int top;
public MyStack() {
arr = new long[10];
top = -1;
}
public MyStack(int maxsize) {
arr = new long[maxsize];
top
- 基础数据结构和算法八:Binary search
sunwinner
AlgorithmBinary search
Binary search needs an ordered array so that it can use array indexing to dramatically reduce the number of compares required for each search, using the classic and venerable binary search algori
- 12个C语言面试题,涉及指针、进程、运算、结构体、函数、内存,看看你能做出几个!
刘星宇
c面试
12个C语言面试题,涉及指针、进程、运算、结构体、函数、内存,看看你能做出几个!
1.gets()函数
问:请找出下面代码里的问题:
#include<stdio.h>
int main(void)
{
char buff[10];
memset(buff,0,sizeof(buff));
- ITeye 7月技术图书有奖试读获奖名单公布
ITeye管理员
活动ITeye试读
ITeye携手人民邮电出版社图灵教育共同举办的7月技术图书有奖试读活动已圆满结束,非常感谢广大用户对本次活动的关注与参与。
7月试读活动回顾:
http://webmaster.iteye.com/blog/2092746
本次技术图书试读活动的优秀奖获奖名单及相应作品如下(优秀文章有很多,但名额有限,没获奖并不代表不优秀):
《Java性能优化权威指南》