首页 文章 精选 留言 我的

精选列表

搜索[快速入门],共10000篇文章
优秀的个人博客,低调大师

一篇文章搞懂ECS镜像 快速创建ECS实例

ECS镜像提供了创建ECS实例所需的信息。创建ECS实例时,必须选择镜像。镜像文件相当于副本文件,该副本文件包含了一块或多块云盘中的所有数据,对于ECS而言,这些云盘可以是单块系统盘,也可以是系统盘加数据盘的组合。 镜像类型 根据来源不同,ECS镜像分为以下四种类型。 自定义镜像生命周期 当您成功创建或成功导入自定义镜像后,镜像的状态为可用。此时,您可以使用该镜像创建实例,可以将其共享给其他阿里云账号使用,或复制该镜像到其他地域使用,不再需要该镜像时,可以将其删除。自定义镜像的生命周期如下图所示。 创建自定义镜像 使用已有镜像创建实例后,您可以对实例进行个性化配置(如安装软件、部署项目等),并为更新后的实例创建自定义镜像,具体步骤请参见使用实例创建自定义镜像。使用该自定义镜像创建的实例将包含已配置的自定义项,具体步骤请参见使用自定义镜像创建实例。 您也可以使用已有的系统盘快照或系统盘加数据盘快照创建自定义镜像。具体步骤,请参见使用快照创建自定义镜像。 您还可以从本地导入自定义镜像。具体步骤,请参见导入镜像流程。 共享和复制自定义镜像 镜像属地域性资源。例如,您在华北2(北京)地域创建自定义镜像后,只能在华北2(北京)地域使用该镜像创建实例。 当您共享该镜像给其他阿里云账号使用时,该账号也只能在华北2(北京)地域使用该镜像。如果您需要在其他地域共享该镜像,可以先复制镜像到目标地域,然后再将其共享给目标阿里云账号。更多详情,请参见共享镜像。 当您需要在其他地域使用该镜像时,可以复制该镜像到目标地域。复制后的镜像独立存在,拥有唯一的镜像ID。更多详情,请参见复制镜像。 更换镜像 创建实例后,如果您需要更换实例的操作系统,可以通过更换系统盘来实现。 如果更换为公共镜像,请参见更换系统盘(公共镜像)。 如果更换为非公共镜像(如自定义镜像、镜像市场镜像或共享镜像),请参见更换系统盘(非公共镜像)。 删除自定义镜像 当您不再需要一个自定义镜像,可以将其删除。删除后,您不能再使用该镜像创建实例。已经使用该镜像创建的实例,将无法重新初始化系统盘。 自定义镜像,由ECS实例各云盘快照组成。删除自定义镜像,不会删除镜像中包含的快照,如不想保留快照,可同时在快照列表中删除对应快照。更多信息,请参见删除自定义镜像。 API操作 您也可以查看并使用镜像相关的API对镜像进行操作。更多详情,请参见镜像相关API。 本文来自 阿里云文档中心 镜像概述

优秀的个人博客,低调大师

3D人脸识别快速发展,你觉得安全吗?

