为什么要做性能调优? 一款线上产品如果没有经过性能测试,那它就好比是一颗定时炸弹,你不知道它什么时候会出现问题,你也不清楚它能承受的极限在哪儿。 所以,要不要做性能调优,这个问题其实很好回答。所有的系统在开发完之后,多多少少都会有性能问题,我们首先要做的就是想办法把问题暴露出来,例如进行压力测试、模拟可能的操作场景等等,再通过性能调优去解决这些问题。 好的系统性能调优不仅仅可以提高系统的性能,还能为公司节省资源。这也是我们做性能调优的最直接的目的!所以,接下来我就给大家带来了一份“阿里巴巴lava性能调优实战(2021华山版)”想要学习的朋友们,我们就先来看看文章大概内容:(同时在文末会有笔记领取方式!大家自行解决) 主要内容 模块一 概述 为你建立两个标准。-个是性能调优标准,告诉你可以通过哪些参数去衡量系统性能;另-一个是调优过程标准,带你了解通过哪些严格的调优策略,我们可以排查性能问题,从而解决问题。 模块二 Java 编程性能调优 JDK是Java语言的基础库,熟悉JDK中各个包中的工具类,可以帮助你编写出高性能代码。这里我会从基础的数据类型讲起,涉及容器在实际应用场景中的调优,还有现在互联网系统架构中比较重要的网络通信调优。 03.字符串性能优化不容小觑,百M内存轻松存储几十G数据 05.ArrayList还是LinkedList?使用不当性能差千倍 06.Stream如何提高遍历集合效率? 10.网络通信优化之通信协议:如何优化RPC网络通信? 11.推荐几款常用的性能测试工具 模块三 多线程性能调优 目前大部分服务器都是多核处理器,多线程编程的应用广泛。为了保证线程的安全性,通常会用到同步锁,这会为系统埋下很多隐患;除此之外,还有多线程高并发带来的性能问题,这些都会在这个模块重点讲解。 12.多线程之锁优化(上):深入了解Synchronized同步锁的优化方法 13.多线程之锁优化(中):深入了解Lock 同步锁的优化方法 15.多线程调优(上):哪些操作导致了上下文切换? 17.并发容器的使用:识别不同场景下最优容器 模块四 JVM性能监测及调优 Java 应用程序是运行在JVM之上的,对JVM进行调优可以提升系统性能。这里重点讲解Java对象的创建和回收、内存分配等。 20. 磨刀不误砍柴工:欲知JVM调优先了解JVM内存模型 21.深入JVM即时编译器JIT,优化Java编译 22.如何优化垃圾回收机制? 模块五 设计模式调优 在架构设计中,我们经常会用到-一些设计模式来优化架构设计。这里我将结合一-些复 杂的应用场景,分享设计优化案例。 29.生产者消费者模式:电商库存设计优化 30. 装饰器模式:如何优化电商系统中复杂的商品价格策略? 模块六 数据库性能调优 数据库最容易成为整个系统的性能瓶颈,这里我会重点解析-一些数据库的常用调优方法。 33.MySQL调优之事务:高并发场景下的数据库事务调优 35.记一次线上SQL死锁事故:如何避免死锁? 38.数据库参数设置优化,失之毫厘差之千里 模块七 实战演练场 以上六个模块的内容,都是基于某个点的调优,现在是时候把你前面所学都调动起来了,这里我将带你进入综合性能问题高频出现的应用场景,学习整体调优方法。 41.如何设计更优的分布式锁? 43.如何使用缓存优化系统性能? 最后 作者:努力向上的小芷 链接:https://juejin.cn/post/6920124384027885581 来源:掘金 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
View Details实色效果 英文名称 R.G.B 16色 实色效果 英文名称 R.G.B 16色 Snow 255 250 250 #FFFAFA PaleTurquoise1 187 255 255 #BBFFFF GhostWhite 248 248 255 #F8F8FF PaleTurquoise2 174 238 238 #AEEEEE WhiteSmoke 245 245 245 #F5F5F5 PaleTurquoise3 150 205 205 #96CDCD Gainsboro 220 220 220 #DCDCDC PaleTurquoise4 102 139 139 #668B8B FloralWhite 255 250 240 #FFFAF0 CadetBlue1 152 245 255 #98F5FF OldLace 253 245 230 #FDF5E6 CadetBlue2 142 229 238 #8EE5EE Linen 250 240 230 #FAF0E6 CadetBlue3 122 197 205 #7AC5CD AntiqueWhite 250 235 215 #FAEBD7 CadetBlue4 83 134 139 #53868B […]
View Details转成 Base64 形式的 System.String:
|
1 2 3 4 5 |
string a = "base64字符串与普通字符串互转"; byte[] b = System.Text.Encoding.Default.GetBytes(a); //转成 Base64 形式的 System.String a = Convert.ToBase64String(b); Response.Write(a); |
转回到原来的 System.String:
|
1 2 3 |
byte[] c = Convert.FromBase64String(a); a = System.Text.Encoding.Default.GetString(c); Response.Write(a);<br> |
from:https://www.cnblogs.com/daimaxuejia/p/12893207.html
View Details|
1 2 3 4 5 6 |
public static bool IsPropertyExist(dynamic data, string propertyname) { if (data is ExpandoObject) return ((IDictionary<string, object>)data).ContainsKey(propertyname); return data.GetType().GetProperty(propertyname) != null; } |
https://www.cnblogs.com/94cool/p/8135579.html
View Details1、从容器里面拷文件到宿主机? 答:在宿主机里面执行以下命令 docker cp 容器名:要拷贝的文件在容器里面的路径 要拷贝到宿主机的相应路径 示例: 假设容器名为testtomcat,要从容器里面拷贝的文件路为:/usr/local/tomcat/webapps/test/js/test.js, 现在要将test.js从容器里面拷到宿主机的/opt路径下面,那么命令应该怎么写呢? 答案:在宿主机上面执行命令
|
1 |
docker cp testtomcat:/usr/local/tomcat/webapps/test/js/test.js /opt |
2、从宿主机拷文件到容器里面 答:在宿主机里面执行如下命令 docker cp 要拷贝的文件路径 容器名:要拷贝到容器里面对应的路径 示例:假设容器名为testtomcat,现在要将宿主机/opt/test.js文件拷贝到容器里面的/usr/local/tomcat/webapps/test/js路径下面,那么命令该怎么写呢? 答案:在宿主机上面执行如下命令
|
1 |
docker cp /opt/test.js testtomcat:/usr/local/tomcat/webapps/test/js |
3、在这里在记录一个问题,怎么看容器名称? 执行命令:docker ps,出现如图所示,其中NAMES就是容器名了。 4.需要注意的是,不管容器有没有启动,拷贝命令都会生效。 from:https://www.cnblogs.com/areyouready/p/8973495.html
View Details前置条件 官网下载页面:https://dotnet.microsoft.com/en-us/download/dotnet/3.1 安装ASP.NET Core Runtime 3.1.31 安装 Hosting Bundle 3.1.31 执行以下命令 net stop was /y net start w3svc 发布应用 部署到IIS 1.应用程序池:选择无托管模式。我电脑是64位,选择“启用32位应用程序”为“false”。 2.网站设置 为你的网站创建windows用户,把网站目录设置对该用户全部权限。 IIS管理器选择你的网站:基本设置 -> 连接为 -> 特定用户。 参考资料: https://blog.csdn.net/weixin_33757609/article/details/93693395 https://blog.csdn.net/xulong5000/article/details/106072771 https://docs.microsoft.com/zh-cn/aspnet/core/tutorials/publish-to-iis?view=aspnetcore-3.1&tabs=visual-studio
View Details服务器版本:window server 2012 R2 Standard SDK 版本: dotnet-sdk-3.1.302-win-x64.exe 部署步骤: 1. 官网下载sdk( https://download.visualstudio.microsoft.com/download/pr/56b00a71-686f-4f27-9ad1-9b30308688ed/1fa023326e475813783a240532c9f2c8/dotnet-sdk-3.1.302-win-x64.exe ) 2.安装部署: 拷贝到服务器,双击安装,安装完毕后,打开cmd名称,输入 dotnet命令查看。。。。结果如下 这是个啥??? 某度查询说是缺少补丁,需要打补丁,服务器又不能联网只能手动上网单独下载了。 其中:https://www.microsoft.com/en-us/download/details.aspx?id=42334 这里面包含KB2919355,KB2932046,KB2934018,KB2937592,KB2938439,KB2959977,chearcompressionflag.exe,可以一次下载。 但是在安装这些补丁之前需要先安装KB2999226 地址 https://www.microsoft.com/en-us/download/confirmation.aspx?id=49063 和 KB2919442,地址:https://www.microsoft.com/zh-cn/download/details.aspx?id=42135 补丁安装顺序: KB2999226 KB2919442, clearcompressionflag.exe、 KB2919355、 KB2932046、 KB2959977、 KB2937592、 KB2938439、 KB2934018。 严格按照补丁顺序安装,否则不确保是否能安装成功。 最后在安装 Visual C++ Redistributable for Visual Studio 2015 地址:https://www.microsoft.com/zh-cn/download/details.aspx?id=48145 安装时提示重启,可以都安装完毕后重启,也可以每次重启,我是都安装完了再重启的,也可以成功。 安装重启后,在cmd命令下输入 dotnet --version 如果出现一下内容,就说明安装成功 光子:我按以上教程实际操作时不行,要安装:https://www.microsoft.com/en-us/download/confirmation.aspx?id=42162 from:https://www.cnblogs.com/jone_sun/p/13403269.html
View Details一直想试试docker,但是docker高度依赖Linux内核,Windows7的机子用起来比较麻烦,由于某些契机还是用了起来。Windows想用docker的话,需要借助虚拟机,Windows7不像Windows10自带Hyper虚拟机,所以要用docker只有Docker Toolbox这个选择了。具体安装过程就不具体说了,官网也有详细的教程,不过让我最气的是联想的本本一直进入不了bios,最后Fn+F2进入bios启用虚拟设置。 Docker ToolBox安装 1、安装前,需要去bios启用虚拟设置,这样虚拟机才能运行。 2、安装,安装可选的工具: Kitematic,docker的界面化,没什么太大需要 Git,本来已安装的话也不用安装 3、修改 Docker QuickStart 快捷方式,将里面的Git的位置换成你的Git的安装位置(或者可以直接Git进入Docker Toolbox安装位置,运行./start.sh) 替换默认docker machine的存储位置 我相信大部分人都是直接安装官网的教程或者上面的安装方式直接安装的,但是将虚拟机安装在系统盘可能会带来各种问题,所以趁docker的镜像还没膨胀的时候赶快迁移吧。下面步骤可以在安装前做,这样可以减少删除已安装的default docker虚拟机。 1、在Windows的系统环境添加MACHINE_STORAGE_PATH ,指向虚拟机的位置(我推荐D:\VM\machines) 2、复制boot2docker.iso到虚拟机的位置同级目录cache上(D:\VM\cache),如果不是最新的话需要下载最新。 下面分两种情况: 如果还没安装default docker虚拟机,可以进入Docker QuickStart直接安装。 已安装了default docker虚拟机,需要先删除原来的,再安装到指定位置。 删除default docker虚拟机 1、进入Docker QuickStart命令行(Docker QuickStart不能进的话,用Git命令行) 2、运行docker-machine stop default,停止运行中的虚拟机 3、运行docker-machine rm default,删除默认的虚拟机 创建docker虚拟机 1、运行docker-machine create --driver=virtualbox default,等待创建完成 2、创建完成后,运行docker run hello-world测试。可以看到出现问题了:
|
1 |
error during connect: Get http://%2F%2F.%2Fpipe%2Fdocker_engine/v1.36/version: open //./pipe/docker_engine: The system cannot find the file specified. In the default daemon configuration on Windows, the docker client must be run elevated to connect. This error may also indicate that the docker daemon is not running. |
3、运行docker-machine env default,可以看到docker server的变量,copy变量在命令行中运行。 4、再次运行docker run hello-world测试,这次应该没问题。 修改docker 的配置 嫌弃官网的docker源太慢需要使用国内的源加速的话,要怎么配置呢? 1、运行docker-machine ssh default连接虚拟机 2、修改
|
1 2 3 4 5 6 7 |
docker@default:~$ sudo tee /var/lib/boot2docker/etc/docker/daemon.json <<-'EOF' { "registry-mirrors": [ "https://registry.docker-cn.com" ] } EOF |
3、退出ssh,重启docker-machine restart default from:https://www.cnblogs.com/ginponson/p/8601320.html
View DetailsInfoWorld 公布了 2020 年最佳开源软件榜单。 InfoWorld 是致力于引领 IT 决策者走在科技前沿的国际科技媒体品牌,每年 InfoWorld 都会根据软件对开源界的贡献,以及在业界的影响力评选出当年的“最佳开源软件” (InfoWorld’s Best of Open Source Software Awards, Bossies),该奖项评选已经延续了十多年。 获奖的 25 个开源项目包含用于构建 Web 应用的工具、机器学习模型、数据可视化工具、工作流、数据库和数据分析工具等。 下边来看看每一个项目(点击每个项目名可跳转进入项目介绍页面)。 Hasura Hasura GraphQL Engine 是一个超快的 GraphQL 服务器,可以让你基于 PostgreSQL 数据库快速建立 GraphQL API 服务。通过数据库事件实现 webhook triggers ,其 remote schemas 用于构建业务逻辑。 Prisma Prisma 被认为是一款对 TypeScript 开发者友好的 ORM 框架,包括 SQL 查询自动补全功能,可用于快速构建 GraphQL 服务、REST API 和数据库服务等。 已支持 MySQL, PostgreSQL, MongoDB 和 SQLite 等数据库,其他流行数据库正在开发中 客户端已支持 JavaScript, TypeScript, Flow, Go 等语言 类型安全的数据库访问,包括过滤器、聚合、分页和事务 数据库的实时事件系统以获得有关数据库事件的通知 具有简单 SDL 语法的声明性数据建模和迁移 Jekyll InfoWorld 对 Jekyll 的评价是“最好的静态站点生成器之一”。Jekyll 无需数据支持,可以将内容打包为单个网页的集合,然后推送到 CDN。Jekyll 所做的工作虽然只是将文本放入模板并生成静态内容,正因如此,用户获得了模板所带来的灵活性以及存储静态文件的良好速度。 Gatsby Gatsby 是基于 React 构建的静态站点生成器,拥有丰富的插件生态,其主要目标之一是交付访问速度快速的网页,它通过利用良好的缓存、静态页面生成和基于边缘的 CDN 数据源来实现这一目标。所以 Gatsby 声称自己比其他的静态站点生成器快 2.5 倍。InfoWorld 对 Gatsby […]
View Details一、引言 一般来说,安装好 git 后,我们都会配置一个全局的 config 信息,就像这样:
|
1 2 |
git config --global user.name "jitwxs" // 配置全局用户名,如 Github 上注册的用户名 git config --global user.email "jitwxs@foxmail.com" // 配置全局邮箱,如 Github 上配置的邮箱 |
但是你可能会碰到需要在一台电脑上配置多个用户信息的需求。此时就不能够用一个全局配置搞定一切了。 比如因为我的个人电脑出了问题,我想要提交我的个人项目时,只能用公司配的电脑去提交。而公司的电脑配置的是私有的 gitlab 仓库,而我自己的项目存储在 github 上。这两个仓库不仅仓库地址不一样,仓库的用户名和邮箱都不一样。 二、配置多用户 本文将配置分别是 github 以及 gitlab 上的两个用户,并分别在它们所属的项目上进行 git 操作,这差不多就是配置多用户的大部分操作了。 GITHUB GITLAB 用户名 jitwxs lemon 邮箱 jitwxs@foxmail.com lemon@test.com 2.1 清除全局配置 在正式配置之前,我们先得把全局配置给清除掉(如果你配置过的话),执行命令:
|
1 |
git config --global --list |
这会列出所有已经配置的全局配置,如果你发现其中有 user.name 和 user.email 信息,请执行以下命令将其清除掉:
|
1 2 |
git config --global --unset user.name git config --global --unset user.email |
2.2 生成钥对 钥对的保存位置默认在 ~/.ssh 目录下,我们先清理下这个目录中已存在的钥对信息,即删除其中的 id_rsa、id_rsa.pub 之类的公钥和密钥文件。 首先我们开始生成 github 上的仓库钥对,通过 -C 参数填写 github 的邮箱:
|
1 |
ssh-keygen -t rsa -C “jitwxs@foxmail.com” |
按下 ENTER 键后,会有如下提示:
|
1 |
Generatingpublic/privatersa key pair.Enter fileinwhich to save the key (/Users/jitwxs/.ssh/id_rsa): |
在这里输入公钥的名字,默认情况是叫 id_rsa,为了和后面的 gitlab 配置区分,这里输入 id_rsa_github。输入完毕后,一路回车,钥对就生成完毕了。 下面开始生成 gitlab 上的仓库钥对,步骤和上面一样:
|
1 |
ssh-keygen -t rsa -C “lemon@test.com” |
生成的公钥名就叫做:id_rsa_gitlab。 2.3 添加 SSH Keys 我相信你既然都看到这篇文章了,你一定掌握了如何将公钥添加到 SSH Keys 中。请将 id_rsa_github.pub 和 id_rsa_gitlab.pub 内容分别添加到 github 和 gitlab 的 SSH Keys 中,这里就不啰嗦了。 2.4 添加私钥 在上一步中,我们已经将公钥添加到了 github 或者 gitlab 服务器上,我们还需要将私钥添加到本地中,不然无法使用。添加命令也十分简单,如下:
|
1 2 |
ssh-add ~/.ssh/id_rsa_github // 将 GitHub 私钥添加到本地 ssh-add ~/.ssh/id_rsa_gitlab // 将 GitLab 私钥添加到本地 |
添加完毕后,可以通过执行 ssh-add -l 验证下,如果都能显示出来和下面一样,就 […]
View Details