自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

大罗说事

Talk is cheap, show me the code.

  • 博客(81)
  • 资源 (6)
  • 收藏
  • 关注

原创 程序员的晋升困境

点击蓝字,立即关注你是一位工作多年的程序员,在公司的职位是”软件工程师”,用国内常说的职级体系来看,你是一个 P6,一线干活写代码的大头兵。但在日常工作内容中,却并没有太多时间去写代码,似乎大部分时间都在开会,不停地开会。你希望能够有时间停下来写代码,但似乎有更多的工作需要你来做,比如:给刚毕业的校招生讲解业务知识,帮助他们更好地解决工作中的问题;与其他合作团队沟通、对齐,帮助团队成员梳理工作内容...

2024-08-18 13:12:31 6205

原创 你不会到现在还不知道 Android 中的那些 JDK 配置吧?

在做 Android 应用开发时,不可避免的要使用到 JDK 。在众多版本的 JDK 中, 项目代码的编译会使用哪个版本,开发者要如何指定使用的 JDK 版本?选择和指定 JDK 是一个非常重要的步骤,它会影响整个开发过程。不论你的源码是用 Java 还是 Kotlin 进行编写的,或者是两者皆用。在整个项目开发迭代周期中,都会有很多地方涉及到 JDK 版本,如下图所示,我们可以看到其中错综...

2024-08-13 08:30:29 1661

原创 函数式编程:尾调优化

在函数式编程中, 函数是一等公民,实现中,会有很多代码都使用递归进行实现。在编写优雅代码的过程中,也会引入一定的风险:栈溢出。为了解决这个问题, 作为函数式编程风格的语言都会提供「尾调优化(Tail Call Optimization, TCO)」的特性。什么是尾调用?尾调用(Tail Call)指的是一个函数的最后一条语句是一个返回调用函数的语句,这个函数调用可以是对另一个函数的调用,也可以是对...

2024-08-10 10:03:14 434

原创 Android 中compileSdk、minSdk、targetSdk 是干什么用的?

作为多年 Android 开发的老司机, compileSdk 、minSdk、targetSdk 都是经常见到,但其具体含义是什么?它们都是在什么场景下去使用的。回想起来还真不太能说得清楚。背景要想说清楚它们是干什么的,那就不得不说一下主角 Android 操作系统。Android 操作系统在 2008 年发布了第一个版本,到今年已经发布了几十个版本:Android 版本历史(图源维基百科)在如...

2024-08-02 09:03:04 2473

原创 ProGuard 进阶系列(四)访问者模式

在进行后面的内容分析之前,不得不讲到访问者模式,这是 GOF 23 个设计模式中最难的几个模式之一。如果能够很好的理解访问者模式, 后续源码解读会相对容易一些。本文将结合 ProGuard 的部分源码,理解分析访问者模式的用途及使用场景。一、什么是访问者模式先来看定义,访问者模式是一种将对象操作算法与对象结构分离的设计模式。这句话很抽象,不是很好理解。用通俗的话来讲就是:我们在写代码的时候,一般情...

2023-06-29 09:01:44 293

原创 ProGuard 进阶系列(三) Java 类文件解析

书接上文,当我们从用户的配置文件中读取到所有的配置信息后,下一步便是将配置中的指定的类文件进行读取,构建需要混淆的 Java 类文件的语法树。在阅读类文件之前,先来看一下输入输出参数中的内容,我使用的是一个 Android 项目的输出产物,使用 -injars、-outjars、-libraryjars 指定了相关的信息,运行起来,这些信息会放到 Configuration 中,具体信息看下图:p...

2023-06-20 09:00:45 1087

原创 ProGuard 进阶系列(二)配置解析

书接上文,从开源库中把代码下载到本地后,就可以在 IDE 中进行运行了。从 main 方法入手,可以看到 ProGuard 执行的第一步就是去解析参数。本文的内容主要分析源码中我们配置的规则解析的实现。在上一篇文章末尾,在 IDE 中,添加了 @/Users/xxx/debug_proguard.pro 作为函数运行的入参,将配置文件的路径传递给 ProGuard 使用。先来看一下 Main 函数...