据艾媒咨询发布的《2019年中国刷脸支付技术应用社会价值专题研究报告》显示,在移动支付市场规模逐渐扩大以及人脸识别技术发展渐趋成熟的大背景下,2019年已经成为刷脸支付的“元年”,刷脸支付用户保持高速增长,有望增至1.18亿人,2022年将突破7.6亿人,届时将成为主要的支付方式。刷脸支付落地普及被大众广泛接受和认可,正是其安全性和便捷性带给用户全新体验。刷脸支付的核心技术是3D人脸识别技术,从另一个角度来看,在刷脸支付受到热捧的背后,3D人脸识别技术的成熟发展成为关键点。 目前人脸识别技术分为2D人脸识别和3D人脸识别两种技术,但由于2D人脸识别只能获取人脸的平面的信息,能够被图片、视频等破解,加上容易受到光线影响,存在较大的安全隐患。相对来说,3D人脸识别能够获取人脸的三维信息,不容易受姿态、光照、表情等因素影响,比起2D识别,3D人脸识别技术更为安全、稳定、成熟,能够识别照片、视频、面具、双胞胎等伪装。3D人脸识别技术成为现在“刷脸”行业的风向标,例如支付宝率先推出的刷脸支付设备,采用了国内奥比中光提供的3D人脸识别解决方案,为用户提供安全、快捷、高效的支付服务。 刷脸背后的3D传感技术 3D人脸识别等新技术的出现正在改变支付行业,以提升用户体验为核心进行创新,掀起一场大规模的服务升级浪潮。在3D刷脸背后,是什么技术所赋予它这么强大的能力呢?答案就是3D传感技术。在3D传感技术中,结构光和TOF是两种主流的解决方案,二者应用的区别也比较大。 首先从技术原理上来讲,结构光技术是利用光学手段拍摄物体的三维结构,再将获取到的信息进行深入处理的技术。而TOF技术则不同,其发射的是持续不断的“面光源”,光线遇到不可穿透物体会发生反射,通过记录、计算反射光达到接收器的时间,由此得到一张被测物体的3D图像。对比来看,结构光技术功耗更小,更适合近距离和静态场景,目前3D结构光技术测量距离能达到1mm毫米级精度,主要应用于解锁以及安全支付、面部识别等方面,支付宝、银联、微信刷脸支付等都是采用结构光技术。TOF方案在远距离下噪声较低,更适合远距离和动态场景,主要用于智能机后置摄影,并在AR、VR等领域发挥一定的作用。 靠刷脸走遍天下的时代正在到来 在巨大市场需求的刺激下,3D人脸识别技术发展势头非常强劲,拥有广阔的市场前景。3D人脸识别的应用从最初的刷脸解锁到刷脸支付,从单一领域延伸到了包括手机、移动支付、安防、物流等多个领域。“刷脸”越来越成为常态,在全国各地延伸遍地开花。如何能保障刷脸的安全性一直是个热议的话题,目前仍存在有部分人会质疑刷脸的安全性而不敢轻易使用,担心个人账号被盗刷、信息被破解等诸多隐患。 虽然3D人脸识别可以极大地改善解决可能被破解的弊端,给予更高的安全等级,但是针对“刷脸”应用,相关部门应该出台法律法规加强监管;身为企业经营者也需要自律,保障使用者的人脸信息安全,营造一个更为安全的使用环境。 随着技术的发展和人们的重视,“刷脸”定会是未来科技发展的趋势之一,在“刷脸”的同时可能会增加指纹、声纹、虹膜等生物信息作为辅助交叉验证,让“刷脸”更加安全。3D刷脸识别会越来越普及,只靠刷脸就能走遍天下,搞定衣食住行,这种天马行空的想象也正在一步步成为现实。

优秀的个人博客,低调大师

一个正常运行的网站如何快速实现CDN加速

