- DRF 分页器的使用
.咖啡加剁椒.
软件测试软件测试自动化测试功能测试程序人生职场和发展
drf提供了三个内置分页器,根据前端需求选择使用。全局配置在配置文件中设置全局的分页方式,如:REST_FRAMEWORK={'DEFAULT_PAGINATION_CLASS':'rest_framework.pagination.PageNumberPagination','PAGE_SIZE':100#每页数目}也可通过继承内置的分页器类自定义Pagination类,来为视图添加不同分页器。
- Django rest_framework 后端接口开发 开发与用户相关的一组接口 登录注册与用户信息查询修改
勇敢牛马 不怕困难
全栈开发djangopythonmvcrestful后端
Djangorest_framework后端接口开发开发与用户相关的一组接口DjangoDRF框架用起来还是有一些难度的,需要做的配置,需要导的包很多,所以需要多多练习才能掌握它的使用。此文记录了使用Djangorest_famework框架开发用户模块相关接口的流程,需要注意的点,以及源码。期间重写了Django用户模型类,自定义了DjangoResponse消息格式等。此文不过多赘述环境及各种
- Django的web框架Django Rest_Framework精讲(四)
景天科技苑
Django框架djangopythonDRF
文章目录1.DRF认证组件Authentication2.权限Permissions3.限流Throttling4.过滤Filtering5.排序6.分页Pagination7.异常处理Exceptions8.自动生成接口文档大家好,我是景天,今天我们继续DRF的最后一讲,Django的web框架DjangoRest_Framework(四)1.DRF认证组件AuthenticationDRF除了
- Django的web框架Django Rest_Framework精讲(二)
景天科技苑
Django框架djangopythonDRF
文章目录1.自定义校验功能(1)validators(2)局部钩子:单字段校验(3)全局钩子:多字段校验2.raise_exception参数3.context参数4.反序列化校验后保存,新增和更新数据(1)保存数据方式1(2)数据保存方式2(3)更新数据1、更新数据方式12、更新数据方式25.ORM中的CharField6.ModelSerializer模型类序列化器大家好,我是景天,今天我们继
- 全面掌握Django的web框架Django Rest_Framework(一)
景天科技苑
Django框架djangopython后端DRF
文章目录DjangoRest_Framework1.DRF介绍2.DRF特点3.环境安装与配置(1)DRF需要以下依赖(2)创建django项目4.序列化器的使用(1)创建序列化器5.反序列化器使用DjangoRest_Framework1.DRF介绍DjangoRESTframework是一个建立在Django基础之上的Web应用开发框架,可以快速的开发RESTAPI接口应用,简称DRF。在RE
- reful实现分页、过滤、搜索、软删除
kris_lp
一、分页1.配置setting.pyREST_FRAMEWORK={#实现分页'DEFAULT_PAGINATION_CLASS':'rest_framework.pagination.PageNumberPagination','PAGE_SIZE':2,二、搜索1.配置setting.py#配置restfulapi返回结果REST_FRAMEWORK={#实现过滤'DEFAULT_FILTER
- Django笔记(七):JWT认证
垃圾管理员
Django笔记django笔记python
首前后端分离的项目更多使用JWT认证——JsonWebToken。本文记录djangorestframework-simplejwt的使用方式。文档安装pipinstalldjangorestframework-simplejwt配置settings.py:INSTALLED_APPS=['rest_framework_simplejwt',]REST_FRAMEWORK={'DEFAULT_AU
- django rest_framework 部署doc文档
小赖同学啊
pythondjangopython后端
1.背景在实际开发过程中,前后端分离的项目,是需要将一份完整的接口文档交付给前端开发人员,这样有利于开发速度和开发质量,以及有可能减少协同时间。2.内容本项目是以Python+django+rest_framework作为技术框架,在这套框架中,是有自己支持的api文档,现将实现方式整理如下2.1默认基础框架已经安装成功2.2在主项目中的url中配置如下代码,基于经验在应用路由也可以实现#在url
- DRF(Django rest_framework)(2 视图部分和路由)
Invictus path
djangopython后端restful
这边先分享一个DRF的比较全的各种组件的用法的地址(DRF|YUAN),但是讲得比较专业,我这边更通俗,是按照封装过程来讲解的,所以可能会更清晰一步一步怎么来的,为什么DRF视图!!!!!DRF视图DRF提供的视图的主要作用:基于View的接口(原生)fromdjango.viewsimportView就是从FBV到CBV的第一步,面向资源编程,将对一个资源的操作全放到一个类中,需要继承View类
- DRF(Django rest_framework)(1序列化器部分)
Invictus path
djangorestfulpython
简介:restfulrestful就是一个接口的规范,也就是面向资源的url接口视图函数只返回Json类型给前端,然后把json数据交给js,让前端的js去处理html页面变化1.序列化器序列化要传参instance(传模型类对象),反序列化要传参data(传request中的数据)因为是增删改查查,所以一个View不能有两个get方法,那么就分开两个视图类一个放不需要传id的BookView,一
- 过滤、排序、分页、异常处理
-wellplayed-
drfrestful后端python开发语言django
一过滤Filtering对于列表数据可能需要根据字段进行过滤,我们可以通过添加django-fitlter扩展来增强支持。pipinstalldjango-filter在配置文件中增加过滤后端的设置:INSTALLED_APPS=[...'django_filters',#需要注册应用,]REST_FRAMEWORK={...'DEFAULT_FILTER_BACKENDS':('django_f
- Django REST framework框架API接口序列化之简易实现
十里染林
一、重点是用到rest_framework框架的generics脚本文件,在view视图中导入fromrest_frameworkimportgenerics,定义视图类时直接继承调用generics的两个类分别是:ListCreateAPIView,RetrieveUpdateDestroyAPIView这两个类封装了增删改查方法1.png2.png二、浅析generics.pygenerics
- Django Rest Framework框架的安装
笛秋白
Djangodjangopython后端个人开发
DjangoRestFramework框架的安装DjangoRestFramework框架的安装1.DRF简介2.安装依赖3.安装使用pip安装添加rest_framework应用1.DRF简介DjangoRESTFramework是Webapi的工具包。它是在Django框架基础之上,进行了二次开发。2.安装依赖链接python安装Python(3.5,3.6,3.7,3.8,3.9)链接Dja
- Django rest_framework实现RESTful API-晒酷学院
晒酷学院
一、什么是REST面向资源是REST最明显的特征,资源是一种看待服务器的方式,将服务器看作是由很多离散的资源组成。每个资源是服务器上一个可命名的抽象概念。因为资源是一个抽象的概念,所以它不仅仅能代表服务器文件系统中的一个文件、数据库中的一张表等等具体的东西,可以将资源设计的要多抽象有多抽象,只要想象力允许而且客户端应用开发者能够理解。与面向对象设计类似,资源是以名词为核心来组织的,首先关注的是名词
- rest_framework_django学习笔记一(序列化器)
严不纯
django学习sqlite
rest_framework_django学习笔记一(序列化器)一、引入DjangoRestFramework1、安装pipinstalldjangorestframework2、引入INSTALLED_APPS=[...'rest_framework',]3、原始RESTful接口写法models.pyfromdjango.dbimportmodels'''测试数据仅供参考INSERTINTO`
- rest_framework之视图
aq_wzj
对请求响应到的视图函数的处理,及视图函数的封装注:mySer.BookSerializers为序列化的类一,对之前的增删改查进行封装方式一:fromrest_framework.mixinsimportDestroyModelMixin,CreateModelMixin,ListModelMixin,UpdateModelMixin,RetrieveModelMixinfromrest_frame
- 身份验证drf版
互联网中的一个咸鱼
参考官方文档设置认证方案全局设置REST_FRAMEWORK={'DEFAULT_AUTHENTICATION_CLASSES':('rest_framework.authentication.BasicAuthentication','rest_framework.authentication.SessionAuthentication',)}单个视图内设置使用基于APIView的视图fromr
- DRF-项目-(1):构建纯净版的drf项目,不再使用django的后台管理,django的认证,django的session等功能,作为一个纯接口项目
东林牧之
djangodjangopython后端
项目的目录结构:-HeartFailure|--apps|--user|--HeartFailure|--static|--manage.py一、django项目相关的1、命令行中创建django项目#1、切换到指定的虚拟环境中workonmy_drf#2、该虚拟环境已经安装好django和rest_framework了django-adminstartprojectHeartFailure2、在
- django-filter的使用
玉米丛里吃过亏
pythondjangopython后端django-filter
django-filter是一个通用的、可重用的应用程序,它可以减轻视图代码的编写工作量。具体来说,它允许用户根据模型的字段筛选查询集,并显示表单让他们这样做。安装pipinstalldjango-filter快速开始在settings.py中添加如下配置:INSTALLED_APPS=[...'django_filters',]REST_FRAMEWORK={'DEFAULT_FILTER_BA
- 【Django-01】 视图函数和视图类
笔生花
Django从零到1djangopython后端
视图函数作用详解视图函数的特点视图类实际开发怎么用一个无意义的demo作用用于返回给前端数据详解deflist(request):"""1.普通的视图函数request是HttpRequest函数2.且必须用request.GET|request.POST指定方法是什么方法3.返回值不能用rest_framework包下的Response必须是:paramrequest::return:"""as
- Django-自动生成API文档
测开小菜鸟
Django
自动生成API文档一、doc文档1.1安装1.2添加配置1.3给每个接口添加注释二、swagger文档1.1安装1.2注册1.3添加路由一、doc文档1.1安装需要安装以下几个包(如果有虚拟环境需要进入虚拟环境安装)coreapi(必须)Pygments(可选)Markdown(可选)1.2添加配置3.10版本以上的DRF,需要添加配置信息,在setting.py文件的REST_FRAMEWORK
- python rest_framework
杨宇奇
python
1.新建serializerfromdjango.contrib.auth.modelsimportUser,Groupfromrest_frameworkimportserializersclassUserSerializer(serializers.HyperlinkedModelSerializer):classMeta:model=Userfields=('url','username',
- django rest_framework 序列化组件详解
weixin_30586085
json数据库前端ViewUI
为什么要用序列化组件当我们做前后端分离的项目,我们前后端交互一般都选择JSON数据格式,JSON是一个轻量级的数据交互格式。那么我们给前端数据的时候都要转成json格式,那就需要对我们从数据库拿到的数据进行序列化。接下来我们看下django序列化和rest_framework序列化的对比Django的序列化方法classBooksView(View):defget(self,request):bo
- DRF 学习
vivigege
学习数据库pythonmysql
一、安装DRF1、pipinstalldjangorestframework-ihttps://pypi.douban.com/simple2、pipinstallpymysql-ihttps://pypi.douban.com/simple二、创建Django项目1、django-adminstartprojectdrfdemo三、添加rest_framework应用1、INSTALLED_AP
- 前后端分离项目部署学习-好课商城项目部署详细步骤-DjangoDRF+Vue+Nginx+Uwsgi
画龙点睛之笔
nginx学习vue.js
部署静态文件当Django运行在生产模式时,将不再提供静态文件的支持,需要将静态文件交给静态文件服务器。我们先收集所有静态文件。项目中的静态文件除了我们使用的front_end_pc中之外,django本身还有自己的静态文件,如果rest_framework、xadmin、admin、ckeditor等。我们需要收集这些静态文件,集中一起放到静态文件服务器中。我们要将收集的静态文件放到front_
- Django rest_framework时间区间筛选
等到双子座
大数据
项目场景:基于用户体验,查看在某一时间段内的内容代码演示:以某团任意时间段内的订单筛选查询为例表模型设计:classInfo(models.Model):name=models.CharField(verbose_name='订单名称')publish_time=models.DateTimeField(null=True,blank=True,verbose_name='完成时间')classM
- Rest_framework-3
weixin_30458043
jsonpython大数据
目录:返回值的封装分页视图路由渲染器一返回值的封装a.API的基本框架setting:1首先注册rest_framework2版本配置REST_FRAMEWORK={"DEFAULT_VERSIONING_CLASS":"rest_framework.versioning.URLPathVersioning","VERSION_PARAM":"version","ALLOWED_VERSIONS"
- Django分页功能的使用和自定义分装
skyTree,,
Djangodjangopython后端
1.在settings中进行注册#drf配置REST_FRAMEWORK={'DEFAULT_AUTHENTICATION_CLASSES':(#'rest_framework_jwt.authentication.JSONWebTokenAuthentication','rest_framework_simplejwt.authentication.JWTAuthentication','res
- ModuleNotFoundError: No module named ‘rest_framework‘的解决办法
金乌爬虫
逆向知识djangopython后端
笔者近日运行Django程序,发现报错如下:ModuleNotFoundError:Nomodulenamed'rest_framework'如下图实际解决办法很简单,安装相关的python包即可,具体命令如下:pipinstalldjangorestframework
- Django REST framework - 序列化组件、source、钩子函数
我怕天黑却不怕鬼
PythonDjangorestfuldjangopython
[DjangoRESTframework-序列化组件、source、钩子函数]序列化器-Serializer什么是rest_framework序列化?在写前后端不分离的项目时:我们有form组件帮我们去做数据校验我们有模板语法,从数据库取出的queryset对象不需要人为去转格式当我们写前后端分离项目的时:我们需要自己去做数据校验我们需要手动去转数据格式,因为跨平台数据传输都用json字符串,不能
- 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性能优化权威指南》