2023-06-15 09:00:17 989

原创 ProGuard 进阶系列(一): 运行源代码

在前面的文章深入 Android 混淆实践:ProGuard 通关秘籍和深入 Android 混淆实践:多模块打包爬坑之旅中,已经讲到了如何在 Android 中使用 ProGuard,以及如何自定义实现混淆规则的生成。为了更深入地理解 ProGuard 的细节,本系列文章从我感兴趣的点出发,记录在阅读 ProGuard 源码过程中的思考与启发,希望对你也有所帮助。本文为此系列文章的开篇,将最基础...

2023-06-09 08:50:30 968

原创 Android 图片编码之必备技能

在进行 Android 开发时,不可避免地会接触到许多图片格式,例如 JPEG、PNG 等。就以 JPEG 格式为例,它是一种有损压缩模式,使用 YCbCr 的颜色空间来保存色彩信息。当需要在屏幕上显示图片时,会将 JPEG 数据解码成 RGB 进行显示。本篇文章可能对初学者来说略显复杂。因此,建议读者具备一定的图像处理和 Android 开发基础知识。下面,一起来看看在 Android 中,如何...

2023-05-26 09:00:36 879

原创 解密Java Class文件不为人知的秘密

Java 诞生多年,因此在网络上,有关 Java Class 文件格式解析的文章有很多,但他们大多数都是在列举《Java 虚拟机》中定义的格式,通读下来,好像所有的东西都讲清楚了,但是我个人好像并没有看懂,不知道定义的这些东西到底是用来存储什么东西的。本文仍然是在讲《Java 虚拟机》中定义的 Class 文件的格式,但会更多的从一个应用开发者的角度,将字节码文件中定义的字段与原始的 Java 代...

2023-05-24 09:00:56 942

原创 深入理解 Java Class 文件格式

Java 诞生多年,因此在网络上,有关 Java Class 文件格式解析的文章有很多,但他们大多数都是在列举《Java 虚拟机》中定义的格式,通读下来,好像所有的东西都讲清楚了,但是从我个人角度,并没有看懂,不知道定义的这些东西到底是用来存储哪些信息。本文仍然是在讲《Java 虚拟机》中定义的 Class 文件的格式,但会更多的从一个应用开发者的角度,将字节码文件中定义的字段与原始的 Java ...

2023-04-28 14:43:20 117

原创 Git 必知必会:原理剖析(二)

书接上文,在上一篇文章记录Git 必知必会:原理解析 中记录了 Git 原理中的一部分信息,但在后续的学习过程中,还有部分内容需要记录,但有了此篇内容。一、Git 中的引用从前面文章中的的 Git 仓库树目录存储结构图中,可以看到,通过 commit 的 SHA-1 值,我们就一步一步查看所有的提交记录,以及项目中的文件内容。但 40 位的字符串几乎不可能记忆下来,也没有什么实质性的意义。那如果我...

2023-02-25 09:30:08 311

原创 Git 必知必会:原理剖析

作为程序员,最常用的版本管理工具便是 Git。但我相信大多数人和我一样,从没有认真了解过其具体实现的原理。但了解 Git 的原理,能有助于我们工作更好的使用 Git。下面,让我们一起来了解 Git 中的一些概念,以及实现。一、概念Git 是一个分布式版本控制软件,在使用的过程中,与 CVS 类不同,不需要使用服务端,就可以实现版本控制。但在我们常用的使用过程中,依然会一个中间服务器作为 origi...

2023-02-17 09:30:13 1040 2

原创 深入理解 Java 字符编码

近期在工作中,遇到了一段历史代码,在代码中,将一个字符串进行加密,得到一个 byte 数组, 在代码中,这个 byte 数组 需要存储到 文件中,但代码却是用这个 byte 数组 创建了一个 String ,然后再将 String 写入到文件中。聪明的你应该发现问题了,byte 数组 直接转成 String 会有问题,一般的处理方法是将 byte 数组 使用 Base64 编码,然后将编码后的字符...

2022-10-13 08:30:29 330

原创 深入 Android 混淆实践:多模块打包爬坑之旅