背景 随着互联网的发展,网站业务已越来越多样化,人们的需求也在逐渐发生改变,现在网络上文字内容越来越少,而图片和视频越来越多,今日头条、抖音、快手、各大类短视频、媒体资讯、在线教育、直播点播平台层出不穷;目前互联网70%以上的流量都来自于图片和视频,在未来,会超过90%,只是传统的使用服务器带宽来承担这些流量压力会带来高额的带宽费用并且很容易遇到瓶颈,我们必须寻找其他的方法来解决这一问题。 业务价值 CDN是建立并覆盖在承载网之上,由分布在不同区域的边缘节点服务器群组成的分布式网络,使用CDN,可以将各种资源提前缓存至边缘节点,用户就近调取,无需消耗服务器带宽,特别是业务内容有大量图片以及视频的,会大幅度提升用户的访问速度,并有效节省带宽成本;目前,DCDN已支持动态加速,不再是只针对于静态内容,所以适用性极广,想要有效降低带宽成本,提升用户体验感,CDN是你的不二选择。 本篇文章以域名nyoyoo.com作为演示使用,会一步步教大家如何使用阿里云的CDN完成对网站的加速 操作步骤 1、首先开通CDN服务 2、登陆CDN控制台,点击域名管理—添加域名 3、加速域名,填写访问网站时使用的域名,一般网站访问域名都是使用www开头,如果要对所有二级域名加速,可以填写*.nyoyoo.com;资源分组选择默认;业务类型根据实际情况选择,如果业务类型较多,可直接选择全站加速;源站信息,一般直接选择IP,然后填写源站服务器的公网IP地址;端口,如果没有使用SSL证书就选择80端口,反之,选择443端口。(注意,如果使用了证书服务,需要在CDN控制台上传证书) 4、如果要给OSS做加速 在创建了Bucket的情况下,同账号可以直接在下拉框里面选择需要加速的Bucket对应的域名;如果不是同一账号,可以在OSS控制台查看 注意,这个时候要选择自定义OSS源站才可以添加;关于如何使用CDN为OSS加速详解请参考另一篇文章 5、如果需要通过加速域名,跳转到另一个域名进行访问,那么选择源站域名 6、加速区域,主要看用户群体所在的地域,目前要使用中国大陆和全球加速需要加速域名完成备案,港澳台及海外不用备案,所有用户都可以使用,跟会员等级无关。 7、需要注意的是如果业务类型选择了全站加速,需要跳转到全站加速控制台进行配置 界面略微简洁一些,配置方法参考上面 8、设置好之后点击下一步 选择返回域名列表 此时状态会在配置中,配置完成大概需要1-2分钟 9、状态正常运行之后,会出现一段CNAME值,请把这段CNAME值复制下来 10、进入控制台----域名 11、找到需要加速的域名,选择解析 阿里云优惠大促开始了,从现在就可以先参与了。 先领券再购买云产品》》 (不限新老用户)云产品一折拼购直达地址》》aliyunp.com(阿里云拼团) (不限新老用户)阿里云优惠主会场直达地址》》aliyunh.com(阿里云主会场)! 12、正常情况下,一个正在运行的网站已经添加了A记录 因为A记录与CNAME记录是冲突的,所以此时需要删除A记录,再添加CNAME记录,新添加的CNAME记录会马上生效注意:可以建议客户在服务器访问量少的时段进行操作,避免因操作失误等原因对业务造成影响,如果对情况把握不准的同学可以联系二线协助,不要随意让客户删除解析记录,否则可能会对业务造成严重影响 13、删除之后,选择添加记录 14、记录类型选择CNAME,主机记录根据之前在CDN配置的加速域名来填写 解析线路选择默认,记录值粘贴之前在第9步CDN----域名管理里复制的CNAME值,TTL不变,选择确定 15、此时解析记录已经添加成功 16、这个时候我们来验证CDN是否已经生效,直接ping我们配置的加速域名 出现红框部分类似于.Kunlun.com的域名,证明CDN已经生效 17、如果此时用户想要测试一下网站的实际访问速度是否得到改善,可以使用http://cesule.tingyun.com/cesule/home进行网速测试 当然,配置CDN之后,有时候资源并不能马上得到加速,需要等到缓存规则命中之后,如果想快一点实现加速,可以使用CDN预热功能,将需要加速的URL填写进去,进行预热 18、如果网站资源有更新,想要CDN及时同步,可以使用CDN的刷新功能,同样填入相关资源的URL即可 附:CDN购买链接:https://www.aliyun.com/product/cdn?spm=5176.7933691.cwnn_jpze.46.2d3d2a667RjB6q 阿里云服务器:活动地址 购买可领取:阿里云代金券

优秀的个人博客,低调大师

云服务中断不可避免,快速响应方为解决之道

