面试集训,Alibaba出品Java性能优化高级笔记(全彩版)震撼来袭

面试官: 说一下你做过哪些性能优化? 这篇带你搞懂性能优化 前言 如果你已经有 2 - 3 年以上开发经验还不懂的怎么去优化自己的项目,那就有点说不过去了,下面是我自己总结的一套通用级别的 Android 性能优化。如果图片不清晰文末可以下载原始 xmind 图。 如果你正在找工作, 那么你需要一份 Android 高级开发面试宝典 1、 你对 APP 的启动有过研究吗? 有做过相关的启动优化吗? 程序员: 之前做热修复的时候研究过 Application 的启动原理。项目中也做过一些启动优化。 面试官: 哦,你之前研究过热修复? (这个时候有可 阅读详情

性能优化

作为一个程序员,性能优化是常有的事情,不管你是刚入行的小白还是已经入坑了很久的小秃头都会经历很多不同层次的性能优化——小到代码审查大到整个系统设计的优化!大势所趋之下,如何让自己的优化方向精准到性能瓶颈的那个点以及尽可能的提高优化的性价比已经慢慢成为每一个程序员都要考虑的问题了~

下面是目前程序员进行性能优化时需要遵循的一些原则以及注意的一些点,大家可以看看自己在进行优化的时候是否有考虑到这些:

如果你对于以上性能优化的原则、层次、通用方法以及代码质量的关系根本没有一个概念,也不知道何从下手的话。LZ推荐大家看一下我下面要为大家介绍的阿里2021最新版的性能优化全解小册~

小册内容从如何制定性能调优与策略开始,把Java编程、多线程、JVM、设计模式、数据库五个方面的性能优化细节陈述得清清楚楚,最后还把阿里双十一性能调优实战过程完整的呈现给读者,大家看了之后就知道到底有多香了~

不多bb,来看内容

阿里性能优化全解小册(2022最新版)

目录总览

篇幅原因,仅展示部分截图,有需要完整版的小伙伴文章下方免费获取

内容节选

Java编程性能调优

多线程性能调优

JVM性能监测及调优

设计模式调优

数据库性能调优

实战篇

设计一个更优的分布式锁

电商系统的分布式事务调优

使用缓存优化系统性能

双十—抢购性能瓶颈调优

最后

性能调优就是一场持久战!即使你的产品上线之后,还需要持续开发,很多因素都会带来性能问题,想要真正扛起公司性能的大梁,就不要拘泥于自己公司的业务,不妨多去看看别人家的性能优化(比如行业大佬阿里)。下方添加小助理即可免费获取

哈工大OS实验四——进程运行轨迹的跟踪与统计 进程运行轨迹的跟踪与统计 进程从创建(Linux 下调用 fork())到结束的整个过程就是进程的生命期,进程在其生命期中的运行轨迹实际上就表现为进程状态的多次切换,如进程创建以后会成为就绪态;当该进程被调度以后会切换到运行态;在运行的过程中如果启动了一个文件读写操作,操作系统会将该进程切换到阻塞态(等待态)从而让出 CPU;当文件读写完毕以后,操作系统会在将其切换成就绪态,等待进程调度算法来调度该进程执行…… process.c解读 void cpuio_bound(int last, int cpu_ 阅读详情

相关推荐

移动端UI自动化测试新框架Maestro:声明式语法与实战指南

UI自动化测试是保障移动应用质量的关键环节,其核心原理是通过脚本模拟用户操作,对应用界面进行自动验证。传统命令式框架(如基于Selenium WebDriver的Appium)虽然控制粒度细,但脚本编写和维护成本较高。声明式测试框架则通过描述“做什么”而非“怎么做”,显著降低了技术门槛和维护复杂度,其技术价值在于提升测试脚本的可读性、编写效率与跨团队协作能力。在移动端测试领域,这尤其适用于需要快速验证核心业务流程、进行冒烟测试和回归测试的场景。本文聚焦的**Maestro框架**,正是这一理念的杰出实践。它

weixin_32921023的博客 713

java代码优化六大原则

单一职责代码优化第一步,单一职责原则 (Single Responsibility Principle)。对于一个java类,应该仅有一个引起它变化的原因,也就是说,一个类中,应该是一组相关性很高的函数、数据的封装。但是这个原则的界限划分的并不是那么清晰,很大程度上要依赖于开发者的个人经验来定。对于单一职责界限的划分最大的问题就是类的职责是什么,如何划分类的职责。 单一职责原则在我们实际工作中随处

码农的成长 2万+

《活用数据——驱动业务的数分析实战》读书笔记 (实战篇)

第四章、战略分析案例解析         如思维篇所述,分析思路是从研究目的到研究内容的分解过程。因此需要考虑如下两个问题: 战略分析的研究目的 战略分析的研究内容 1、研究目的:战略选择         战略分析的研究目的是帮助企业进行战略选择,选择适合自己的目标市场。需要回答以下两个问题: 市场吸引力:这个市...

Xiaozhu的博客 3698

Java代码优化中的六大原则

单一职责原则(SRP)是面向对象设计的SOLID原则之一,由Robert C. Martin在2000年提出。该原则指出,一个类应该只有一个引起它变化的原因,也就是说,一个类应该只负责一项功能或职责。单一职责原则是编写高质量、可维护代码的重要指导原则。通过确保每个类只负责一项功能,可以提高代码的可读性、可测试性和可维护性。在实际开发中,应始终遵循这一原则,并通过不断重构来保持代码的简洁和清晰。

国家专精特新小巨人、资深消防行业企业、国家高新技术企业、智慧消防技术实验室、准独角兽企业、浙江省电流AI技术研发中心 1586

[arcgis插件]在批量出图时,如何把图层属性表以动态表格的形式插入到布局页面

在批量出图时,如何把图层属性表以动态表格的形式插入到布局页面。

坐听风雨 4563

告别兼容性困扰:在F-Droid中安全部署Termux的完整指南

本文提供了一份在F-Droid中安全部署Termux的完整指南,旨在彻底解决Android设备上的兼容性困扰。文章详细阐述了为何选择F-Droid而非Google Play商店,并逐步指导用户完成从彻底清理旧版本、安装F-Droid客户端、授予权限到最终安装配置Termux的全过程。指南还涵盖了进阶的稳定性配置、数据迁移方法以及常见问题排查,确保用户获得一个稳定、无冲突的命令行工作环境。

weixin_29224309的博客 945

java代码优化原则

java代码的六大原则 看前须知: 以下的“抽象”俩字的意思所指的不只是抽象类,包括接口 细节是指实现接口或者继承抽象类 1.单一原则 一个类最好只做一件事,只有一个东西能引起它的变化。提高内聚性 2.开闭原则 一个对象应该对扩展开放,例如继承,但是不能修改。当然这是理想的,所以实际应该是尽量减少影响原有的代码块。 3.里氏替换原则 父类存在的地方都可以由子类来替代。基于抽象两字。 但是明显的,此...

域清风 438

Unity ProBuilder(自己创建斜面、拐角)

ProBuilder基础实例

weixin_56537692的博客 1551

Java代码优化六大原则

单一职责 代码优化第一步,单一职责原则 (Single Responsibility Principle)。对于一个Java类,应该仅有一个引起它变化的原因,也就是说,一个类中,应该是一组相关性很高的函数、数据的封装。但是这个原则的界限划分的并不是那么清晰,很大程度上要依赖于开发者的个人经验来定。对于单一职责界限的划分最大的问题就是类的职责是什么,如何划分类的职责。单一职责原则在我们实际工作中随处可见,例如在我们比较关心的框架MVC,MVP中,负责页面展示的Activity,Fragment,以及各.

m0_67659981的博客 773

[RAM] DRAM 导论:DDR4 | DDR5 | LPDDR5 | GDRR6 | HBM 应运而生

有数据的地方就有存储, 内存是谁都离不开的产品。而动态随机存取存储器(DRAM)作为一种常见的内存。本博客将介绍DRAM的基本概念、工作原理、优缺点以及应用领域等方面。

串起点滴 3918

1、vectorCast单元测试常用操作

进入软件主页面,点击file,选择set working directory,随便选择一个保存该项目的目录即可。

weixin_59334478的博客 2156

Java代码优化原则有哪些?

Java代码优化是Java编程开发很重要的一个步骤,Java代码优化要注重细节优化,一个两个的细节的优化,产生的效果不大,但是如果处处都能注意代码优化,对代码减少体积、提高代码运行效率是有巨大帮助的,还能在一定程度上避免未知错误,常用的Java代码优化细节如下: 1. 为类、方法指定final修饰符为类指定final修饰符可以让类不可以被继承,为方法指定final修饰符可以让...

weixin_33738578的博客 647

Windows系统下载安装 Git 的详细教程

本文详细介绍了Windows系统下载安装Git的完整流程,包括从Git官方网站和阿里镜像下载安装包,逐步讲解安装向导中的各个设置选项,如安装路径、默认编辑器、行尾转换、终端模拟器等,并提供了每个步骤的截图和说明。安装完成后,博客还介绍了如何验证安装是否成功,以及如何配置Git的用户名和邮箱,确保可以正常使用Git进行版本控制。

加斯顿工程师的博客 802

牛逼!最优方案spring cloud出马,十面九稳,又拿下一个大厂offer!

又是跟技术战斗的一天!最近这段时间,后台都是在问微服务架构的面试题怎么答,所以就跟大家聊聊微服务架构。微服务架构一跃成为 IT 领域炙手可热的话题也就这两年的事,大量一线互联网公司因为庞...

欢迎关注公众号:【码农突围】,回复9999,可以获取一份LeetCode刷题笔记 419

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

java性能调优基本原则

1,影响性能的因素有:网路,数据库,CPU,磁盘IO,锁竞争,内存,程序本身2,性能调优方向: 3,性能调优原则 (1)减小 CPU 消耗 – 线程数不易过多,过高导致线程上下文切换频繁,系统吞吐量反而下降。 – 减少线程间的锁竞争,否则也可能切换过多(2)CPU 没有充分利用 – 当线程同步文件IO,同步网络IO、锁等待、sleep时,线程被挂起,但资源不释放,考虑异步IO。(3)减

FEINIK 380

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

优化Java的原则

1.尽量在合适的场合使用单例 使用单例可以减轻加载的负担,缩短加载的时间,提高加载的效率,但并不是所有地方都适用于单例,简单来说,单例主要适用于以下三个方面 第一,控制资源的使用,通过线程同步来控制资源的并发访问 第二,控制实例的产生,以达到节约资源的目的 第三,控制数据共享,在不建立直接关联的条件下,让多个不相关的进程或线程之间实现通信 - 2.尽量避免随...

weixin_34409703的博客 146

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

java性能优化

二八原则:百分之二十的系统设计消耗了80%的系统性能,如果可以找到这20 的缺陷代码,那么我们就可以比较容易的优化和解决80的性能问题. 所有的语言都要使用编译器 如果A文件依赖B文件,编译器应该做到以下两点: 只有在B文件编译完成之后,A才开始编译 B文件发生变化的时候,A文件会重新编译 DNS路由负载(前端负载) 减少网页上附带的图片可以大大降低网络带宽压力 前端页面静...

weixin_43762975的博客 162

Java代码优化细则(不断更新)

1. ArrayList 与Vector相比尽量选择前者。因为Vector中的方法都是同步的,单一线程中ArrayList的效率会高很多2. 通用常量尽量用接口实现,这样用到这些常量的类可以方便导入。3. 尽量少的使用XXXHelper,XXXUtil类,代码尽量使用继承实现重用。4. 用toArray()方法时参数数组部分长度尽量和要转换的列表对象相等。这样省去了重新构造数组的过

疯狂着的程序员 567

别再为了写代码而写代码,教你写出高效简介的Java代码

Java代码优化是一个涉及多个层面的过程,旨在提高代码的可读性、可维护性、执行效率和资源利用率。

艾利克斯冰的博客 1281

Java优化代码的方法

1.算法和数据结构优化 选择合适的算法和数据结构以最小化时间复杂度和空间复杂度。 避免使用嵌套循环和不必要的计算。 使用哈希表、二叉树等高效数据结构。 2.代码结构改进 遵循SOLID原则(单一职责原则、开放封闭原则、里氏替换原则、接口隔离原则、依赖倒置原则)来设计类和模块。 减少方法的长度和复杂度,保持方法的单一职责。 使用设计模式来优化代码结构,如工厂模式、单例模式、观察者模式等。 3.JVM调优 调整JVM参数,如堆大小、垃圾回收器选择等,以适应不同的应用场景。 使用JProfi

weixin_47260194的博客 563

Java编程最佳实践:20条提升代码质量的核心原则

这20条Java最佳实践可能看起来简单,但在日常开发中坚持执行却不容易。它们是我多年开发经验的结晶,帮助我和团队显著提高了代码质量。优秀的代码不仅仅是实现功能,更是为未来的维护和扩展奠定基础。当你审视自己的代码时,试着问问:"六个月后的我(或其他开发者)回来看这段代码,是否能轻松理解?"这个简单的测试往往能帮助你写出更好的代码。希望这些实践对你有所帮助!欢迎在评论区分享你的经验和其他最佳实践。让我们一起打造更优雅的Java代码!你有什么其他Java开发中的最佳实践想要分享吗?

tym3125536957的博客 1246

Java 代码质量 四大原则 六大技巧

Java 代码质量 四大原则 六大技巧

m0_62220641的博客 842

性能优化-整体优化策略介绍

文章目录性能优化维度系统环境优化方案设计优化算法设计优化编码级别优化性能优化策略性能检查工具 性能优化维度 系统环境优化 方案设计优化 算法设计优化 编码级别优化 性能优化策略 性能检查工具 ...

runafterhit的博客 1426

拿着 GitHub 标星 80k 的阿里性能优化笔记,把项目优化个遍

一直以来,性能都是技术层面不可避开的话题,尤其在中大型复杂项目中。犹如汽车整车性能,追求极速的同时,还要保障舒适性和实用性,而在汽车制造的每个环节、零件整合情况、发动机调校等等,都会最终影响用户体感以及商业达成。性能优化是一个体系化、整体性的事情,印刻在项目开发环节的各个细节中,也是体现技术深度的大的战场。然而网上很少有文章系统讲解性能优化的相关方法论,所以借着这次机会总结出来,分享给大家。俗话说,本文将阿里大佬自己的总结在这里,将自己理解的整理在这里,帮助大家能。

java1527的博客 351

阿里甩出878页性能优化笔记,Github已标星72k,技术巨擘之作

并行程序设计模式JDK多任务执行框架JDK并发数据结构并发控制方法"锁"的性能和优化无锁的并行计算协程软硬件性能的卓越与否,如同烹饪的食材与厨艺,共同决定了众多企业和个人的命运。过去,摩尔定律宛如神奇的厨师,确保硬件性能每18个月翻新一倍。然而,随着处理器供应商逐渐触及摩尔定律的极限,当今的开发者们需转战软件优化,以追求更高的性能。这意味着,在未来的十年里,软件性能分析技巧将成为宝贵的瑰宝。若你在面试或学习中面临性能优化方面的困惑,这两份文档定能为你拨云见日,指引你前行的方向。需要这份。

jjc4261的博客 918
上一篇: 字节开源大放血,高并发系统设计实战手册,Github访问量已过百万
下一篇: 我以为自己MySQL够牛逼了,直到看到了Alibaba的面试题
程序员职业指南
博客等级 码龄4年 2136粉丝 960原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值