在做 SDK 开发的时候,会将 SDK 中不同功能进行模块化拆分,分解成不同的模块,在对外提供 SDK 时,将多个 AAR 文件交付给使用方。来看一下这个场景,假设现在 SDK 有 A模块、B模块 两个模块,其中 B模块 依赖 A模块 。现在,对这两个模块进行打包,并且要开启混淆。发现了吗?要让 B模块 中的类,能正常使用 A模块 中的接口/类,我们需要将 A模块 中的接口/类进行 keep ...

2022-10-01 10:24:15 2000

原创 深入 Android 混淆实践:ProGuard 通关秘籍

使用 Java 编写的源代码在编译时会生成 CLASS 文件,而 CLASS 字节码的规则非常的标准,按照对应的格式能够很好的反编译出原代码。市面上也存在很多很好用的工具,来帮助我们进行反编译并阅读 CLASS 中的代码逻辑。为了更好的保护代码安全,混淆是最容易做的一件事情。针对 Java 的混淆,有一个开源项目 ProGuard 就是常用的混淆工具。它可以对代码进行 压缩、优化 、混淆。本文将基...

2022-09-23 08:30:21 2684

原创 那些年配置的终端 -- iTerm2 系列

工欲善其事,必先利其器。当我们拿到一台新电脑,为了让自己的效率更高,当然需要做一些配置。本文将介绍对于终端的一些配置。1. 安装 iTerm2Mac OS 有自己自带的终端软件 Terminal ,但其功能相对较弱。在 Mac 上,有一个三方终端 iTerm2 可以使用。当拿到新电脑时,当然是第一时间装上这个软件。iTerm2 下载地址:https://www.iterm2.com/对于 iTer...

2022-08-20 09:00:24 383

原创 LeetCode 46 全排列

给定一个不含重复数字的数组 `nums` ,返回其 *所有可能的全排列* 。你可以 **按任意顺序** 返回答案。

2022-07-23 18:25:03 184

原创 在 Android 中使用 Lambda 的原理

在 Java 的高版本中,逐渐加入各种语法糖,Android 中是如何适配支持的呢?

2022-07-20 08:49:12 1776

原创 深入理解 Base64 底层原理

Base64 是一种常见数据编码方式,文中详细介绍了其编码方式,可较深入了解原理,以及应用。

2022-07-04 08:00:00 2958 7

原创 这么多年, Android 虚拟机到底做了些什么?

Android Runtime 为 App 能快速运行都有哪些努力,一文概揽全过程

2022-06-30 19:19:58 5092 4

原创 这么多年,Android 虚拟机到底干了些什么?

在 Android 操作系统中,有一个非常重要的核心部分:Android Runtime。说到这个,我相信很多人都听到过 Dalvik、ART、JIT 以及 AOT。或许好多人也和我之前一样,并不了解这些名词,以及这些名词背后做了些什么事情。本文从笔者了解到的信息,记录了 Android Runtime 中设计的一些概念,以及应用。1. 虚拟机在了解上面提到的名词之前,我...

2022-06-30 16:40:03 1858

原创 走进微软之所见所想

2020.11.24 号,是程序员节后的一个月,有幸参加了《新程序员》组织的“走进名企”的活动,参观了科技领域的巨头,微软北京总部。微软的业务版图从 PC 时代,操作系统的巨头,大名顶顶的微软,错过了移动互联网时代,没有拿到移动操作系统的门票,整个微软的发展一直走下坡路,并慢慢的淡出了消费者的视野,这或许是一个大公司发展到一定时间,都会遇到的瓶颈。但微软并没有被打倒,快速调整赛道,在多个领域内都占据了举足轻重的地位。到现在,很多人还是只知道他们的操作系统 Windows 以及办公套件 Office,

2021-11-27 15:44:38 1188

原创 实现一门超简单的语言最快需要多久​

这是宫文学老师的第一节课程,本次课程的内容读完,并没有完全清楚我自己要做什么,该怎么做,经过阅读配套的原码,终于明白需要做一些什么事情,此处仅作为记录,梳理思路。以下为正文:0x00 代码...

