自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

XAVI的博客

Android小学生

  • 博客(119)
  • 资源 (3)
  • 收藏
  • 关注

转载 在Ubantu系统上使用Docker搭建LDAP

前提是ubantu系统上已经安装好docker环境。

2022-07-22 18:52:38 28

转载 Ubantu 20.04.1 LTS 虚拟机 安装docker

ubantu 虚拟机安装 docker 环境

2022-07-22 18:38:36 64

原创 sendBroadCast 时 AMS 的checkBroadcastFromSystem方法

每日一记 sendBroadCast 时 AMS 的checkBroadcastFromSystem方法(Android版本11.0.0)private void checkBroadcastFromSystem(Intent intent, ProcessRecord callerApp, String callerPackage, int callingUid, boolean isProtectedBroadcast, List receivers) { /

2021-07-02 18:52:55 193

原创 sendBroadCast 时经过 AMS 的 verifyBroadcastLocked方法

每日一记 sendBroadCast 时经过 AMS 的 verifyBroadcastLocked方法(Android版本11.0.0)public final int broadcastIntentWithFeature(IApplicationThread caller, String callingFeatureId, Intent intent, String resolvedType, IIntentReceiver resultTo, int

2021-07-02 10:46:03 105

原创 framework 判断广播aciton isProtected

每日一记 framework 判断广播的aciton 是否 isProtected** @Override public boolean isProtectedBroadcast(String actionName) { // allow instant applications synchronized (mProtectedBroadcasts) { if (mProtectedBroadcasts.contains(actionName

2021-07-01 17:05:50 43

原创 记录源码 android.util.Singleton

android 源码中 用来实现单例的 工具类package android.util;import android.compat.annotation.UnsupportedAppUsage;/** * Singleton helper class for lazily initialization. * * Modeled after frameworks/base/include/utils/Singleton.h * * @hide */public abstract cla

2021-06-30 16:39:02 65

原创 Android measureSpec 怎么通过位运算 把两个值 放到一个int变量中

都知道 measureSpec 分为 mode 和sizemode 占2位,size占30位,组成一个 32位 的int 类型两个值 放到一个int 变量中的愿意是 view 会频繁测量 ,这样可以节省 内存空间mode 有三种/** * Measure specification mode: The parent has not imposed any constraint * on the child. It can be whatever size it w

2020-10-29 22:38:14 209

原创 使用 adb命令 写出抓取log 的小工具

ADB简介:ADB,即 Android Debug Bridge,它是 Android 开发/测试人员不可替代的强大工具,也是 Android 设备玩家的好玩具。安卓调试桥 (Android Debug Bridge, adb),是一种可以用来操作手机设备或模拟器的命令行工具。它存在于 sdk/platform-tools 目录下。虽然现在 Android Studio 已经将大部分 ADB 命令以图形化的形式实现了,但是了解一下还是有必要的。是Android 开发必备小技能Android studi

2020-10-22 19:29:13 1159

原创 java 怎么使用 设计模式对业务进行解耦(一)

最近非常头疼 ,到新公司碰到了 非常没有经验的产品,感觉产品经理和说相声一样,门槛很低,进了门才发现 楼梯在门里面,一层比一层难爬我是做Android开发的,目前还是使用java 作为开发语言,所以以java为例,归纳一下我的java 使用经验移动端的社交分享功能大家应该都用过,有一些公司早就 提供了免费的社交分享集成SDK,比如友盟,shareSdk为什么 已经有了 集成好的sdk 还会头疼呢,因为产品在 一个简单的分享功能上强行制造了 非常多逻辑分支,思维导图如下(还是我 为了抽象代码自己画的,产

2020-07-29 17:31:16 1787 1

原创 Windows下Jmeter压测端口占用问题

转载 李亚飞 大佬的文章:https://www.lyafei.com/前言今天测试和我分别压测了HTTP接口,他使用的是测试专用的8核16G压测服务器,所装系统是Windows,我使用的是开发机2核4G,运行环境是 CentOS,走内网压测不存在网络瓶颈,使用相同的测试计划,我压测出来的结果并发数是他的3倍,并且他的测试结果伴有1.7%错误,查看错误发现并不是接口返回,而是Jmeter报出来的。查了一波资料,发现 Windows 环境下的端口循环回收需要消耗2~4分钟。由此猜测可能是由于 Wind.

2020-07-15 20:40:00 4954

转载 Piwik在代理后端获取真实IP

转载 李亚飞 大佬的文章:https://www.lyafei.com/运维前几天把piwik切换到了Nginx后端,并且服务器加了HA 代理分发,piwik主机仅负责收集数据,包括数据库读写分离,但今天看了下数据发现所有来源IP都是代理IP,因为要对接大数据组,所以抓取丢给kafka的用户ip也都是代理ip,被大数据组骚扰了两天,今天就排查了下问题。首先是服务器location / { proxy_pass http://xxxx_piwik; proxy_set_.

2020-07-09 11:29:57 4662

转载 Konga管理GUI操作

转载 李亚飞 大佬的文章:https://www.lyafei.com/Konga管理GUI简介安装之前简单介绍安装了 Konga,并且进行了账号注册和设置连接,这篇就详细讲述下 Konga 的一些页面信息和使用操作。附上:Kong 官网:https://konghq.com/Kong GitHub地址:https://github.com/kong/kongkonga GitHub地址:https://github.com/pantsel/kongaKonga操作Dashboard.

2020-07-08 10:56:32 5316

转载 Kong网关工作原理及核心概念

转载 李亚飞 大佬的文章:https://www.lyafei.com/Kong网关简介安装之前简单介绍安装了 Kong,这篇就是深入 Kong 详细讲述下它的一些工作原理、核心概念。附上:Kong 官网:https://konghq.com/Kong GitHub地址:https://github.com/kong/kongKong的工作原理Kong默认开放的端口接收客户端流量的端口,proxy 部分:8000 —— http 端口:8443 —— https 端口adm.

2020-07-08 10:32:56 8424 1

转载 Konga管理GUI简介安装

转载 李亚飞 大佬的文章:https://www.lyafei.com/Kong网关简介安装前文介绍了 Kong 以及如何安装,Kong 虽然很强大,但是在管理方式上比较单一只能通过 API 请求来管理,那么有没有一个GUI 界面的管理工具呢?这里就要说到 Kong 的管理 GUI Konga。Why Konga?当前 Kong 的社区版是没有 dashboard 的,但是付费的企业版是有带的,并且还有一些企业版才能使用的插件以及升级后的企业版插件。所以对于使用社区版的用户而言,排除自己去撸一个.

2020-07-08 10:24:59 5699

转载 Kong网关简介安装

转载 李亚飞 大佬的文章:https://www.lyafei.com/背景我们有批设备卖给了海外的服务商,老外请了第三方检测机构,检测设备与我们系统的安全性,结果找到了近 40+ 的安全漏洞,有很大一部分的安全漏洞提炼出来,其实可以统一解决掉,因为涉及服务和安卓组件太多,如果一个一个修改,不管是时间还是人力投入都很巨大,那快速并且改动最小的方法就是从网关上解决这些问题。网关是微服务中不可或缺的一部分,它承载了所有请求流量入口,参数验证拦截,用户权限验证等,但是除了 JAVA 的 spring c.

2020-07-08 10:15:45 5191

转载 超实用压力测试工具-ab工具

转载 李亚飞 大佬的文章:https://www.lyafei.com/前言在学习ab工具之前,我们需了解几个关于压力测试的概念 。吞吐率(Requests per second)概念:服务器并发处理能力的量化描述,单位是reqs/s,指的是某个并发用户数下单位时间内处理的请求数。某个并发用户数下单位时间内能处理的最大请求数,称之为最大吞吐率。计算公式:总请求数 / 处理完成这些请求数所花费的时间,即Request per second = Complete requests / Time.

2020-07-07 11:18:03 5222

转载 Kong网关插件使用

转载 李亚飞 大佬的文章:https://www.lyafei.com/授权验证在接口请求中权限验证是一个恒久不变的话题,Kong 自带了6种加密方式先创建一个 Basic Auth,直接确认即可此时页面访问 http://dev.lyafei.com:8000/dev 会弹出登录框,让你输入用户名密码,若取消则会返回{“message”:“Unauthorized”},若输入用户名和密码后确认会返回 {“message”:“Invalid authentication credential.

2020-07-06 10:50:14 5327

转载 谈Kong网关插件

转载 李亚飞 大佬的文章:https://www.lyafei.com/今天的一个重点就是要加强对 Kong API Gateway 网关的研究,对于 Kong 网关之前写过两篇文章,今天重点谈下 Kong 网关的插件支持能力。从上面图可以看到,Kong 网关是基于 OpenResty 应用服务器,OpenResty 是一个基于 Nginx 与 Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库、第三方模块以及大多数的依赖项。用于方便地搭建能够处理超高并发、扩展性极高的动态 Web.

2020-07-06 10:08:52 5559

转载 CentOS下php安装mcrypt扩展

转载 李亚飞 大佬的文章:https://www.lyafei.com/安装mcrypt先确认你的php和pecl版本[root@lyafei ~]# php -vPHP 7.2.26 (cli) (built: Dec 31 2019 17:01:19) ( NTS )Copyright (c) 1997-2018 The PHP GroupZend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies[root@lyafei .

2020-07-06 09:59:51 5098 1

转载 Kong插件开发向导

转载 李亚飞 大佬的文章:https://www.lyafei.com/简介前面洋洋洒洒写了那么多文章,Kong搭建、Konga搭建、Kong插件开发工具包、Lua算法实现等等,就为了这篇Kong插件开发铺垫,在进一步讨论之前,有必要再简要阐述下 Kong 是如何构建的,特别是它如何与 Nginx 集成,以及它与 Lua 脚本之间的关系。使用 lua-nginx-module 模块可以在 Nginx 中启用 Lua 脚本功能,Kong 与 OpenResty 一起发布,OpenResty 中已经包.

2020-07-04 10:29:18 5329

转载 Kafka consumer频繁reblance

转载 李亚飞 大佬的文章:https://www.lyafei.com/其实文章名可以叫 记一次线上 Kafka 问题排查,但觉得稀松平常,弄些术词显得硬核点,hhh,言归正传,线上一个 Go 服务是一组 Kafka 的消费者,在运行了很多天之后,Kafka 数据突然积压了,查看 Kafka 服务正常,查看 Go 服务也运行正常,进到 Go 服务容器内部查看日志,发现消费者的 Go 服务频繁 rebalance 并且大概率返回失败。因为我们所使用的 Kafka 分配的分区为3,所以 Go 服务 一个 .

2020-07-04 10:07:11 6776

转载 浅谈Laravel5框架的优化

浅谈Laravel5框架的优化转载 李亚飞 大佬的文章:https://www.lyafei.com/archives/14/前言Laravel是一个功能强大的框架,组件很多,代码也很庞大,它的易用方便是牺牲了性能的,即便如此它仍然是一个优秀的框架,性能一直是 Laravel 框架为人诟病的一个点,所以调优 Laravel 程序算是一个必学的技能。接下来分享一些开发的最佳实践,还有调优技巧,大家有别的建议也欢迎留言讨论。1. 配置信息缓存使用以下 Artisan 自带命令,把 config

2020-07-03 15:58:13 4860

转载 Kong的Url重写(rewrite)自定义插件

转载 李亚飞 大佬的文章:https://www.lyafei.com/archives/299/Kong的Url重写(rewrite)自定义插件昨天写了个地址重写的 Kong 自定义插件,跟大家分享下,话不多说,上代码schema.luareturn { no_consumer = true, fields = { regex = { type = "string" }, replacement = { type = "string" }, .

2020-07-03 15:40:44 6587 1

转载 Kong的日志记录(log)自定义插件

Kong的日志记录(log)自定义插件前天写了一个日志记录的插件,是将接口请求和返回的一些相关内容,以指定的数据格式写入到文件,方便大数据使用 Filebeat 读取,并显示在 ELK,话不多说上代码。schema.lualocal typedefs = require "kong.db.schema.typedefs"return { name = "file-log", fields = { { protocols = typedefs.protocols_http },

2020-07-03 11:55:32 7684 1

原创 Effective-Java 第三版中文版 78. 同步访问共享的可变数据

78. 同步访问共享的可变数据关键字 synchronized 可以保证在同一时刻,只有一个线程可以执行某一个方法,或者某一个代码块。许多程序员把同步的概念仅仅理解为一种互斥( mutual exclusion )的方式,即,当一个对象被一个线程修改的时候,可以阻止另一个线程观察到对象内部不一致的状态。按照这种观点,对象被创建的时候处于一致的状态(详见第 17 条),当有方法访问它的时候,它就被锁定了。这些方法观察到对象的状态,并且可能会引起状态转变( statetransition ),即把对象从一种一

2020-07-02 09:42:52 3940

原创 Effective-Java 第三版中文版 77. 不要忽略异常

77. 不要忽略异常尽管这条建议看上去是显而易见的,但是它却常常被违反,因而值得再次提出来。当 API 的设计者声明一个方法将抛出某个异常的时候,他们等于正在试图说明某些事情。所以,请不要忽略它!要忽略一个异常非常容易,只需将方法调用通过 try 语句包围起来,并包含一个空的 catch 块:// Empty catch block ignores exception - Highly suspect!try { ...} catch ( SomeException e ) {}空的

2020-07-02 09:42:04 3895

原创 Effective-Java 第三版中文版 75 在细节消息中包含失败一捕获信息

75. 在细节消息中包含失败一捕获信息当程序由于未被捕获的异常而失败的时’候,系统会自动地打印出该异常的堆栈轨迹。在堆栈轨迹中包含该异常的字符串表示法 (string representation),即它的 toString 方法的调用结果。它通常包含该异常的类名,紧随其后的是细节消息 (detail message)。通常,这只是程序员或者网站可靠性工程师在调查软件失败原因时必须检查的信息。如果失败的情形不容易重现,要想获得更多的信息会非常困难,甚至是不可能的。因此,异常类型的 toString 方法应

2020-07-01 09:56:33 3870

原创 Effective-Java 第三版中文版 76 保持Error原子性

76. 保持失败原子性当对象抛出异常之后,通常我们期望这个对象仍然保持在一种定义良好的可用状态之中, 即使失败是发生在执行某个操作的过程中间。对于受检异常而言,这尤为重要,因为调用者期望能从这种异常中进行恢复。一般而言,失败的方法调用应该使对象保持在被调用之前的状态。 具有这种属性的方法被称为具有失败原子性 (failure atomic)。有几种途径可以实现这种效果。最简单的办法莫过于设计一个不可变的对象 (详见第 17 条) 。如果对象是不可变的,失败原子性就是显然的。如果一个操作失败了,它可能会阻

2020-07-01 09:55:06 3816

原创 AndroidX 使用 Activity Result API 替代 startActivityForResult()

AndroidX 使用 Activity Result API 替代 startActivityForResult()启动另一个 Activity(无论是您应用中的 Activity 还是其他应用中的 Activity)不一定是单向操作。您也可以启动另一个 Activity 并接收返回的结果。例如,您的应用可启动相机应用并接收拍摄的照片作为结果。或者,您可以启动“通讯录”应用以便用户选择联系人,并且您将接收联系人详细信息作为结果。虽然所有 API 级别的 Activity 类均提供底层 startAct

2020-06-30 17:48:44 6457

原创 Effective-Java 第三版中文版 74. 每个方法抛出的异常都需要创建文档

74. 每个方法抛出的异常都需要创建文档描述一个方法所抛出的异常,是正确使用这个方法时所需文档的重要组成部分。因此,花点时间仔细地为每个方法抛出的异常建立文档是特别重要的。始终要单独地声明受检异常, 并且利用 Javadoc 的 @throws 标签, 准确地记录下抛出每个异常的条件。 如果一个公有方法可能抛出多个异常类,则不要使用“快捷方式”声明它会抛出这些异常类的某个超类。永远不要声明一个公有方法直接「throws Exception」,或者更糟糕的是声明它直接「throws Throwable」,

2020-06-30 10:39:08 3822

原创 Effective-Java 第三版中文版 73. 抛出与抽象对应的异常

73. 抛出与抽象对应的异常如果方法抛出的异常与它所执行的任务没有明显的联系,这种情形将会使人不知所措。当方法传递由低层抽象抛出的异常时,往往会发生这种情况。除了使人感到困惑之外,这也“污染”了具有实现细节的更高层的 API 。如果高层的实现在后续的发行版本中发生了变化,它所抛出的异常也可能会跟着发生变化,从而潜在地破坏现有的客户端程序。为了避免这个问题, **更高层的实现应该捕获低层的异常,同时抛出可以按照高层抽象进行解释的异常。**这种做法称为异常转译 (exception translation)

2020-06-30 10:37:34 3849

原创 Effective-Java 第三版中文版 (72)优先使用标准的异常

72. 优先使用标准的异常专家级程序员与缺乏经验的程序员一个最主要的区别在于,专家追求并且通常也能够实现高度的代码重用。代码重用是值得提倡的,这是一条通用的规则,异常也不例外。Java 平台类库提供了一组基本的未受检异常,它们满足了绝大多数 API 的异常抛出需求。重用标准的常有多个好处。其中最主要的好处是,它使 API 更易于学习和使用,因为它与程序员已经熟悉的习惯用法一致。第二个好处是,对于用到这些 API 程序而言,它们的可读性会更好,因为它们不会出现很多程序员不熟悉的异常。最后(也是最不重要的)

2020-06-30 09:54:20 3815

原创 Effective-Java 第三版中文版 避免不必要的使用受检异常

71. 避免不必要的使用受检异常Java 程序员不喜欢受检异常,但是如果使用得当,它们可以改善 API 和程序。不返回码和未受检异常的是,它们强迫程序员处理异常的条件,大大增强了可靠性。也就是说,过分使用受检异常会使 API 使用起来非常不方便。如果方法抛出受检异常,调用该方法代码就必须在一个或者多个 catch 块中处理这些异常,或者它必须声明抛出这些异常,并让它们传播出去。无论使用哪一种方法,都给程序员增添了不可忽视的负担。这种负担在 Java 8 中更重了,因为抛出受检异常的方法不能直接在 Stre

2020-06-30 09:48:27 3833

原创 Effective-Java 第三版中文版 对可恢复的情况使用受检异常,对编程错误使用运行时异常

70. 对可恢复的情况使用受检异常,对编程错误使用运行时异常Java 程序设计语言提供了三种 throwable:受检异常(checked exceptions)、运行时异常(runtime exceptions)和错误(errors)。程序员中存在着什么情况适合使用哪种 throwable 的困惑。虽然这种决定不总是那么清晰,但还是有一些一般性的原则提出了强有力的指导。在决定使用受检异常还是非受检异常时,主要的原则是: 如果期望调用者能够合理的恢复程序运行,对于这种情况就应该使用受检异常。 通过抛出受

2020-06-30 09:47:43 3886

原创 Effective-Java 第三版中文版 只针对异常的情况下才使用异常

69. 只针对异常的情况下才使用异常假如你某一天不走运的话,可能遇到如下代码:/* Horrible abuse of exceptions. Don't ever do this! */try { int i = 0; while ( true ) range[i++].climb();} catch ( ArrayIndexOutOfBoundsException e ) {}这段代码有什用,看起来根本不明显,这正是它没有真正被使用的原因(详见 67 条)。

2020-06-29 10:45:02 3890

原创 Effective-Java 第三版中文版 遵守被广泛认可的命名约定

68. 遵守被广泛认可的命名约定Java 平台有一组完善的命名约定,其中许多约定包含在《The Java Language Specification》[JLS, 6.1]。不严格地讲,命名约定分为两类:排版和语法。有少量的与排版有关的命名约定,包括包、类、接口、方法、字段和类型变量。如果没有很好的理由,你不应该违反它们。如果 API 违反了这些约定,那么它可能很难使用。如果实现违反了这些规则,可能很难维护。在这两种情况下,违规都有可能使其他使用代码的程序员感到困惑和恼怒,并使他们做出错误的假设,从而导

2020-06-29 10:44:18 3791

原创 Effective-Java 第三版中文版 明智审慎地进行优化

67. 明智审慎地进行优化有三条关于优化的格言是每个人都应该知道的:比起其他任何单一的原因(包括盲目的愚蠢),很多计算上的过失都被归昝于效率(不一定能实现)。​ —William A. Wulf [Wulf72]不要去计

2020-06-28 18:33:37 3863

原创 Effective-Java 第三版中文版 明智审慎地本地方法

66. 明智审慎地本地方法Java 本地接口(JNI)允许 Java 程序调用本地方法,这些方法是用 C 或 C++ 等本地编程语言编写的。从历史上看,本地方法主要有三种用途。它们提供对特定于平台的设施(如注册中心)的访问。它们提供对现有本地代码库的访问,包括提供对遗留数据访问。最后,本地方法可以通过本地语言编写应用程序中注重性能的部分,以提高性能。使用本地方法访问特定于平台的机制是合法的,但是很少有必要:随着 Java 平台的成熟,它提供了对许多以前只能在宿主平台中上找到的特性。例如,Java 9 中

2020-06-28 18:32:02 4025

原创 Effective-Java 第三版中文版 接口优于反射

65. 接口优于反射核心反射机制 java.lang.reflect 提供对任意类的编程访问。给定一个 Class 对象,你可以获得 Constructor、Method 和 Field 实例,分别代表了该 Class 实例所表示的类的构造器、方法和字段。这些对象提供对类的成员名、字段类型、方法签名等的编程访问。此外,Constructor、Method 和 Field 实例允许你反射性地操作它们的底层对应项:你可以通过调用 Constructor、Method 和 Field 实例上的方法,可以构造底

2020-06-28 18:31:21 3834

原创 Effective-Java 通过接口引用对象

64. 通过接口引用对象条目 51 指出,应该使用接口而不是类作为参数类型。更一般地说,你应该优先使用接口而不是类来引用对象。如果存在合适的接口类型,那么应该使用接口类型声明参数、返回值、变量和字段。 惟一真正需要引用对象的类的时候是使用构造函数创建它的时候。为了具体说明这一点,考虑 LinkedHashSet 的情况,它是 Set 接口的一个实现。声明时应养成这样的习惯:// Good - uses interface as typeSet<Son> sonSet = new Link

2020-06-28 09:47:33 3907

车载 加油app 智慧加油项目

车载 加油app,Android 系统 车载app, 智慧加油项目

2020-07-06

oushang-market.zip

车载flutter 开发,应用市场app,使用flutter 技术开发,车载app 应用市场,一种 尝试

2020-07-06

PickView-sun.zip

DatePickerPopWin pickerPopWin = new DatePickerPopWin.Builder(MainActivity.this, new DatePickerPopWin.OnDatePickedListener() { @Override public void onDatePickCompleted(int year, int month, int day, String dateDesc) { Toast.makeText(MainActivity.this, dateDesc, Toast.LENGTH_SHORT).show(); } }).textConfirm("CONFIRM") //text of confirm button .textCancel("CANCEL") //text of cancel button .btnTextSize(16) // button text size .viewTextSize(25) // pick view text size .colorCancel(Color.parseColor("#999999")) //color of cancel button .colorConfirm(Color.parseColor("#009900"))//color of confirm button .minYear(1990) //min year in loop .maxYear(2550) // max year in loop .showDayMonthYear(true) // shows like dd mm yyyy (default is false) .dateChose("2013-11-11") // date chose when init popwindow .build();

2020-05-28

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除