云服务中断是很多企业会遇到的情况,这也是企业将一切业务放心交给第三方云提供商后不可避免的后果。而微软正在想办法帮助IT管理员在面对用户和老板的不满之前了解情况。 一年前,来自微软的基于云的企业电子邮件,日历和联系人管理平台Exchange Online 遭受了长时间的停机,不仅引起了头条新闻,而且使公司的一些客户处于等待状态,中间停留了几个小时工作日。更糟的是,服务运行状况仪表板未能反映出该问题。 微软的高级营销经理凯蒂·奥尔姆斯特德(Katy Olmstead)承认,即使她的公司有99.9%的财务支持,正常运行时间保证也不意味着云将永远有效。 奥尔姆斯特德在一份声明中说:“与任何云服务一样,尽管我们付出了所有努力,但事件确实可能发生并且确实会影响您的体验。” “我们意识到,在这些关键时刻,我们的应对方式将对您和您的组织产生重大影响。” 为了帮助使管理员了解情况,Microsoft已将推送通知添加到适用于Windows Phone,iOS和Android的Office 365 Admin应用程序。首次发布更新的客户可以立即打开该功能。奥尔姆斯特德说,稍后将在全球发行。 “现在,当您在旅途中离开Office 365管理中心时,如果发生影响您用户的服务事件,您会立即收到警报,并且您将可以轻而易举地访问重要详细信息,您可以采取任何措施减轻影响,”她说。“并且您可以通过同一应用程序了解最新的服务运行状况。” Olmstead透露,更多的警报选项正在开发中。Microsoft计划将自定义通知以及短信服务(SMS)和电子邮件警报添加到该应用的将来版本中。 服务运行状况仪表板也已升级,以提供更快,更详细的事件报告。“通过对包括先进的机器学习,异常检测和自动化在内的新流程进行投资,在许多情况下,我们已经将发出第一时间警报的时间减少了60%,” Olmstead报告。“我们仍然致力于进一步减少这种情况。” 状态更新现在包括更多信息,例如“预期的用户体验,潜在的变通方法,估计的恢复时间和初始根本原因分析,” Olmstead说。如果其他客户先前已报告过问题,则在发送服务请求时还将向管理员通知影响服务的问题。 为了将这种可见性扩展到服务台平台和其他应用程序,Microsoft发布了Office 365服务通信应用程序编程接口(API)的公开预览。 “使用此API,您现在可以直接在现有的帮助台工具和服务管理解决方案中显示关键的Office 365服务通信,并简化在整个环境中跨服务运行状况进行监视的方式,” Olmstead说道。早期的支持者包括服务监视和管理专家BetterCloud,Cogmotive,ENow和Exoprise。

优秀的个人博客,低调大师

借助URLOS快速安装Apache-PHP-5.6网站环境

环境需求 最低硬件配置:1核CPU,1G内存(1+1)提示:如果你的应用较多,而主机节点的硬件配置较低,建议在部署节点时开通虚拟虚拟内存; 生产环境建议使用2G或以上内存; 推荐安装系统:Ubuntu-16.04、Ubuntu-18.04、CentOS7.X、Debian9X的64位的纯净的操作系统; URLOS安装 curl -LO www.urlos.com/iu && sh iu Apache-PHP-5.6网站环境安装流程 登录URLOS系统后台,在应用市场中选择别名并搜索“Apache-PHP-5.6网站环境”,找到之后,选择合适的版本点击安装按钮 填写服务名称、选择运行节点、服务端口、选择智能部署 填写域名:www.aaa.com(这里填写自己的域名) 创建数据库:选择“自动添加并部署数据库”、填写数据库密码 然后点击“提交”按钮,等待部署完成。 访问http://域名

优秀的个人博客,低调大师

借助URLOS快速安装psi-erp-企业管理软件

环境需求 最低硬件配置:1核CPU,1G内存(1+1)提示:如果你的应用较多,而主机节点的硬件配置较低,建议在部署节点时开通虚拟虚拟内存; 生产环境建议使用2G或以上内存; 推荐安装系统:Ubuntu-16.04、Ubuntu-18.04、CentOS7.X、Debian9X的64位的纯净的操作系统; URLOS安装 curl -LO www.urlos.com/iu && sh iu psi-erp-企业管理软件安装流程 登录URLOS系统后台,在应用市场中搜索“psi-erp”,找到之后,直接点击安装按钮 填写服务名称、选择运行节点、选择智能部署 填写域名:www.aaa.com(这里填写自己的域名) 创建数据库 然后点击“提交”按钮,等待部署完成; 初始化数据库 开放数据库的外网访问端口,填写服务端口3306 请手动导入mysql数据,文件位置:/www/PSI/psi.sql 安装mysql客户端 apt-get install mysql-client 或者 yum install mysql-client 在终端用mysql客户端连接数据库: mysql -h 数据库的地址 -P 3306 -u 数据库用户名 -p'密码' 导入sql文件 source sql的文件路径 访问网站 登录账户:admin 密码:admin

优秀的个人博客,低调大师

Java NIO之用Channel和MappedByteBuffer高效快速复制大文件