2021-11-17 22:13:48 961

原创 实现一门超简单的编程语言最快需要多久?

这是宫文学老师的第一节课程,本次课程的内容读完,并没有完全清楚我自己要做什么,该怎么做,经过读配套的原码,终于明白需要做一些什么事情,此处仅作为记录,梳理思路。

2021-11-17 21:32:37 4122 1

翻译 我从 200 个机器学习工具中都学习到了什么?

如果必须在人工智能专家和工程师之间做一个选择,那么请选择工程师。

2020-06-27 21:15:58 1588

翻译 程序员如何用代码彻底终结系统那些事儿?

互联网发展至今,瞬息万变的市场要求我们的产品具有更快的响应速度。技术的快速进步,软件的快速迭代升级,各种软件基础设施也不得不随之进行频繁的修改。为更好地适应各各式各样各样的需求,将基础设施、工具、服务以及对基础设施的管理作为一个软件系统,使用软件工程实践中的方式来处理各种基础设施的变化。本文作者在文中详细讲解了软件设施代码背后的思想,带领我们详细了解背后的原理。作者 | Tylor Borg...

2020-04-06 14:13:25 349

翻译 为什么许多程序员讨厌结对编程?

结对编程是国外非常盛行的一种敏捷开发方式,今天 Google 最顶级的两位程序员 Jeff Dean 和 Sanjay Ghemawat 就是结对编程世界让人颇为津津乐道的人物。不过,有人喜欢有人讨厌,本文作者 Tylor Borgeson 作为结对编程的实践者,为我们具体分析了它的好与坏,以及可以如何执行结对编程来更好地适合团队现状。作者 | Tylor Borgeson,已获作者翻译授权...

2020-04-06 14:07:27 465

翻译 程序员为什么千万不要瞎努力?

本文作者用对比非常鲜明的两个开发团队的故事,讲解了敏捷开发之道 —— 如果你的团队缺乏统一标准的环境,那么即使勤劳努力,不仅会极其耗时而且成果甚微,使用容器化技术、CI/CD,不仅能让开发环境、测试环境、预发环境、生产环境保持一致,同时也对测试和质量保证有至关重要的作用。作者 | Tylor Borgeson,已获作者翻译授权译者 | 罗昭成原文 | A Tale of Two Soft...

2020-04-06 14:03:35 471

翻译 为什么程序员如此“嫌弃”主干开发模式?

软件开发中,多人协作是一个常见的场景,如何来协作管理不同开发人员开发的代码变成重中之重,因此 CVS 等版本管理工具也应运而生。现如今,Git 已经占据了版本管理的主导地位。基于版本控制出现了一系列的开发模式,用以帮助团队更加快速地协作。本文中,作者从他的实践,全面的展示了主干开发的模式在开发中应用的优势,希望能给你的工作带来更高的效率。作者 | Tylor Borgeson,已获作者翻译授...

2020-04-06 13:59:30 858

翻译 为什么持续集成和部署在开发中非常重要?

让重复的事情自动化。如果运用得当,CI/CD 将会是一个很好的工具,帮助团队提效。你要相信,肯定没有人愿意花几个小时时间,去“盯”部署脚本执行的结果,还要手动测试来确认系统是否能正常运行。作者 | Tylor Borgeson,已获作者翻译授权译者 | 罗昭成原文 | Here’s Why Continuous Integration and Deployment is so Impo...

2020-04-06 13:51:21 563

翻译 Kotlin 风险高、RxJava 已过时,Android 原生开发现状分析!

原文:The State of Native Android Development作者 | Vasiliy Zukanov,独立 Android 开发及软件顾问,已获作者翻译授权译者 | 罗昭成,Android 开发者,责编 | 唐小引本文首发 CSDN(ID:CSDNnews)许多 Android 开发者经常会问我,要学会哪些东西才能成为一个优秀的 Android 工程师?对于这个...

2020-04-06 13:39:28 599

翻译 被高估了的测试驱动开发?

测试驱动开发(TDD)始于上世纪 90 年代,时至今时今日,依然只有少数的开发者在践行着。本文作者从软件开发者的角度,又一次帮助我们定义了测试驱动开发,解答了众多开发着对 TDD 常见的谬误。

