首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

代码写错,差点亏了几万!

这次阿里云服务器,我和小北组队了,因为我们之前 6 月份搞过一次阿里云白领活动,所以担心一个人搞的话,带不到大家白piao,因为当拉新用户到一定数量,阿里云才会给我们奖金,比如 1500 人的奖金是9W...活动最重要,也是最麻烦的环节就是返现环节,这次我们是通过一个链接收集大家支付宝账号,然后进行支付宝批量转账。 但是这个工作看起来很简单,其实有很多东西需要留意的,因为涉及到钱,最基本的要保证幂等性。...这代码完全能正常工作,也能完成返现! 但是!!! 小老弟没有考虑到异常场景,以及应对各种羊毛党或者用户的错误操作 比如说,假如一个用户在填问卷的时候填了多次信息,上面的代码是不是就会导致多次转账?...因为这个订单数据不是实时的,一天导出一次,但是读者随时可能去填表单。 那如果读者今天买今天填写返现表单,但是今晚去处理的时候查不到购买记录没法返现怎么办? 难道让读者明天再填一次?...总之就是为了处理这些异常的 case 以及邮件通知等,我前天晚上下班后到家肝了一波,彻底堵死了这些漏洞,毕竟打工人的钱也不是好赚的~ 从昨晚开始陆续返现, 中间也发现很多之前考虑到的异常 case,也有些异常场景还没考虑到

59120

iOS 史上最全App上架流程分享

大概是19年写的文章吧,当时给Android 同事分享了下iOSApp上架的流程(就是几个人在会议室坐在一起讲课那种类型),并写了个文档保存在公司的内部网站上,今天翻出来了我感觉对新手还是挺有帮助的,就写这一篇...进入您的应用程序,点击“活动”,然后选择“所有构建版本选项”(如下图所示)。这里会显示上传成功的构建版本。如果您的ipa包没有问题,刚上传时会显示“正在处理!”。...如果您没有看到版本,请参阅下面的链接以解决问题。 如何解决成功上传IPA包但iTunes Connect后台没有构建版本的问题。 正常的包会处理一段时间,您可以继续设置您应用程序的其他信息。...副标题:此项可填可不填。 类别:根据您的应用程序类型选择。 5、选择左侧的第二项“价格与销售范围”。 价格时间表:如果您的应用程序是免费的,则将其设置为免费。...打开已安装的应用程序进行真机测试,截取您想展示的应用程序页面(最多可上传10张截图,一般截取3至4张即可)。务必使用苹果手机截图,不能使用Android或浏览器截图!