NIO的应用,复制大文件,超爽,简单高效 import java.io.RandomAccessFile; import java.nio.MappedByteBuffer; import java.nio.channels.FileChannel; import java.nio.channels.FileChannel.MapMode; public class Demo05 { public static void main(String[] args) throws Exception { FileChannel inChannel=new RandomAccessFile("f:\\01.wmv", "r").getChannel(); FileChannel outChannel=new RandomAccessFile("f:\\02.wmv", "rw").getChannel(); MappedByteBuffer map=inChannel.map(MapMode.READ_ONLY, 0, inChannel.size()); outChannel.write(map); outChannel.close(); inChannel.close(); System.out.println("复制完毕"); } }

优秀的个人博客,低调大师

利用Serverless Kubernetes和Kaniko快速自动化构建容器镜像

前言: 在云原生时代中,容器镜像是一切应用分发的基础载体,除了dockerhub作为流行的镜像仓库外,各大公有云厂商也都提供了功能丰富镜像仓库服务,如ACR(Aliyun Container Registry), GCR(Goolge Container Registry),构建容器镜像已是所有开发者必须掌握的基础实践能力。 无论开发者选择在本地使用docker完成基本的镜像构建,还是使用CI/CD服务(如Jenkins),本质上都是遵循“pull -> build -> push”的过程,完成镜像的构建、分发和同步等操作。 本文介绍了一种新的面向开发者的简单镜像构建实践,基于阿里云Serverless Kubernetes容器服务,可以自动化而且低成本的构建容器镜像,以便让开发者了解如何使用Serverless运行CI/C

优秀的个人博客,低调大师

学会这个工具的使用,让你快速生成验证码