2020-03-01 20:59:02 423

翻译 Android 开发者成神之路

一个 Android 技术专家,至少有 2~3 个专业领域。

2020-01-28 16:28:41 448

翻译 VS Code 必知必会的 20 个快捷键!

本篇文章,希望能够帮助开发者更高效地使用 VS Code 进行编程。

2019-11-20 15:55:01 2604 5

原创 Python 分析 9 万条数据告诉你复仇者联盟谁才是绝对 C 位!

作者 | 罗昭成责编 | 唐小引本文首发于 CSDN 微信(ID:CSDNnews)《复联 4》国内上映第十天,程序员的江湖里开始流传这样一个故事,即:漫威宇宙,其实就讲了一件事情。整个宇宙就好比一个项目组。其中有一群叫作美国队长、钢铁侠、惊奇队长、浩克、索尔等人在维护这个项目,兢兢业业的维护整个项目。某一天,出现了一个天才程序员,叫灭霸。当他加入到这家公司的时候,他意识到,这个项...

2019-05-03 16:49:29 3502 12

翻译 “编程不规范,同事两行泪!”

本文首发 CSDN(ID:CSDNnews)编程江湖中一直盛传着一个段子,那就是要问程序员最讨厌哪 4 件事?那必须是:写注释、写文档、别人不写注释、别人不写文档。更甚者,在《流浪地球》形成刷屏之势之后,仿其而出的“代码千万行,注释第一行;编程不规范,同事两行泪”在技术圈中开始盛传,由此可见对于所有的程序员来说这是多么痛苦的事情。本文作者 —— 全栈开发者 Nitin Sharma 分享...

2019-02-21 10:53:14 255

原创 Python 分析程序员最关心的竟不是技术,而是…

本文首发于 CSDN 程序人生(ID:coder_life)从工业时代进入到信息服务时代,互联网行业逐渐兴起,传统行业逐渐没落。现如今,很多人混迹于互联网+的时代,人人都要学习编程已经逐渐被重视起来。作为一个入行五年的老鸟,回首看看这五年的经历,恍若隔世。从PC互联网时代到移动互联网时代的转变,也就是前几年的事情。IT界的快节奏已经成为常态。小步快跑 ,产品的快速的迭代,移动互联网有了飞...

2019-02-17 21:33:23 426

翻译 未来五年,iOS 开发如何前行?

本文首发在 CSDN 微信(ID:CSDNNews)。英文原文地址: https://hackernoon.com/four-exciting-areas-ios-app-development-will-evolve-over-the-next-five-years-23dc5c11f562近十年,10~15 年前不存在的技术,让这个世界变得黯然失色。有趣的是,这些概念正在构建未来的生活...

2019-02-17 21:19:27 438

翻译 为什么所有人都对 HTML、CSS 失望了?

本文首发在 CSDN 微信(ID:CSDNNews)。英文原文地址: https://rachelandrew.co.uk/archives/2019/01/30/html-css-and-our-vanishing-industry-entry-points/所有的人再一次对 CSS 失望。我不打算去总结这些让人失望的点。事实上,CSS 太容易被覆盖修改,如果要让它实时生效,你需要将它用...

2019-02-17 21:13:57 305

Android Appwidget

一个简单的Appwidget实现。实现 了我们的桌面小工具的开发.并含有我的文档

2013-05-01

JSP网络商城

这个是我自己写的一个网络商城,仿淘宝写的,基本工能完整.

2013-04-30

android wheel view demo

android 下实现仿ios的滚动选择控件。实现滚动选择效果。内有详细的demo

2013-03-25

android圆角View

实现android圆角的外观,包含解决3.0以下和3.0以上版本不兼容的问题。可以完全实现单边的圆角。

2013-03-23

android自定义View,并自定义属性

从TextView继承,创建一个我们自己的TextView,自定义属性,通过自己自定义的属性,修改我们自己TextView的值。

2013-03-22

自定义View

android自定义View,写了如何创建一个自己想要的VIew

2013-03-22

空空如也

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

TA关注的人

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