36520
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    我又开发了一个非常好用的开源库,调试Android数据库有救了

    其实做了Android开发这么多年,一直以来都有一个我认为非常不人性化的地方,就是开发人员没有办法简单直接地查看当前应用程序中的数据库文件,这个问题导致Android数据库的开发与调试工作一直都比较困难...不管使用哪种方式,看上去都不是一件简单的事情。有的时候我在开发过程中遇到一些数据库的问题,一想到要用这么繁琐的步骤才能查看到数据库当中的数据,我宁愿换一种解决问题的思路。...并且我认为,Google早就应该提供这个工具了。 而我新开发的这个开源项目同样也是为了解决这个问题。 最开始想到去做这样一个开源项目,主要是受到LeakCanary的启发。...相比于之前还要想办法导出数据库文件,发送到电脑上,再借助第三方工具进行查看,是不是简单了千百倍?...另外,假如你的数据库文件发生了变化,Glance也可以迅速地感知到。比如我们向当前应用程序的外置存储空间当中添加一个新的数据库文件,如下图所示。 ?

    64441

    Android完美解析setContentView 你真的理解setContentView吗?「建议收藏」

    大家好,又见面了,我是你们的朋友全栈君。 导读: 本篇文章的前半部分为源码分析,后半部分为一个例子,在例子中我们会遇到一些问题,从而回答前半部分留下的问题!...例子: 我们现在就来模拟一个需求,比如用户在MainActivity填写一个表单,这个表单有姓名和电话两个字段,当用户填完之后我们要进行提交,但是在提交之前我们希望有一个确认表单的页面来让用户确认一下信息是否填对...有问题版本 首先我们先来看一个有问题的版本,首先我们进入到填写表单的页面,填写完之后点击提交进入确认表单页面,然后点击重填,发现回来之后姓名栏和手机栏都是空的,然而我们确实在onContentChanged...//如果是第一次启动这个页面,我们判断name和phone是空,所以就不做任何的操作 //如果是从确认表单页面点击重填按钮再次返回到填写表单页面时,我们就将刚刚填过...//如果是第一次启动这个页面,我们判断name和phone是空,所以就不做任何的操作 //如果是从确认表单页面点击重填按钮再次返回到填写表单页面时,我们就将刚刚填过

    1.5K30

    从HelloWorld开始了解Android

    现在项目就已经在手机上运行起来了,这个时候你会想,我明明什么代码都没有打,为什么会有一个Hello World!呢,这时候我们来分析一下Hello World项目吧。...(PS:如果没有看到的话,给我发邮箱,我帮你联系一家好医院,包你满意,破盘价只要998,,咳~扯远了,我们回到主题) 1.布局:RelativeLayout 表示这是一个相对布局, 2.控件:TextView...还有我们的应用程序的图标是通过android:icon属性来指定的,应用的名称则是通过android:label属性来指定的,你会看到一个绿色的机器人(PS:不管你觉得丑不丑,我觉得是挺丑的!)...应用程序模块和库模块的最大区别在于,一个是可以直接运行的,一个只能作为代码库依附于别的应用程序模块来运行。...这篇博客到这里就写完了,我是初学者-study,有什么问题欢迎发送邮件给我,(以上内容未使用过Ctrl + C和Ctrl + V,全是一个一个打出来的,图片也都是自己的,第一个图片为白色,是想给你们看一下初始界面的样子

    1.1K40

    Jetpack Compose:官方终于开始搞事情了

    虽迟但到的 beta 版 我在几个月前得到了 Jetpack Compose beta 版的发布时间,当时说的是「春节后」;事后也得到了「二月中旬」的更精确的确认。...我在前天下班后,趁空写了个参赛作品并做了提交,不出意外的话应该可以获奖(不是我强,而是奖品有 500 份之多)。所以今天就在这里给大家分享一些关于这次比赛的信息。...所以你如果使用过 Compose,你可能会发现这次比赛的题目非常简单,简直就跟白给一样。为什么?...在这个地址:https://services.google.com/fb/forms/androiddevchallenge-week1/ ,你会看到一个表单。把这个表单填完整,作品就提交完成了。...之前我说过,我接下来会有一系列的 Compose 技术视频发布。下一个视频已经在剪了,大约这周三发布。

    1.3K10

    在Typecho任意主题上通过公众号发送说说、碎语、时光机、日记

    前言 去年年底研究完我若为王的文章后,写了一篇操作文章。今年看上去,依旧觉得,复杂了。 于是在这次换了主题后,再次重新折腾一番。能精简的地方,就尽量减少复杂度。...公众号申请 和之前推送评论消息到公众号一样,我们还是测试号。点击微信公众号测试号申请。...而我这边已经修改好,并移除了原handsome时光机评论部分的代码。目前支持所有主题页面,直接下载使用更加简单。...pwd=6b6w 下载压缩包2(wechat),放在一个单独的域名(非博客)下。(因为微信公众号不支持二级目录作为接口地址。) 解压后,执行/install.php安装。 配置数据库。 这里看黑板!...数据库,直接填写你博客的数据库配置。不会覆盖或清空,仅仅增加了一个cross表。当然,还是要常常做好数据备份工作。 填写公众号相关信息/高德Key去官网申请(可以发送地图位置)。

    98420

    创业公司技术总监,去上市公司面试,结果凉了!

    而我长时间在这样的氛围下工作,慢慢也成长为一位偏“全栈”的WEB开发人员,从前端angular,到后端Python,到服务器部署,统统可以一人搞定。...这次我的择业选择比较明确,到大公司去,最好是上市公司。为什么呢? 一是之前都在小公司,想到真正的大公司去体验大公司的工作;二是大公司的上升空间比较大,相对来说也比较稳定。...数据库采用各自独立,但是统一在一个数据库服务器上,并且进行读写分离。 服务器采用分布式+负载均衡 采用单点登录 前端是angular 实际上我在笔试中写得更详细一点,但是大概就这么回事。...HR面 HR问了为什么来厦门,我坦言就业遇到瓶颈,寻求突破。 估计HR看了我的简历,我有多年的管理岗位的经验。于是问了我不少管理上的问题。 例如:如果有人在上班时间炒股票,被你发现你会怎么办?...本次送书 本次送书活动由博文视点介绍赞助! ? 博文视点-品牌商标 《大型网站技术架构演进与性能优化》从一名亲历者的角度,阐述了一个网站在业务量飞速发展的过程中所遇到的技术转型等各种问题及解决思路。

    83310

    Web 应用架构的下一个转变

    变更请求 MPA 变更请求 当用户提交表单时,浏览器会将表单内容序列化为发送到我们服务器的请求,我们的路由逻辑会调用一个函数来更新数据库。...在此之前,保持页面上的数据是最新的从来都不是一个需要考虑的问题,但现在这在我们的客户端代码中占了一半以上。...此外,竞争条件、表单重新提交和错误处理都是隐藏 bug 的好地方; 自定义代码 - 有更多的代码需要管理,而我们以前不必编写这些代码。...如果我们能够以某种方式将 SPA 和 MPA 合并到一个体系结构中,获得两者的优点,那么我们就有希望得到既简单功能又强大考虑到渐进式增强,即使没有客户端 JavaScript,基线也是一个功能性应用程序...从2014年起,每年都会写一篇年度总结,已经坚持写了8年,点击查看年度总结。 同时,最近组织了源码共读活动,帮助5000+前端人学会看源码。公众号愿景:帮助5年内前端人走向前列。

    1.2K10

    案例 | 全棉时代:麦客助我练细心,服务女性用户更周到

    出乎我意料的是,麦客的操作真是很简单,拖拽也挺好玩,我很快就做了一个调查问卷。发出去后,收回来的反馈还能形成图表,一目了然,并且导出的execl表也非常美观。...说个之前的原始状态你们就懂了: 记得在很久之前,那时候还没有使用麦客,我们做了场微信活动,1万多粉丝参与,最后需要评选出1000名幸运者发奖品,当时的做法是让粉丝将收奖信息(姓名、手机、地址)发到官方微信后台...如果那时用到麦客表单,就能变得简单多了——只需推送给幸运粉丝一个麦客链接,他们在表单里填写就好啦,我这边统计信息就格式统一,还能持续保存。...有一天,我看见有来宾开着车窗淋着雨伸手在填岗亭处的访客信息表,我就在想,这明明也可以用麦客表单来实现嘛。我们做个来访登记表,把二维码贴在大门处,现在大家就可以坐在车里就填写了。...现在连公司产品的内部评审基本都用麦客表单来完成,总裁对这种方式非常赞赏。 现在我天天和大量的女性用户打交道,想问题也更细致了,有时设计的表单也越来越有女人味,有同事笑言我这个大叔越来越少女了。

    57590

    Android-浅谈广播机制,实现强制下线功能

    顾名思义,广播就像我们上学的时候每个班级里的喇叭一样,这些喇叭都是接入到学校的总的一个地方,比如说广播室啊什么的。一旦有什么通知,就会播放一条让全校师生都知道的广播。...强制下线的功能思路也比较简单,只需要在界面上弹出一个地画框,让用户无法进行其他操作,必须要点击对话中的确定按钮,然后回到登录界面即可。借助于广播,我们就可以轻松实现这个功能。...而不必在每个页面都编写一个弹出对话框的逻辑,因为你不知道用户此时在哪里。 强制下线的功能需要关闭所有活动,然后回到登录界面。...由于广播接收器需要弹出一个对话框来阻塞用户的正常操作,但如果创建的是一个静态注册的广播接收器,是没有办法在 onReceive() 方法里弹出对话框的这样的UI操作的,而我没问显然也不可能在每个活动中都去注册一个动态的广播接收器...因为我们要始终保证只有处于栈顶的活动才能接受到这条强制下线广播,非栈顶的活动没必要去接受这条广播,所以写 onRemove 和 onPause() 方法里就可以很好的解决这个问题,当一个活动失去栈顶位置是就会自动取消广播接收器的注册

    92130

    安卓-碎片的使用入门

    图 4.4 平板模拟器的运行效果 4.2.1 碎片的简单用法  这里我们准备先写一个最简单的碎片示例来练练手,在一个活动当中添加两个碎片,并让这两个碎片平分活动空间。  ...,一步步你想思维,我想可能也是一个写Android代码的好思维方式。  ...说实在的,这个问题并没有看上去那么复杂,它的基本思路非常简单,首先在一个碎片中可以得到与它相关联的活动,然后再通过这个活动去获取另外一个碎片的实例,这样也就实现了不同碎片之间的通信功能,因此这里我们的答案是肯定的...暂停状态 ​ 当一个活动进入暂停状态时(由于另一个未占满屏幕的活动被添加到了栈顶),与它相关联的可见碎片就会进入到暂停状态。...停止状态 ​ 当一个活动进入停止状态时,与它相关联的碎片就会进入到停止状态,或者通过调用FragmentTransaction的remove() 、replace() 方法将碎片从活动中移除,但如果在事务提交之前调用

    1.4K20

    安卓入门-第二章-探究活动

    作为你的导师,我有义务帮你制定好后面的学习路线,那么今天我们应该从哪儿入手呢?现在你可以想象一下,假如你已经写出了一个非常优秀的应用程序,然后推荐给你的第一个用户,你会从哪里开始介绍呢?...唯一的问题在于,你在启动器中点击应用的图标只会进入到该应用的主活动,那么怎样才能由主活动跳转到其他活动呢?我们现在就来一起看一看。...很简单,按下Back键就可以销毁当前活动,从而回到上一个活动了。使用这种方式来启动活动,Intent的“意图”非常明显,因此我们称之为显式Intent 。...比如说我在自己定义的活动中加入:android:scheme="http" />,那么当其他软件点击了一个网站触发,那么就会询问是否使用自己之前所定义的活动。...而使用singleInstance模式就可以解决这个问题,在这种模式下会有一个单独的返回栈来管理这个活动,不管是哪个应用程序来访问这个活动,都共用的同一个返回栈,也就解决了共享活动实例的问题。

    3K20

    “秒杀”心得

    结果我们四个人一起秒,都没有别人快,没有一个人秒到。然后下午我就开始尝试分析它网站的秒杀流程,并尝试使用自动提交数据的方案来进行秒杀。...接下来我们每个人一个接一个地接到了A网站打来的电话,确定我们是不是作弊了,哈哈,我们当然打死不会承认了~     过了半个来月,该网站又发起了新一轮的秒杀活动,但是由于之前发现有许多人作弊,所以这次全面更改了网站的流程...写了一个简单的控制台程序,在活动开始时立刻运行此程序,快速地打开了20-40个入口页面。此时,发现有一半左右的页面进入成功,到达“提交页面”。...我试了一下在WPF应用程序中直接使用WPF自带的浏览器控件,并研究它的API。...scriptName); 这正是我想要的啊,先构造一个模拟的页面,使用NavigateToString到这个页面上,然后使用InvokeScript方法来调用javascript提交表单到表单上指定的网站的地址就行了

    2.6K90

    Android实现点击两次返回退出APP

    Android实现点击两次退出APP 这两天在做一个项目碰到这么个问题,需要主界面点击两次直接退出整个APP而不是返回上一个界面,查找了网上的资料,整合和修改了一下写了这篇博客。...这里我主要以我的项目为例,实现了登录界面,注册界面,在登录界面登录成功则跳转到主界面上,而主界面点击退出回到了登录界面,这显然是不合理的,需要主界面点击返回按钮退出整个APP,同时为了防止误触,还应该实现点击一次提醒用户...接下来修改主界面之前的活动,这里我主要是在登录界面和注册界面中添加了如下代码: public class XXXXActivity extends AppCompatActivity { @Override...其实上面这些代码的主要作用就是让新活动入栈的之前清空活动栈,这样当新活动入栈后活动栈内只有一个活动,点击返回按钮当然就能直接退出程序。...这里我解释一下为什么没直接调用用 finsh() 或则是直接使用 System.exit(0),网上很多的代码都是这样做的。

    1.5K30

    ujsAutoClock使用方法及开发思路

    使用截图: # 开发思路 ---- # Chrome 扩展 其实一开始,我是拒绝的,一是因为写代码麻烦,二是因为觉得不重要,每天手动打卡就顺手的事,然而我错了,对于尤其像我这种昼夜时差颠倒的人,...# Android 应用 这个是后来开发的,因为吧,虽然 Chrome 扩展开发起来简单,但最大的不足之处就在于无法同步通知到手机上,本来是想用发邮件的方式,找了很久也没发现什么用 JS 实现起来较为简单的方案...,然后呢,我想着干脆直接在手机上开发一个应用,这样不就方便多了,而且实现原理都差不多… 嗯,原理是差不多,细节就差远了,本来以为一两天就能写完,最后边学边写写了四五天… # 基本逻辑 Get 登录页 -...推送通知(这个东西也是,不同的 API 所要求的实现方法有细微区别,不注意就会导致通知推送不出来,找半天都不知道是哪的问题…) Android 系统的开放性、既要兼顾不同的 Android 系统版本...(从高到低的 SDK 版本)、又因为各种厂商对自家手机系统的魔改,导致 Android 开发是个相当不容易的工作… 很佩服 参考: Chrome 插件 (扩展) 开发全攻略 Android 开发者

    1.1K10

    致敬平凡的程序员--《SOD框架“企业级”应用数据架构实战》自序

    这应该是大部分普通的程序员所面临的现实问题,而我,也算是这其中的一员,但不妨碍我能够实现自己上面这个愿望。...其实这是经过长期而不断的努力,才能突然领悟到别人设计的精妙,思想的深邃,你会发现这些设计思想都是自然而然的,一气呵成的,有时甚至会拍下自己的脑袋:原来是这样啊,为啥我之前没有想到呢?...对于别人看一眼就能懂的问题,而我总是要从简单的东西开始慢慢来领悟而不得“悟”,直到某一天才能突然明白,这期间走了不少弯路,付出了比别人更多的努力才能取得成功,我常常自嘲自己这是“笨鸟先飞”。...,有时候为了解决一个问题要花费很多时间来寻找解决方案,比如本来全程ORM的,突然一个复杂查询ORM处理不了不得已在几个地方又手写了SQL查询,相信有框架洁癖强迫症的朋友都能体会这种感觉。...本章将通过介绍内存数据库、异构数据库同步和应用层事务数据复制的问题,让读者可以了解到SOD框架对与企业级项目解决方案简单而又灵活的支持能力。

    44820

    CORS 完全手册之 CORS 详解

    而他的第一个任务,就是要做一个「联络我们」的表单,让看到官网,对他们服务有兴趣的潜在使用者能够联络到公司的人,再让业务去跟他们联络,洽谈后续的合作事项。...小明的主管跟他说公司常常会对外举办一些活动,而在活动尾声都会提供这个表单给大家,希望大家统一透过表单留下联络资料。 因此表单上的「怎么知道我们公司的?」...我之前所说的「跨来源请求挡的是response 而不是request」,只适用于简单请求。对于有preflight 的非简单请求来说,你真正想送出的request 确实会被挡下来。...Day5:编辑资料 原本以为一切都很顺利的小明又再次踢到了铁板。这次是老板那边提出的需求,现在一送出表单之后就没机会再更改了,若是使用者意识到哪边有填错,就只能重新再填一遍。...前端在整个故事中担任的角色就是:写code => 发现错误=> 回报后端=> 后端修正=> 完成功能。这也呼应了我之前一再强调的:「CORS 的问题,通常都不是前端能解决的」。

    1.8K42

    android之activity的生命周期详解

    ,当你打完电话,返回到音乐activity时候呢,进入哪个状态呢,根据图中的流程很明显,正是进入了和onStop成对 的onStart里面,音乐界面是出来了,可是音乐并不播放,为什么呢,因为我们之前把播放音乐的线程启动放在了...,我简单的写了一个Demo,不明白Activity周期的朋友们,可以亲手实践一下,大家按照我的步骤来。   ...第一步:新建一个Android工程,我这里命名为ActivityDemo.   ...如下图所示:   而当我们再次启动ActivityDemo应用程序时,则先后分别执行了onRestart()->onStart()->onResume()三个方法,如下图所示:   这里我们会引出一个问题...,当我们按HOME键,然后再进入ActivityDemo应用时,我们的应用的状态应该是和按HOME键之前的状态是一样的,同样为了方便理解,在这里我将ActivityDemo的代码作一些修改,就是增加一个

    60020

    Android Compose 新闻App(二)ViewModel、Hlit、数据流

    三、ViewModel使用 下面我们回到页面MainActivity中,创建一个initData函数 @Composable fun initData(viewModel: MainViewModel...= viewModel()) { } 你会觉得很奇怪,这里说明一下,这里就是Compose和ViewModel的组合了,为什么这么说呢?   ...因为我如果不加@Composable注解,它就不是一个可组合函数,就不能这么使用。...只要是可组合函数都可以调用viewModel() 函数去获取ViewModel,而我们这里的就是MainViewModel,viewModel() 会返回一个现有的 ViewModel,或在给定作用域内创建一个新的...val dataState = viewModel.result.observeAsState() 通过这个代码会执行网络请求,观察返数据状态,得到一个dataState, dataState.value

    1.5K40
    领券