前言 验证码是我们做人机验证最常用的方式,常用于敏感操作的验证,比如:登录、注册、修改等。 验证码的原理:不同的客户端拥有不同的 session 对象,在看到验证码图片的时刻,服务器后端代码生成图片并将随机字符存储到 session 中。这样客户端看到的只能是图片,人工识别图片后将字符发送到服务器与 session 中的字符进行比对。 上面只是简单的介绍了验证码的原理,更多细节还需有 javaweb 相关基础知识,这篇文章适合有基础的同学。 最近几天我翻到了以前生成验证码的工具类,使用 Graphics2D 生成的图片,然后再以流的形式写出到客户端,这些代码还是有些问题的,都是硬编码。在以后的使用中我们可能有不同的需求都会导致代码重新修改,自定义一些样式都不是很方便。 所以我找到了 github 上的一个生成验证码的工具:kaptcha,下面我就给大家介绍一下 kaptcha 的使用。 kaptcha 的使用 我们就以一个 maven 构建的 web 项目为例 1、依赖 jar 包 在 pom.xml 文件中添加相关依赖 <dependency> <groupId>com.github.penggle</groupId> <artifactId>kaptcha</artifactId> <version>2.3.2</version> </dependency> 2、配置生成验证码的 servlet 修改 web.xml,添加 kaptcha 提供的 servlet 并配置映射路径 <servlet> <servlet-name>Kaptcha</servlet-name> <servlet-class>com.google.code.kaptcha.servlet.KaptchaServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>Kaptcha</servlet-name> <url-pattern>/captcha</url-pattern> </servlet-mapping> 访问 http://localhost:8080/captcha 这时发现就已经可以产生验证码了,但还有个问题,验证码的随机字符存在哪里了? 3、探索 kaptcha 我们来查看 KaptchaServlet 这个类的源码,doGet 方法 @Override public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // Set to expire far in the past. resp.setDateHeader("Expires", 0); // Set standard HTTP/1.1 no-cache headers. resp.setHeader("Cache-Control", "no-store, no-cache, must-revalidate"); // Set IE extended HTTP/1.1 no-cache headers (use addHeader). resp.addHeader("Cache-Control", "post-check=0, pre-check=0"); // Set standard HTTP/1.0 no-cache header. resp.setHeader("Pragma", "no-cache"); // return a jpeg resp.setContentType("image/jpeg"); // create the text for the image String capText = this.kaptchaProducer.createText(); // store the text in the session req.getSession().setAttribute(this.sessionKeyValue, capText); // store the date in the session so that it can be compared // against to make sure someone hasn't taken too long to enter // their kaptcha req.getSession().setAttribute(this.sessionKeyDateValue, new Date()); // create the image with the text BufferedImage bi = this.kaptchaProducer.createImage(capText); ServletOutputStream out = resp.getOutputStream(); // write the data out ImageIO.write(bi, "jpg", out); } 有这样一段代码,获取字符后存入 session 中,键为 sessionKeyValue 这个变量的值 // create the text for the image String capText = this.kaptchaProducer.createText(); // store the text in the session req.getSession().setAttribute(this.sessionKeyValue, capText); sessionKeyValue 这个变量的值在 init 方法中被赋值 this.sessionKeyValue = config.getSessionKey(); 好我们进入 config.getSessionKey() 中查看代码,发现 session 的键为 Constants 这个类中的常量 Constants.KAPTCHA_SESSION_KEY return this.properties.getProperty(Constants.KAPTCHA_SESSION_CONFIG_KEY, Constants.KAPTCHA_SESSION_KEY); 4、编写测试验证码是否正常使用的 servlet 我们来验证一下,编写一个 servlet import com.google.code.kaptcha.Constants; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.PrintWriter; @WebServlet("/test") public class TestKaptchaServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { resp.setContentType("text/html;charset=utf-8"); PrintWriter out = resp.getWriter(); //获取传入的验证码 String captcha = req.getParameter("captcha"); if (null != captcha) { //获取实际session中的验证码 String code = (String) req.getSession().getAttribute(Constants.KAPTCHA_SESSION_KEY); if (null == code){ resp.sendRedirect("/captcha"); return; } if (code.equalsIgnoreCase(captcha)) { out.print("验证输入正确"); } else { out.print("验证码输入有误"); } } else { out.print("必须输入验证码"); } out.flush(); out.close(); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { this.doGet(req, resp); } } 先访问验证码 http://localhost:8080/captcha 然后访问 http://localhost:8080/test?captcha=验证码 以上这些默认配置能满足一般业务的使用了,下面通过深入解析 kaptcha 的源码自定义配置验证码的宽、高、边框、颜色、字符等 5、深入源码自定义配置 kaptcha 再来看一下 init 方法中的代码 @Override public void init(ServletConfig conf) throws ServletException { super.init(conf); // Switch off disk based caching. ImageIO.setUseCache(false); Enumeration<?> initParams = conf.getInitParameterNames(); while (initParams.hasMoreElements()) { String key = (String) initParams.nextElement(); String value = conf.getInitParameter(key); this.props.put(key, value); } Config config = new Config(this.props); this.kaptchaProducer = config.getProducerImpl(); this.sessionKeyValue = config.getSessionKey(); this.sessionKeyDateValue = config.getSessionDate(); } 这段代码获取 servlet 的初始化参数,并将参数存入 config 对象中,看 config 中的一段代码 public boolean isBorderDrawn() { String paramName = Constants.KAPTCHA_BORDER; String paramValue = this.properties.getProperty(paramName); return this.helper.getBoolean(paramName, paramValue, true); } 没错,所有的参数名字都是 Constants 类中常量名称 public class Constants { public final static String KAPTCHA_SESSION_KEY = "KAPTCHA_SESSION_KEY"; public final static String KAPTCHA_SESSION_DATE = "KAPTCHA_SESSION_DATE"; public final static String KAPTCHA_SESSION_CONFIG_KEY = "kaptcha.session.key"; //省略其他代码 } 所以,可以给 KaptchaServlet 在 web.xml 配置参数,下面这些配置给大家参考 <servlet> <servlet-name>Kaptcha</servlet-name> <servlet-class>com.google.code.kaptcha.servlet.KaptchaServlet</servlet-class> <!-- 是否有边框 --> <init-param> <param-name>kaptcha.border</param-name> <param-value>no</param-value> </init-param> <!-- 字体颜色 --> <init-param> <param-name>kaptcha.textproducer.font.color</param-name> <param-value>red</param-value> </init-param> <!-- 图片宽度 --> <init-param> <param-name>kaptcha.image.width</param-name> <param-value>135</param-value> </init-param> <!-- 使用哪些字符生成验证码 --> <init-param> <param-name>kaptcha.textproducer.char.string</param-name> <param-value>ACDEFHKPRSTWX345679</param-value> </init-param> <!-- 图片高度 --> <init-param> <param-name>kaptcha.image.height</param-name> <param-value>50</param-value> </init-param> <!-- 字体大小 --> <init-param> <param-name>kaptcha.textproducer.font.size</param-name> <param-value>38</param-value> </init-param> <!-- 干扰线的颜色 --> <init-param> <param-name>kaptcha.noise.color</param-name> <param-value>black</param-value> </init-param> <!-- 字符个数 --> <init-param> <param-name>kaptcha.textproducer.char.length</param-name> <param-value>6</param-value> </init-param> <!-- 使用哪些字体 --> <init-param> <param-name>kaptcha.textproducer.font.names</param-name> <param-value>Arial</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>Kaptcha</servlet-name> <url-pattern>/captcha</url-pattern> </servlet-mapping>

