文章目录 01 需求场景02 分别建立.env文件03 指定当前的环境04 在代码中加载对应的环境变量文件 01 需求场景 在Python项目中,环境变量的配置通常会使用.env文件进行,但有时,我们的一个Python项目需要区分不同的运行环境,例如本地开发环境、测试环境、开发环境。本文就讲讲如何做多环境的配置。
假设我们有三个环境:dev, test, pro。分别对应本地开发环境、测试环境、生产环境,这些环境中有的环境变量是相同的,有的是每个环境特有的。
02 分别建立.env文件 创建四个.env文件,分别是:
.env 存放通用的环境变量.env.dev 对应开发环境,存放开发环境中特有的环境变量.env.test 对应测试环境.env.pro 对应生产环境 03 指定当前的环境 一种方式是在Linux系统中编辑~/.bashrc文件来设置环境变量:
vim /root/.bashrc # 写入:ENV_STATE=test # 保存并退出后刷新 source ~/.bashrc 如果是使用.gitlab-ci.yml,可以这样设置:
# .gitlab-ci.yml ... workflow: rules: - if: $CI_COMMIT_BRANCH == 'dev' # 测试环境runner variables: DEPLOY_VARIABLE_TAG: "..." ENV_STATE: "test" # 添加这一行添加环境状态为test when: always - if: $CI_COMMIT_BRANCH == 'main' # 生产环境runner variables: DEPLOY_VARIABLE_TAG: "..." ENV_STATE: "pro" # 添加这一行添加环境状态为pro when: always - when: never # 在上述两种情况之外 never .
一、前言
在日常工作中,如果涉及到与第三方进行接口对接,有的会使用WebService的方式,这篇文章主要讲解在.NET Framework中如何调用WebService。
1.创建WebService
(1)新建项目——模板选择ASP.NET Web 应用程序
(2)选择空项目模板
(3)右击项目-添加-Web服务(ASMX)
(4)新建后会自动生成一个测试服务HelloWorld并返回执行字符串
(5)点击运行,并调用返回
二、方法一:静态引用
这种方式是通过添加静态引用的方式调用WebService
1.首先创建一个Winform程序,右击引用-添加服务引用。地址即为 运行的WebService地址,命名空间可自命名
2.设计Winform窗体,可选择工具箱button调用,TextBox入参
3.根据所需,调用WebService服务即可拿到返回参数
三、动态调用
上面使用静态引用的方式调用WebService,但是这种方式有一个缺点:如果发布的WebService地址改变,那么就要重新添加WebService的引用。如果是现有的WebService发生了改变,也要更新现有的服务引用,这需要把代码放到现场才可以。
使用动态调用WebService的方法可以解决该问题。
1.我们在配置文件里面添加配置,把WebService的地址、WebService提供的类名、要调用的方法名称,都写在配置文件里面
2.同样设计Winform界面,添加按钮,调用WebService服务
添加帮助类
using System; using System.CodeDom.Compiler; using System.CodeDom; using System.Collections.Generic; using System.IO; using System.Linq; using System.Net; using System.Text; using System.Threading.Tasks; using System.Xml.Serialization; using System.Web; using System.Xml.Serialization; using System.Web.Caching; using System.Web.Services.Description; namespace ApiTest1 { internal class WebServiceHelper { /// <summary> /// 生成dll文件保存到本地 /// </summary> /// <param name="url">WebService地址</param> /// <param name="
9.WilliamChart
绘制图表的库,支持LineChartView、BarChartView和StackBarChartView三中图表类型,并且支持 Android 2.2及以上的系统。
项目地址:https://github.com/diogobernardino/WilliamChart
Demo地址:https://play.google.com/store/apps/details?id=com.db.williamchartdemo
Demo项目:https://github.com/diogobernardino/WilliamChart/tree/master/sample
10.实现滑动ViewPager渐变背景色
项目地址:https://github.com/TaurusXi/GuideBackgroundColorAnimation
11.Euclid
用户简历界面,Yalantis 出品。
项目地址:https://github.com/Yalantis/Euclid
12.InstaMaterial
Instagram的一组Material 风格的概念设计
项目地址:https://github.com/frogermcs/InstaMaterial
13.SpringIndicator
使用bezier实现粘连效果的页面指示
项目地址:https://github.com/chenupt/SpringIndicator
14.BezierDemo
仿qq消息气泡拖拽消失的效果。
项目地址:https://github.com/chenupt/BezierDemo
15.FoldableLayout
折叠的信纸被打开一样的动画效果
项目地址:https://github.com/alexvasilkov/FoldableLayout
16.Taurus
下拉刷新,Yalantis 出品。(是不是有点似曾相识呢?)
项目地址:https://github.com/Yalantis/Taurus
17.PersistentSearch
在点击搜索的时候控件在原有位置显示输入框。
项目地址:https://github.com/Quinny898/PersistentSearch
18.circular-progress-button
带进度显示的Button
项目地址: https://github.com/dmytrodanylyk/circular-progress-button
19.discrollview
当上下滚动的时候子元素会呈现不同动画效果的scrollView,网页上称之为:视差滚动
项目地址: https://github.com/flavienlaurent/discrollview
20.sweet-alert-dialog
一个带动画效果的自定义对话框样式
项目地址:https://github.com/pedant/sweet-alert-dialog
21.android-floating-action-button
Material Desig风格的浮动操作按钮
项目地址:https://github.com/futuresimple/android-floating-action-button
22.android-collapse-calendar-view
可以在月视图与周视图之间切换的calendar控件
项目地址:https://github.com/blazsolar/android-collapse-calendar-view
23.NumberProgressBar
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加V获取:vip204888 (备注Android)
结尾 我还总结出了互联网公司Android程序员面试涉及到的绝大部分面试题及答案,并整理做成了文档,以及系统的进阶学习视频资料分享给大家。
(包括Java在Android开发中应用、APP框架知识体系、高级UI、全方位性能调优,NDK开发,音视频技术,人工智能技术,跨平台技术等技术资料),希望能帮助到你面试前的复习,且找到一个好的工作,也节省大家在网上搜索资料的时间来学习。
本文已被CODING开源项目:《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》收录
一个人可以走的很快,但一群人才能走的更远。如果你从事以下工作或对以下感兴趣,欢迎戳这里加入程序员的圈子,让我们一起学习成长!
AI人工智能、Android移动开发、AIGC大模型、C C#、Go语言、Java、Linux运维、云计算、MySQL、PMP、网络安全、Python爬虫、UE5、UI设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算
AI人工智能、Android移动开发、AIGC大模型、C C#、Go语言、Java、Linux运维、云计算、MySQL、PMP、网络安全、Python爬虫、UE5、UI设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算
震惊 java一个大坑, 被老板约谈了。 引言 在Java 8中,Stream API引入了许多强大的函数式编程特性,极大地增强了我们对集合数据进行操作的能力。其中一个很有用的方法就是peek(),本文将详细介绍其功能及应用场景。
peek() 方法简介 peek() 是Java 8 Stream API中的一个中间操作方法,它的主要功能是对流中的每个元素执行一个操作(可以是获取、修改或打印等),而不影响流的整体处理流程。这意味着即使使用了peek(),流也可以继续进行后续的映射、过滤或其他操作。
<T> Stream<T> peek(Consumer<? super T> action); 参数action是一个Consumer接口的实现,它接受一个泛型参数T,并对其执行某种操作。
示例一:简单使用 peek() 打印元素() import java.util.Arrays; import java.util.List; import java.util.stream.Stream; public class PeekExample { public static void main(String[] args) { List<String> addrList = Arrays.asList("AAA"); addrList.stream() .filter(Objects::nonNull) .peek(info -> { System.out.println("Processing Element: " + info); }).collect(Collectors.toList()); // 输出:Processing Element: AAA } } 在这个例子中,我们首先创建了一个包含一个元素"AAA"的列表,并将其转换为流。随后使用filter()方法去除可能存在的空元素(在此例中其实无需过滤,因为已知元素不为空)。关键在于peek()方法的应用,它接收一个lambda表达式,每当流中的元素被访问时,就执行该表达式,从而实现了打印当前处理元素的功能。
有坑的点:删除流终止操作,将会不执行。 import java.util.Arrays; import java.util.List; import java.util.stream.Stream; public class PeekExample { public static void main(String[] args) { List<String> addrList = Arrays.
一、背景 在默认情况下,MySQL是大小写敏感的。这意味着在查询表名、列名或关键字时,必须精确匹配大小写。然而,在某些情况下,我们可能希望数据库忽略大小写,以便更方便地进行操作。
一、查看当前设置 show variables like ‘%lower%’;
说明:
lower_case_table_names 这个参数:
0: 表示区分大小写
1:表示不区分大小写
我截图的部分,已经设置好1了,所以是不区分大小写的 。
如果,你查看的是0的话,改如何进行配置呢?请接着看下面的文章。
二、临时修改设置 在MySQL中,可以通过设置,lower_case_table_names 参数来临时配置大小写无关。
该参数控制了数据库对象(表名、列名、索引等)的大小写处理方式。
默认情况下,lower_case_table_names 参数的值为0,表示大小写敏感。要将大小写处理方式修改为忽略大小写,可以将 lower_case_table_names 参数的值设置为1。
设置方法如下:
-- 引用形式的描述信息:修改lower_case_table_names参数,使数据库对象的大小写处理方式变为忽略大小写
SET GLOBAL lower_case_table_names = 1 注意:这种配置方式,只对当前会话有效。当mysql重启时,配置将修改为默认值。 所以,如果想设置为永久生效的话,接着往下看。
三、永久修改设置 这种方式是,修改mysql的配置文件。一般在/etc/my.cnf文件中,找到[mysqld]部分,在后面追加如下内容:
[mysqld] lower_case_table_names = 1 修改后,保存。然后重启mysql服务器。
之前一直用的mysql5.7,最近导入一个项目一直报错,经查阅发现数据库mysql版本太老,今天特地重头下载安装配置一下,做个记录供大家参考。
下载安装包: 下载地址:https://dev.mysql.com/downloads/
进入后选择:直接 下载第一个 点这里 ,直接 下载
安装配置 解压安装包
我这里解压到d盘,(建议 大家自己单独配置一个文件夹来放置各种环境变量工具 )
编写MySQL配置文件
打开文件,在解压目录下新建my.ini文件
将下面这段配置信息拷贝进my.ini文件中
注意:大家设置ini文件的时候注意路径别弄错
# 设置mysql的安装目录 ----------是你的文件路径-------------
# 设置mysql数据库的数据的存放目录 ---------是你的文件路径data文件夹自行创建
[mysqld] # 设置3306端口 port=3306 # 设置mysql的安装目录 ----------是你的文件路径------------- basedir=D:\Environment\mysql-8.0.36 # 设置mysql数据库的数据的存放目录 ---------是你的文件路径data文件夹自行创建 datadir=D:\Environment\mysql-8.0.36\data # 允许最大连接数 max_connections=200 # 允许连接失败的次数。 max_connect_errors=10 # 服务端使用的字符集默认为utf8mb4 character-set-server=utf8mb4 # 创建新表时将使用的默认存储引擎 default-storage-engine=INNODB # 默认使用“mysql_native_password”插件认证 #mysql_native_password default_authentication_plugin=mysql_native_password [mysql] # 设置mysql客户端默认字符集 default-character-set=utf8mb4 [client] # 设置mysql客户端连接服务端时默认使用的端口 port=3306 default-character-set=utf8mb4 初始化MySQL数据库
以管理员身份打开命令提示符,切换到bin目录下
这里如果不已管理员身份会报错,操作被denied:
Install/Remove of the Service Denied! 以管理 员身份打开命令行客户端的简便方法:直接在Windows开始处,鼠标右键即可 !
下列代码结果为 true 的是? A. Symbol.for(‘a’) === Symbol.for(‘a’)
B. Symbol(‘a’) === Symbol(‘a’)
C. NaN === NaN
D. {} === {}
根据如下变量,下列表达式中返回值为true的是 var a = 1;
var b = [];
var c = ‘’;
var d = true;
A. (a || b) === true
B. (b && c) === true
C. (c && d) === true
D. (d || a) === true
1==true的返回值是true,这句话是否正确? A. T
B. F
下面代码输出为true的是? A. console.log([] === []);
前言 关于Canal的介绍及原理不在此赘述,可自行查阅。笔者在使用Canal同步Mysql实时操作记录至RabbitMQ的过程中,也翻阅了一些大牛们的文章,可能是我使用的Canal版本与文中版本不一致,出现了一些问题,在此总结记录一下可行的方案。
注:本文使用的Canal为 v1.1.7
一、Mysql数据库开启bin_log 先查看目标数据库是否开启bin_log SHOW VARIABLES LIKE 'log_bin' 如结果中,log_bin的值为OFF则未开启,为ON则已开启。
如未开启,可编辑Mysql配置文件:/etc/my.cnf。 [mysqld] log-bin=mysql-bin # 开启binlog binlog-format=ROW # 选择ROW模式 server_id=1 # 配置MySQL replaction需要定义,不和Canal的slaveId重复即可 重启MySQL ,再次通过上一步查看配置是否生效。
二、数据库创建新用户 创建专用于数据同步的新用户 -- 创建一个新用户,名称可自行定义 create user canal@'%' IDENTIFIED by 'canal'; -- 为新用户授权 GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT,SUPER ON *.* TO 'canal'@'%'; -- 刷新缓存中的用户数据 FLUSH PRIVILEGES; 三、配置RabhitMQ 以下使用的名称均可自行定义,保证唯一即可
1. 添加交换机 2. 添加队列 3. 绑定交换机与队列,设置 Routing key 四、下载、配置、运行Canal(windows环境) 1. 下载服务端 可到以下地址下载所需版本的包:github-alibaba-canal
本文使用较新的 v1.1.7 。
选择下载 canal.
前言 今天换了新的电脑,需要重新安装python和PyCharm,就简单的写个教程吧~
一、Python下载 1、进入Python官网
官网地址:https://www.python.org
2、点击【Downloads】展开后点击【Windows】跳转到下载python版本页面,选择"Stable Releases"稳定版本,我下载的是Python 3.10.10版本,所以找到【Python 3.10.10-Feb.8,2023】 版本,点击【Download Windows installer(64-bit)】下载Windows64位操作系统。
【Stable Releases】:稳定发布版本,指的是已经测试过的版本,相对稳定。
【Pre-releases】:预发布版本,指的是版本还处于测试阶段,不怎么稳定。
【Windows embeddable package】:Windows可嵌入程序包,通俗一点就是一个压缩包。
【Windows help file】:指的是帮助文档,可无视,对于小白帮助不了什么。
如果不知道自己是多少位操作系统,按一下Windows键找到“设置”→“系统”→“关于”→“系统类型”可查看自己是多少位操作系统。
3、正在下载
二、Python安装 1、下载完后双击打开Python,勾选【Add python.exe to PATH】,点击【Customize installation】进行自定义安装。
【Install Now】:立即安装,点了会默认安装python的位置与默认勾选python功能
【Customize installation choose location and features】:自定义安装选择位置和功能。
【Use admin privileges when installing py.exe】: 安装py.exe时使用管理员权限,勾选这个是为了程序或者命令运行过程中更改系统设置或则注册表,如果没勾选,那你就只能以普通用户的身份进行读的权限,没有改的权限,也就没法完成更改操作。
【Add python.exe to PATH】:将python.exe添加到PATH,就是把python的路径添加到PATH环境变量中。
2、所有功能全部默认勾选,单击【Next】下一步。
【Documentation】:安装Python文档文件。
【pip】:安装pip,这个是一个安装和管理Python包的工具,就是以后你可以通过Win+R输入cmd回车,然后输入pip install+包名下载相应的python模块。
【tcl/tk and IDLE】:安装tkinter和IDLE开发环境。
【Python test suite】:安装标准库测试套件。
【py launcher】: Python启动器。【for all user】所用用户(需要管理员权限)两个一起勾选后会安装全局Python启动器,使启动Python变得更容易。
3、创建桌面快捷方式根据自己的需求勾选,其他两个默认勾选不进行改动,点击【Browse】按钮修改安装路径,我的是安装在D盘里的Python文件里,然后单击【Install】进行安装。
【Associate files with Python】:将文件与Python关联。
【Create shortcuts for installed applications】:为已安装的应用程序创建快捷方式。
学生信息CRUD——添加、修改、删除 在上一小节中,我们写好了list.jsp,用一个table表格显示数据库student表中的各个学生的(学号,姓名,生活费,出生日期),并对表格每一行的数据都配有三个操作按钮——删除、修改、增加。
<td> <a href="del_success.jsp?sid=<%= rs.getObject("sid") %>" class="btn btn-danger" >删除</a> <a href="upd.jsp?sid=<%= rs.getObject("sid") %>>" class="btn btn-primary">修改</a> <a href="add.jsp" class="btn btn-success">添加</a> </td> 此处,讨论add.jsp与upd.jsp页面内容该如何呈现。
一、添加学生页面add.jsp 使用到的标签 1.form标签
表单在网页中主要负责数据采集功能。HTML中的标签,就是用于采集用户输入的信息,并且通过标签的提交操作,把采集到的信息提交到服务器端进行处理。
一个完整的表单应该由3部分组成:表单标签、表单域(输入框)、提交按钮。
<form>表单标签 <input type="text">表单域 <button type="submit">提交按钮</button > </form> 2.form标签属性
action:发送数据的地址name:表单名称method:提交方式 Get:提交的数据url可以看到,用于提交少量数据Post:提交的数据url看不到,用于提交大量数据 <form action="#" name="login" method="POST"></form> 3.input标签
type属性值说明text文本框,用于输入单行文本password密码框radio单选框checkbox多选框file上传文件date日期选择框 value的作用: 预先填充表单中的字段值,方便用户进行编辑或提供默认值;方便以后将这些值传递给服务器进行处理。 4.下拉菜单select option
注意:如果需要设置默认选中,则需要添加selected属性值。
下拉菜单: <select> <option>广州市</option> <option>海珠区</option> <option>荔湾区</option> <option selected>增城区</option> <option>越秀区</option> </select> 注:上次说过的标签,如table、tr、td等,此处不再说明。
页面主要内容 与之前“显示学生信息”不同,此处需要将数据提交给服务器,因此需要使用<form>标签来设计整体框架。
在form表单之内,显示的是一个<table>表格,包含每行<tr>,每行中的表项<td>,表项当中的<input>输入框,最终的提交按钮等。
head内容 与list.jsp同样,head的内容也包含两部分。
<head> <title>添加学生信息</title> <link href="../css/bootstrap.css" rel="stylesheet"> </head> body内容 1.
Java 程序员们开年就有重磅好消息,《Effective Java 中文版(原书第 3 版)》要上市啦!
该书的第1版出版于 2001 年,当时就在业界流传开来,受到广泛赞誉。时至今日,已热销近20年,本书第 3 版已是 Java 程序员的必读神书,被誉为“Java 四大名著之一”,甚至连 Java 之父高司令(James Gosling) 都说:“如果说我需要一本 Java 编程的书,那就是它了。”
在豆瓣平台上,原书第 3 版获得了高达 9.7 的评分,读者们纷纷表达了对这本书的敬意。有读者留言说“Java 程序员分两种,读过《Effective Java》的和没读过的,严格来说,没读过的不算是Java程序员。”
为了帮助更多国内程序员学习这部神作,在经过精心翻译校对之后,《Effective Java 中文版(原书第 3 版)》保持了原著的高水准,将带领 Java 程序员展开经典之旅。
首发价 5折,限200人
市面上学习 Java 的书汗牛充栋,Java 技术也在不断发展变化,为什么这本神作却能畅销20多年?
01
Jolt 大奖神作 《Effective Java》在 2001 年就一举夺得当年度的 Jolt 大奖,这项“软件业界的奥斯卡奖”就是对这本书的价值,以及对作者 Joshua Bloch 超强技术功力的最好肯定。
本书结构独具匠心,一个关键知识点就是一条单独条目,在有些条目内也会交叉引用其他条目的知识,从而缀点成线,形成知识的网络。从第 1 版的 57 个条目扩展到第 2 版的 78 个条目,直至第 3 版达到了 90 条。
这些条目是作者总结出来的特定规则,并精心编写了代码示例,是为了帮助程序员改进程序和设计。所以对于有一些 Java 编程经验,却又不知如何提升代码水准的读者来说,这本书是 Java 编程的最佳实践指导。
我们日常工作中可能会在多个项目工程中来回切换,每个项目依赖的jdk版本也可能高低不同,这样会出现jdk版本高低的不兼容,工程代码编译不过,无法本地运行等问题。
那么能不能在一台电脑上装多个版本的jdk呢?多个jdk版本是否可以灵活切换呢?
答案是 可以的!
接下来就介绍Mac上的安装配置流程
1、确认是否已经有jdk 打开终端控制台,执行下面命令,查看是否有已下载好的jdk包
➜ ~ cd /Library/Java/JavaVirtualMachines ➜ JavaVirtualMachines~ ls adoptopenjdk-11.jdk jdk-17.jdk jdk1.8.0_202.jdk 2、下载指定版本jdk 点击这个网址下载:
https://www.oracle.com/java/technologies/downloads/
选择要下载的版本和操作系统,点击下载即可
3、安装jdk 下载好后,无脑一直点击下一步,完成安装即可
4、配置jdk环境 执行第一步的命令,可以看到,我已经下载好了jdk1.8,jdk11,jdk17三个版本,接下来进行环境配置。
执行下面命令,打开 .zshrc 文件修改环境变量
➜ JavaVirtualMachines cd ➜ ~ vim ~/.zshrc 修改 .zshrc 文件,按照下面的配置写
# JDK config JAVA_HOME_8=/Library/Java/JavaVirtualMachines/jdk1.8.0_202.jdk/Contents/Home JAVA_HOME_11=/Library/Java/JavaVirtualMachines/adoptopenjdk-11.jdk/Contents/Home JAVA_HOME_17=/Library/Java/JavaVirtualMachines/jdk-17.jdk/Contents/Home # 默认配置是1.8 export JAVA_HOME=$JAVA_HOME_8 alias jdk8="export JAVA_HOME=$JAVA_HOME_8 && echo current JDK has switched to oracle jdk version 1.8. && java -version" alias jdk11="export JAVA_HOME=$JAVA_HOME_11 && echo current JDK has switched to openjdk version 11.
目录
引言
摘要
第二步:打开appuploader工具
第二步:打开appuploader工具,第二步:打开appuploader工具
第五步:交付应用程序,在iTunes Connect中查看应用程序
总结
引言 在将应用程序上架到苹果应用商店之前,开发者需要学习如何上传ipa安装包。本文将介绍使用appuploader工具将ipa安装包上传到苹果应用商店的详细步骤,并提供一些实用的技巧。
摘要 appuploader是一款简单易用的软件,用于向App Store提交应用程序。你可以在苹果电脑上搜索并下载appuploader。
第二步:打开appuploader工具 官网搜索下载appuploder软件以后,双击点开appuploder
第二步:打开appuploader工具,第二步:打开appuploader工具 输入你上架苹果商店的开发者账号密码。选择你需要上架的安装包,点击以后选择交付。(必须要先在iTunes connect上面创建app)
第五步:交付应用程序,在iTunes Connect中查看应用程序 最后上传成功了,会在软件上面显示交付完成,如果安装包有什么问题,appuploder上面会说明安装包的问题具体所在,只要按照被拒内容修改重新上传即可,上传成功以后就会在iTunes connect显示。
总结 以上就是上传ipa安装包到苹果应用商店的步骤。通过使用appuploader工具,开发者可以方便快速地将应用程序上传至App Store,并进行审核和上架。请确保按照苹果的规定和指南进行操作,以确保应用程序能够成功上架。
因业务需要,开发微信支付功能,涉及三种支付方式:
JSAPI 支付:微信内网页支付,需要开通微信服务号小程序支付:在小程序中支付,需要开通小程序H5 支付:在手机浏览器(出微信内网爷)中网页支付 使用微信支付的前提必开通微信商户号,要使用到那种的支付方式要前需在商户平台开通(要审核)。
支付的钱最终都会到商户号里(一般由公司财务开通)。
开发微信支付的过程中大大小小坑还是踩了不少,终于做完了,整理下开发流程。
参考:
微信支付-接入指引微信支付-开发文档 小程序支付 开发流程 小程序端请求创建订单接口,后端统一下单获取 orderId 并返回小程序端获取通过wx.login()获取code小程序端拿这code和orderId请求后端接口,获取支付所需数据获取支付所需数据之后,小程序端调用wx.requestPayment()接口,直接调用起支付页面判断是否支付成功后的逻辑 伪代码 async function wxPay(goodId) { // 1. 创建订单 获取orderId let orderId = await ajax("POST", "/api/OrderProgram/CreateTheOrder", { goodId, // 商品id }); // 2. 获得 code let code = await wxlogin(); // 基于pr封装的wx.login()方法 // 3. 获取支付的数据 let payData = await ajax("POST", "/api/OrderProgram/WxXcxPay", { orderId, code, }); // 4. 发起支付 let res = await payment(payData); // 基于pr封装的wx.requestPayment()方法 // 5.
一、准备工作
1.安装虚拟机
VMware 安装 CentOS 7, 选择mini版,英文,网络NAT。
http://mirrors.aliyun.com/centos/7.9.2009/isos/x86_64/CentOS-7-x86_64-Minimal-2009.iso
vim /etc/sysconfig/network-scripts/ifcfg-ens33 将最后一行修改为 ONBOOT="yes" 重启网络服务, 确保自己能够ping通baidu,如果依旧不行可以直接reboot重启虚拟机
systemctl restart network 查看ip地址
yum install net-tools ifconfig 2. 安装java 环境
yum install java-1.8.* 3.安装scala
yum install https://downloads.lightbend.com/scala/2.12.10/scala-2.12.10.rpm 4.安装screen
yum install screen #新建 screen -S xxx #退出 ctrl + A + D #重连 screen -r #列表 screen -ls 5. 安装wget,vim
yum install wget yum install vim 6.关闭防火墙
systemctl stop firewalld 二、安装Kafka
1. 下载
cd wget https://dlcdn.
文章目录 什么是数据库锁表?数据库锁表可能会导致什么问题?死锁问题的原因分析如何避免数据库锁表?解决死锁问题的常用策略解决死锁问题mysql锁表处理ORACEL数据库锁表处理SQL Server数据库锁表处理 来源 什么是数据库锁表? 答:数据库锁表是指在数据库中,为了保证数据的一致性和完整性,可能会对数据进行加锁,以避免并发操作引起的数据冲突。如果锁定的范围过大或时间过长,可能会导致数据库表被锁定,从而影响系统性能。
数据库锁表可能会导致什么问题? 数据库锁表可能会导致系统性能下降、用户体验不佳、系统崩溃等问题。当数据库表被锁定时,其他用户的查询和操作可能会受到影响,从而导致系统运行缓慢甚至崩溃。
死锁问题的原因分析 事务执行顺序:当多个事务按不同的顺序请求和释放资源时,可能会产生死锁的可能性,这是因为事务的执行顺序无法保证一致性。
例如事务的执行时间过长、事务的锁定范围过大、索引使用不当、SQL语句优化不足等。当出现大量并发操作时,出现竞争资源:当多个事务同时请求和持有相同的资源,如行级锁,表级锁等,可能会导致死锁问题的发生。
如何避免数据库锁表? 减少事务的时间减少事务的范围合理使用索引优化SQL语句分布式事务 解决死锁问题的常用策略 死锁检测和处理:MySQL提供了死锁检测机制,可以通过设置参数innodb_deadlock_detect来启用,当检测到死锁时,可以选择回滚某些事务以解除死锁。但这种方法不能完全避免死锁的发生,而且会增加系统的开销。加锁顺序:通过约定事务对资源的访问顺序,使得所有事务按相同的顺序请求锁定,可以避免死锁的发生。然而,这种方法需要根据具体的业务需求和数据访问模式来设计,且不适用于复杂的场景。降低事务隔离级别:将事务的隔离级别降低至READ
COMMITTED,可以减少死锁的机会。但这也会导致数据一致性的问题,需要在业务层做相应的处理。超时机制:对于长时间持有锁资源的事务,可以设置超时时间,在超时后自动回滚事务,以避免死锁的发生。这种方法需要谨慎设置超时时间,避免正常事务被错误回滚。优化SQL语句优化表结构和索引分库分表引入缓存等技术 解决死锁问题 mysql锁表处理 查看进程id,然后用kill id杀掉进程
processlist展示了对应的数据库有哪些线程在运行,如果有些语句执行速度慢,可以在里面看到
show processlist; 根据不同的账号权限可以看到所有用户的,当前用户的对应的连接。只有100条
show full processlist: 展示所有的连接数据
SELECT * FROM information_schema.PROCESSLIST; 查询正在执行的进程
SELECT * FROM information_schema.PROCESSLIST where length(info) >0 ; 字段说明
ID 连接标识符,这个ID和show processlist 中ID是一样的,也和Performance Schema 中threads表的PROCESSLIST_ID 栏位是一样的,也和CONNECTION_ID()函数返回的是一样的
USER 连接的用户,其中system user代表系统用户,非用户连接,unauthenticated user代表是用户连接,但是未完成认证,event_scheduler 用户代表的是监控定时任务的用户
HOST 连接的主机名,如果用户是system user,则HOST为空
DB 连接的数据库,如果未选择数据库,则为NULL
COMMAND 线程执行的命令类型
TIME 线程在当前状态持续的时间,以秒为单位
STATE 线程当前的状态,如果该状态持续很久,说明有问题,如果是SHOW PROCESSLIST 命令,则状态为NULL
INFO 线程执行的具体命令,如果执行的是call procedure,这里可能显示的是内容的语句,如select
Web 后台项目,权限如何定义、设置、使用:菜单权限、按钮权限 ts element-ui-Plus 做一个后台管理项目,里面需要用到权限管理。这里说一下权限定义的大概,代码不多,主要讲原理和如何实现它。
一、权限管理的原理 权限管理分三个部分:
接口的访问权限:
这个后台去做就好了,前边只需要配置。菜单的访问权限,展示给特定用户的菜单是哪样的
这个需要前端设置,后台再返给你过滤后的菜单。界面中的一些操作按钮
这个是跟菜单走的,需要前端在界面的每个操作按钮上添加 v-if 判断,这里的权限就是个字符串。一个自定义的表示的字符串,用户有这个字符串就显示,没有就不显示。 这些权限是定义在角色上的,再给用户分配一些特定的角色即可。
二、实现 1. 接口权限 后端去实现,前端只需要提示可设置的操作流程即可
这里可以用 el-transfer 插件进行操作,会比较方便
2. 菜单权限 菜单权限只需要编辑哪些菜单可见就行。
3. 按钮权限 按钮权限是这里面比较麻烦的,但也不是很麻烦。
首先你需要在菜单定义中添加这个按钮,并添加这个按钮的权限标识,
比如 user:btn:add 表示 User 列表中的添加按钮,这个标识你可以随心定义,尽可能的简单且表义。
用户组设置菜单权限的时候也同步设置按钮权限
在页面中判断按钮是不是显示:
从登录后的菜单列表中获取所有的标识字符串列表,制作成 set 好供后面使用。 /** * 递归获取所有菜单权限 * @param menuTree * @return Array<string> */ function getPermissionArrayFromMenuTree(menuTree: Array<MenuEntity>): Array<string>{ let tempPermissionArray: Array<string> = [] menuTree.forEach(item => { if (item.children?.length > 0){ tempPermissionArray = tempPermissionArray.concat( getPermissionArrayFromMenuTree(item.children)) } else { if (item.
如需完整项目,请私信博主
基于Pytorch的人脸识别及人像卡通化算法设计与实现综述
一、引言
随着深度学习技术的飞速发展,人脸识别与人像卡通化作为计算机视觉领域的两大重要应用,近年来受到了广泛关注。基于Pytorch的人脸识别技术通过构建深度学习模型,实现对人脸特征的提取与比对,从而完成身份识别任务。而人像卡通化算法则利用神经网络将真实的人脸图像转换为具有卡通风格的图像,为用户提供了丰富多样的视觉体验。本文将综述基于Pytorch的人脸识别及人像卡通化算法的设计与实现过程。
二、基于Pytorch的人脸识别算法设计与实现
人脸识别算法通常包括人脸检测、特征提取和特征比对三个关键步骤。在Pytorch框架下,我们可以利用预训练的神经网络模型来完成这些任务。
首先,人脸检测是识别过程的第一步,其目标是从输入图像中定位出人脸区域。常用的方法包括MTCNN、YOLO等,这些算法能够准确地检测出人脸的位置和大小。
接下来,特征提取是人脸识别的核心环节。在Pytorch中,我们可以使用深度卷积神经网络(CNN)来提取人脸特征。这些网络经过大量人脸数据的训练,能够学习到人脸的深层特征表示。通过将人脸图像输入到网络中,我们可以得到对应的特征向量。
最后,特征比对是将提取到的人脸特征与注册库中的人脸特征进行比对,以判断其身份。这通常通过计算特征向量之间的相似度来实现,常用的相似度度量方法包括余弦相似度、欧氏距离等。
三、基于Pytorch的人像卡通化算法设计与实现
人像卡通化算法的目标是将真实的人脸图像转换为具有卡通风格的图像。在Pytorch框架下,我们可以利用生成对抗网络(GAN)等深度学习模型来实现这一任务。
首先,我们需要构建一个能够学习真实人脸到卡通人脸映射的神经网络模型。这通常包括一个生成器网络和一个判别器网络。生成器网络负责将输入的人脸图像转换为卡通风格的图像,而判别器网络则用于判断生成的卡通图像是否真实。
在训练过程中,我们通过优化生成器网络和判别器网络的参数,使得生成器能够生成更逼真的卡通图像,同时判别器能够更准确地判断图像的真实性。这通常通过交替训练生成器和判别器来实现。
最终,经过训练的生成器网络可以用于将任意的人脸图像转换为卡通风格的图像。用户只需将人脸图像输入到网络中,即可得到对应的卡通化结果。
四、总结与展望
本文综述了基于Pytorch的人脸识别及人像卡通化算法的设计与实现过程。通过利用深度学习技术和神经网络模型,我们能够实现对人脸的准确识别以及将人脸图像转换为卡通风格的图像。这些技术为计算机视觉领域的发展提供了有力支持,并为用户提供了更加丰富多样的视觉体验。
未来,随着深度学习技术的不断进步和新的神经网络模型的出现,我们可以期待人脸识别和人像卡通化算法的性能将得到进一步提升。同时,我们还可以探索将这两种技术与其他计算机视觉任务相结合,以实现更广泛的应用和更高级的功能。
项目描述
人像卡通风格渲染的目标是,在保持原图像ID信息和纹理细节的同时,将真实照片转换为卡通风格的非真实感图像。我们的思路是,从大量照片/卡通数据中习得照片到卡通画的映射。一般而言,基于成对数据的pix2pix方法能达到较好的图像转换效果,但本任务的输入输出轮廓并非一一对应,例如卡通风格的眼睛更大、下巴更瘦;且成对的数据绘制难度大、成本较高,因此我们采用unpaired image translation方法来实现。
Unpaired image translation流派最经典方法是CycleGAN,但原始CycleGAN的生成结果往往存在较为明显的伪影且不稳定。近期的论文U-GAT-IT提出了一种归一化方法——AdaLIN,能够自动调节Instance Norm和Layer Norm的比重,再结合attention机制能够实现精美的人像日漫风格转换。
与夸张的日漫风不同,我们的卡通风格更偏写实,要求既有卡通画的简洁Q萌,又有明确的身份信息。为此我们增加了Face ID Loss,使用预训练的人脸识别模型提取照片和卡通画的ID特征,通过余弦距离来约束生成的卡通画。
此外,我们提出了一种Soft-AdaLIN(Soft Adaptive Layer-Instance Normalization)归一化方法,在反规范化时将编码器的均值方差(照片特征)与解码器的均值方差(卡通特征)相融合。
模型结构方面,在U-GAT-IT的基础上,我们在编码器之前和解码器之后各增加了2个hourglass模块,渐进地提升模型特征抽象和重建能力。
由于实验数据较为匮乏,为了降低训练难度,我们将数据处理成固定的模式。首先检测图像中的人脸及关键点,根据人脸关键点旋转校正图像,并按统一标准裁剪,再将裁剪后的头像输入人像分割模型去除背景。
### 安装依赖库
项目所需的主要依赖库如下:
python 3.6pytorch 1.4tensorflow-gpu 1.14face-alignmentdlib 训练 1.数据准备
训练数据包括真实照片和卡通画像,为降低训练复杂度,我们对两类数据进行了如下预处理:
检测人脸及关键点。根据关键点旋转校正人脸。将关键点边界框按固定的比例扩张并裁剪出人脸区域。使用人像分割模型将背景置白。 python data_process.py --data_path YourPhotoFolderPath --save_path YourSaveFolderPath
2.训练
重新训练:
python train.py --dataset photo2cartoon 加载预训练参数:
python train.py --dataset photo2cartoon --pretrained_weights models/photo2cartoon_weights.pt
目录
一、概述
二、常用参数使用
2.1 nmcli networking
1.显示NM是否接管网络
2.查看网络连接状态
3.开/关网络连接
2.2 general
编辑
1.显示系统网络状态
2.显示主机名
3.更改主机名
2.3 nmcli connection
编辑1.显示所有网络连接
2.显示某个网卡的详细信息
3.启动/关闭指定连接
4.修改
5.新增连接
6.删除连接
7.重载
8.监控连接
2.4 nmcli device
编辑1.显示所有网络接口设备状态
2.显示所有设备详细信息
3.连接设备
4.断开
5.更新设备
一、概述 以往我都是在linux的系统中都是通过配置文件来配置和修改ip的,今天我们就来说一说nmcli命令配置网络。
目前所有的linux系统配置网卡等信息,均已经推行Network-Manager服务去管理。nmcli 是 NetworkManager 的命令行工具。nm 代表 NetworkManager,cli 代表 Command-Line 命令行。
# 查看运行状态 systemctl status NetworkManager # 启动 systemctl start NetworkManager # 重启 systemctl restart NetworkManager # 关闭 systemctl stop NetworkManager # 查看是否开机启动 systemctl is-enabled NetworkManager # 开机启动 systemctl enable NetworkManager 二、常用参数使用 我们可以看help查看参数,man nmcli查看参数详细使用
前言 相信大家都做过图片上传相关的功能,在图片上传的过程中,不知道大家有没有考虑过文件体积的问题,如果我们直接将原图片上传,可以图片体积比较大,一是上传速度较慢,二是前端进行渲染时速度也比较慢,比较影响客户的体验感。所以在不影响清晰度的情况下,前端可以在上传前对图片的大小体积进行压缩,压缩到一个比较合适的大小进行上传,本文就带大家一起来看看前端 JS 如何实现图片压缩,有需要的小伙伴抓紧收藏一下吧!
原理(必看) 省流:主要使用 canvas的 drawImage 方法先绘制为 canvas 图像,再结合 toDataURL 转化为DataURl 进行存储图片链接。
drawImage简单介绍 Canvas 2D API 中的 CanvasRenderingContext2D.drawImage() 方法提供了多种在画布Canvas)上绘制图像的方式。
用法如下:
CanvasRenderingContext2D.drawImage() - Web API 接口参考 | MDN (mozilla.org)
语法如下:
drawImage(image, dx, dy); drawImage(image, dx, dy, dWidth, dHeight); drawImage(image, sx, sy, sWidth, sHeight, dx, dy, dWidth, dHeight); 我们使用第二种进行绘制,参数含义如下:
image:绘制到上下文的元素。
dx:image 的左上角在目标画布上 X 轴坐标。
dy:image 的左上角在目标画布上 Y 轴坐标。
dWidth:image 在目标画布上绘制的宽度。允许对绘制的 image 进行缩放。如果不说明,在绘制时 image 宽度不会缩放。
dHeight:image 在目标画布上绘制的高度。允许对绘制的 image 进行缩放。如果不说明,在绘制时 image 高度不会缩放。