优秀的个人博客,低调大师

快速开发android,离不开这10个优秀的开源项目

作为一名菜鸡Android,时常瞻仰大佬们的开源项目是非常必要的。这里我为大家收集整理了10个优秀的开源项目,方便我们日常开发中学习! 作者:ListenToCode博客:https://www.jianshu.com/p/9742ce36b6a8 KnowWeather GitHub地址https://github.com/SilenceDut/KnowWeather) 一款 Android 开源天气 App ,包含天气信息、详情、生活指数等,通知栏,桌面小部件,定时更新天气等等,应用没有任何广告,支持县级、区级城市的天气,原文:https://www.diycode.cc/projects/SilenceDut/KnowWeather 整体框架 根据实际项目浅谈Android项目中的框架搭建 (https://silencedut.github.io/2016/12/05/根据实际项目浅谈Android项目中的框架搭建/) 关于 知天气——天气尽在掌握之中 (https://silencedut.github.io/2016/12/06/知天气——天气尽在掌握之中/) 特点 支持县级、区级天气 JobScheduler与JobService的使用 轮询系统定时更新天气 实现很多定制化很大的,对后台任务严苛的系统中(如魅族系统)通知栏常驻,并且轮询系统正常运行,很多下载量千万级的天气应用无法达到此效果 无广告和强制保活拉活的行为 FolioReader-Android GitHub地址https://github.com/FolioReader/FolioReader-Android 一个 Android 开源电子书(ePub)阅读 App , 原文: https://www.diycode.cc/projects/FolioReader/FolioReader-Android 效果图 Gradle Add following dependency to your app build.gradle compile'com.folioreader:folioreader:0.2.3' NBAPlus GitHub地址https://github.com/SilenceDut/NBAPlus 一个 Android 开源 NBA 资讯和赛事信息的平台 App 效果图 特点 遵循Android开发最佳实践的一种具体实践 Retrofit2.0+RxJava+EventBus+GreenDao的使用 代码结构清晰,扩展性强,易复用到其他项目 结合NBAPlus Server 学习后台开发知识和接口的设计 动态Blur效果。 关于 NBA资讯和赛事信息的平台。 全面、方便、快捷的获取新闻动态、比赛数据。 无广告、推送信息,不后台常驻,空间占用小。web后台部分在这: NBAPlus Server (https://github.com/SilenceDut/nbaplus-server) MyDiary GitHub地址https://github.com/DaxiaK/MyDiary 动漫《你的名字》同款 Android 开源 App,原文: https://www.diycode.cc/projects/erttyy8821/MyDiary 效果图 简诗 GitHub地址https://github.com/wingjay/jianshi 一款优雅的中国风记录 app,包括 Android 端和 Server 端,原文:https://www.diycode.cc/projects/wingjay/jianshi 相关博客 如何在一天之内完成一款具备cool属性的Android产品_简书 (https://www.jianshu.com/p/cf496fc408b2) banya GitHub地址(https://github.com/forezp/banya) 一个基于豆瓣 API 仿网易云音乐的开源项目。原文:https://www.diycode.cc/projects/forezp/banya 项目介绍: 整体采用material design 风格,本人是网易云音乐的粉丝,所以界面模仿了网页云音乐,另外,项目中尽量使用了5.0之后的新控件。 项目整体采用mvp+rxjava+retrofit 框架,使用glide进行图片展示,用butterknif注解,另外使用了java 8 新特性,拉姆达表达式,安卓原生并不支持,需要导插件,具体见项目。 并对retrofit的okhttpClient进行了缓存配置,很遗憾,豆瓣API在服务端并没有对返回数据进行Cache-Control 设置。 后续会采用本地数据库对数据进行缓存,初步定为使用realm。 项目地址:https://github.com/forezp/banya 主界面采用material design 设计风格,使用了NavigationView和DrawerLayout的抽屉效果,CoordinatorLayout和viewpager 配合,使用behavior属性,对toolbar的显示和隐藏进行了控制。使用了tablayout和viewpager配合,切换fragment,整体风格类似于网易云音乐。 用到的豆瓣API有热映榜、top250、搜索图书、搜索音乐,等。 yasea GitHub地址https://github.com/begeekmyfriend/yasea 带美颜滤镜的 Android 直播推流开源客户端项目,通过手机摄像头和麦克风采样,编码为H.264和AAC,再封装FLV格式,推送至RTMP服务器。延迟达到毫秒级别。 Coding-Android GitHub地址https://github.com/Coding/Coding-Android 编译环境 Android Studio 2.2.3,用gradle引用的许多第三方库,第一次加载会有点慢,加载完毕后要build一下,这些待下划线的类(比如 MainActivity_)会在build之后自动生成。 包说明 common 基类和工具类 comment 评论区 enter 输入框 network 对网络做了一点封装 photopick 图片多选控件 umeng 封装了umeng hide 进入staging界面 maopao 冒泡界面 message 消息界面 model 一些数据结构 project 我的项目界面 setting 设置界面 task 我的任务界面 third 一些第三方代码 user 好友界面 Sprayscape GitHub地址https://github.com/googlecreativelab/Sprayscape 原文https://www.diycode.cc/projects/googlecreativelab/SprayscapeSprayscape内置于Unity,支持原生Android。使用适用于Unity的Google VR SDK处理陀螺仪数据和使用NatCam Unity插件进行精确的相机控制,Sprayscape将相机输入映射到360度球体上。GPU使一切成为可能。在用户点击或触摸时,相机进给以每秒60帧的纹理渲染。然后,通过GPU上的片段着色器将该纹理与任何现有纹理合成。同样的着色器还处理从2D相机到360球体的投影,创建您在app中看到的景观。当用户保存景观时,平面全景图像存储在应用数据中并写入包含所有景观的单个图集文件。地图集被加载到景观中,带有陀螺仪导航的景观画廊。共享由原生Android代码处理。当用户通过链接共享景观时,用户将使用Google OAuth登录并提示您在云端硬盘上进行读写访问。所有用户生成的内容都存储在用户的云端硬盘帐户中,因此用户可以随时删除其内容。有了适当的权限,Drive API v3会检查Sprayscape文件夹,如果缺少,则创建一个,然后上传文件。共享URL在“本机共享”对话框中呈现给用户,并且还附加到应用程序上的scape对象,以便日后轻松共享。Facebook的份额也是本地处理的。全景图被准备为具有适当EXIF数据的图像对象,以确保在Facebook上正确呈现,然后通过原生共享呈现给用户。用户选择Facebook分享到他们的网络。 ListenerrMusicPlayer GitHub地址https://github.com/hefuyicoder/ListenerMusicPlayer 一款优雅的遵循 Material Design 的开源音乐播放器,UI参考 腾讯轻听 音乐播放器,使用 Lastfm Api 与 酷狗歌词Api。项目架构采用 mvp-clean,基于 Retrofit2 + Dagger2 + Rxjava + RxBus + Glide。 项目特点 遵循 Material Design 规范,界面清新,交互优雅。 基于 MVP-CLEAN + Retrofit2 + Dagger2 + Rxjava + Glide 功能模块: 我的歌曲、我的歌单、文件夹、我喜欢、最近播放、最近添加、播放排行、本地搜索等。 支持显示歌词及缓存 支持耳机线控播放,耳机拔出自动暂停 动态刷新媒体库,及时获知媒体文件变更 日夜间模式切换,支持动态换肤 阅读更多 面试官:请你介绍一下你的项目经验 Google费尽心力推出了一个新的项目架构 Android 应用防止被二次打包指南 NDK项目实战—高仿360手机助手之卸载监听 (Android)面试题级答案(精选版) 相信自己,没有做不到的,只有想不到的 在这里获得的不仅仅是技术!

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

用户登录
用户注册