- 博客(429)
- 资源 (55)
- 收藏
- 关注
原创 移动支付背后的信息安全与防控策略
本文从业务应用层、信息网络交互和基础服务层,简单总结了金融支付安全所使用的常见防控策略。如有不对的地方请予以指正,其他支付安全手段欢迎大家评论补充并讨论。
2024-08-27 22:52:46 1212
原创 成为画图大师,用图表讲故事
如何将数据之逻辑、图表之美学、动听之故事融合在一起,让听众产生喜欢的感觉,从而让喜欢的情绪推动接受,让接受推动理解。并详细讲述了成为数据可视化高手的五大原则。
2024-06-30 22:54:00 752
原创 学会自我投资:美团四大名著之<学会提问>
相信你在生活中或者在工作中会遇到这些场景:你说了大段内容后,别人问你到底想要表达什么?需要什么?被交代工作就上手做,做完才发现和预期不一样;别人总会问“理解我什么意思了吗?”其实不太理解,但是也不知道该怎么提问。学会提问,不仅是一门技巧,也是让我们快速看透事情本质的方法。
2024-02-18 01:35:27 1070
原创 如何成为一名与众不同的程序员?|面向思维做事
思维能力是比解决具体问题更重要的能力。问题也许各有不同,但思维方式可以复制和迁移。正所谓:"有道无术,术尚可求也,有术无道,止于术"。
2023-12-25 13:36:40 946
原创 学会自我投资:美团四大名著之<高效能人士的七个习惯>
受害者心理,如果有人对你说粗话,就怼回去。消极被动。没有计划。没有目标。不会担心自己的行为带来的后果。随波逐流。及时行乐,做个玩世不恭者。拖延。总是先做紧急的事情,比如手机一响就去回复,然后再做重要的事情。把生活当成痛苦的竞赛。别人就是为了取代自己,所以只好先取代他们。不让别人获得成功,如果他们赢了,自己就输了。如果你好像要输了,一定要拉一个垫背的。人生来就长着嘴巴,一定要物尽其用。多多谈论。确保每个人首先要明白自己的观点;
2023-10-06 18:25:37 324
原创 GC回收器演进之路
垃圾收集器是实现垃圾回收的具体实现,是GC技术的核心组件。垃圾收集器的演进方向主要包括以下几个方面:低延迟:随着互联网和移动设备的普及,对于低延迟的要求越来越高。因此,垃圾收集器需要支持低延迟的回收,以减少GC对程序性能的影响。高吞吐量:高吞吐量是指垃圾收集器需要在尽可能短的时间内回收尽可能多的垃圾。高吞吐量对于大规模数据处理和高性能计算等应用非常重要。分代收集:分代收集是指将内存分为不同的代,每个代有不同的生命周期和回收策略。通过采用不同的回收策略和频率,可以提高GC效率和程序性能。
2023-07-03 09:28:11 1165
原创 kafka生产者客户端链路架构梳理
是早在Kafka 0.10.0.0中就已经引入的一个功能,Kafka一共有两种拦截器:生产者拦截器和消费者拦截器。生产者拦截器既可以用来在消息发送前做一些准备工作,比如按照某个规则过滤不符合要求的消息、修改消息的内容等,也可以用来在发送回调逻辑前做一些定制化的需求,比如统计类工作。自定义实现org.apache.kafka.clients.producer.ProducerInterceptor接口。......
2022-08-28 01:36:20 1397
原创 968. 监控二叉树
给定一个二叉树,我们在树的节点上安装摄像头。节点上的每个摄影头都可以监视其父对象、自身及其直接子对象。计算监控树的所有节点所需的最小摄像头数量。示例 1输入:[0,0,null,0,0]输出:1解释:如图所示,一台摄像头足以监控所有节点。输入:[0,0,null,0,null,0,null,null,0]输出:2解释:需要至少两个摄像头来监视树的所有节点。 上图显示了摄像头放置的有效位置之一。/** * Definition for a bin..
2022-05-08 18:19:22 422
原创 714. 买卖股票的最佳时机含手续费
给定一个整数数组prices,其中 prices[i]表示第i天的股票价格 ;整数fee 代表了交易股票的手续费用。你可以无限次地完成交易,但是你每笔交易都需要付手续费。如果你已经购买了一个股票,在卖出它之前你就不能再继续购买股票了。返回获得利润的最大值。注意:这里的一笔交易指买入持有并卖出股票的整个过程,每笔交易你只需要为支付一次手续费。分析:情况一:收获利润的这一天并不是收获利润区间里的最后一天(不是真正的卖出,相当于持有股票),所以后面要继续收获利润。 情况二:前一天是...
2022-05-08 13:29:37 224
原创 738. 单调递增的数字
当且仅当每个相邻位数上的数字x和y满足x <= y时,我们称这个整数是单调递增的。给定一个整数 n ,返回 小于或等于 n 的最大数字,且数字呈 单调递增 。输入: n = 10输出: 9输入: n = 1234输出: 1234输入: n = 332输出: 299class Solution { public int monotoneIncreasingDigits(int n) { String s = St...
2022-04-28 01:16:14 303
原创 56. 合并区间
以数组intervals表示若干个区间的集合,其中单个区间为intervals[i] = [starti, endi]。请你合并所有重叠的区间,并返回一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间。输入:intervals = [[1,3],[2,6],[8,10],[15,18]]输出:[[1,6],[8,10],[15,18]]解释:区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].输入:intervals = [[1,4],[4,5]]输...
2022-04-24 00:21:50 298
原创 763. 划分字母区间
字符串 S 由小写字母组成。我们要把这个字符串划分为尽可能多的片段,同一字母最多出现在一个片段中。返回一个表示每个字符串片段的长度的列表。输入:S = "ababcbacadefegdehijhklij"输出:[9,7,8]解释:划分结果为 "ababcbaca", "defegde", "hijhklij"。每个字母最多出现在一个片段中。像 "ababcbacadefegde", "hijhklij" 的划分是错误的,因为划分的片段数较少。在遍历的过程中相当于是要找每一个字母的边界,
2022-04-23 14:04:50 303
原创 435. 无重叠区间
给定一个区间的集合 intervals ,其中 intervals[i] = [starti, endi] 。返回 需要移除区间的最小数量,使剩余区间互不重叠 。输入: intervals = [[1,2],[2,3],[3,4],[1,3]]输出: 1解释: 移除 [1,3] 后,剩下的区间没有重叠。输入: intervals = [ [1,2], [1,2], [1,2] ]输出: 2解释: 你需要移除两个 [1,2] 来使剩下的区间没有重叠。输入: inte.
2022-04-14 12:27:41 519
原创 452. 用最少数量的箭引爆气球
有一些球形气球贴在一堵用 XY 平面表示的墙面上。墙面上的气球记录在整数数组 points ,其中points[i] = [xstart, xend] 表示水平直径在 xstart 和 xend之间的气球。你不知道气球的确切 y 坐标。一支弓箭可以沿着 x 轴从不同点 完全垂直 地射出。在坐标 x 处射出一支箭,若有一个气球的直径的开始和结束坐标为 xstart,xend, 且满足 xstart ≤ x ≤ xend,则该气球会被 引爆 。可以射出的弓箭的数量 没有限制 。 弓箭一旦被射出之后,可以无限
2022-04-05 13:02:55 447
原创 406. 根据身高重建队列
假设有打乱顺序的一群人站成一个队列,数组 people 表示队列中一些人的属性(不一定按顺序)。每个 people[i] = [hi, ki] 表示第 i 个人的身高为 hi ,前面 正好 有 ki 个身高大于或等于 hi 的人。请你重新构造并返回输入数组 people 所表示的队列。返回的队列应该格式化为数组 queue ,其中 queue[j] = [hj, kj] 是队列中第 j 个人的属性(queue[0] 是排在队列前面的人)。输入:people = [[7,0],[4,4],[7,1]
2022-04-02 11:19:28 494
原创 860. 柠檬水找零
在柠檬水摊上,每一杯柠檬水的售价为 5 美元。顾客排队购买你的产品,(按账单 bills 支付的顺序)一次购买一杯。每位顾客只买一杯柠檬水,然后向你付 5 美元、10 美元或 20 美元。你必须给每个顾客正确找零,也就是说净交易是每位顾客向你支付 5 美元。注意,一开始你手头没有任何零钱。给你一个整数数组 bills ,其中 bills[i] 是第 i 位顾客付的账。如果你能给每位顾客正确找零,返回 true ,否则返回 false 。输入:bills = [5,5,5,10,20]输出
2022-04-01 01:05:51 668
原创 135. 分发糖果
n 个孩子站成一排。给你一个整数数组 ratings 表示每个孩子的评分。你需要按照以下要求,给这些孩子分发糖果:每个孩子至少分配到 1 个糖果。相邻两个孩子评分更高的孩子会获得更多的糖果。请你给每个孩子分发糖果,计算并返回需要准备的 最少糖果数目 。输入:ratings = [1,0,2]输出:5解释:你可以分别给第一个、第二个、第三个孩子分发 2、1、2 颗糖果。输入:ratings = [1,2,2]输出:4解释:你可以分别给第一个、第二个、第三个孩子分发 1、2、
2022-03-31 01:46:48 907
原创 134. 加油站
在一条环路上有 n 个加油站,其中第 i 个加油站有汽油 gas[i] 升。你有一辆油箱容量无限的的汽车,从第 i 个加油站开往第 i+1 个加油站需要消耗汽油 cost[i] 升。你从其中的一个加油站出发,开始时油箱为空。给定两个整数数组 gas 和 cost ,如果你可以绕环路行驶一周,则返回出发时加油站的编号,否则返回 -1 。如果存在解,则 保证 它是 唯一 的。输入: gas = [1,2,3,4,5], cost = [3,4,5,1,2]输出: 3解释:从 3 号加油站(索
2022-03-26 00:07:46 491
原创 1005.K次取反后最大化的数组和
给你一个整数数组 nums 和一个整数 k ,按以下方法修改该数组:选择某个下标 i并将 nums[i] 替换为 -nums[i] 。重复这个过程恰好 k 次。可以多次选择同一个下标 i 。以这种方式修改数组后,返回数组 可能的最大和 。输入:nums = [4,2,3], k = 1输出:5解释:选择下标 1 ,nums 变为 [4,-2,3] 。输入:nums = [3,-1,0,2], k = 3输出:6解释:选择下标 (1, 2, 2) ,nums 变为 [3,.
2022-03-25 01:11:57 879
原创 343. 整数拆分
给定一个正整数n,将其拆分为k个正整数的和(k >= 2),并使这些整数的乘积最大化。返回 你可以获得的最大乘积 。例子1输入: n = 2输出: 1解释: 2 = 1 + 1, 1 × 1 = 1。例子2输入: n = 10输出: 36解释: 10 = 3 + 3 + 4, 3 ×3 ×4 = 36。class Solution { public int integerBreak(int n) { //dp[...
2022-03-24 01:21:12 777
原创 2022年清单计划v1.0
总体分为三个部分:技术、业务、个人;一、技术大数据了解分布式领域中的计算模型,如分布式并行计算框架Hadoop中的 MapReduce 的设计思想,以及基于流式计算框架Storm、Spark、Flink的架构设计方案GOLANG语言掌握基本数据类型,函数式编程,面向对象思想应用,常熟悉见错误处理机制多线程并发编程以及设计模式二、业务风控相关知道三、个人沟通方面:阅读金字塔原理、批判性思维等书籍;...
2022-03-15 00:45:35 851
原创 mac 安装homebrew出错 Failed to connect to raw.githubusercontent.com port 443: Connection refused error:
问题:macOS安装Homebrew时总是报错(Failed to connect to raw.githubusercontent.com port 443: Connection refused)原因:GitHub的raw.githubusercontent.com域名解析被污染了解决办法:通过修改hosts解决此问题。查询真实IP在The Best IP Address, Email and Networking Tools - IPAddress.com查询raw.githubuse
2022-03-14 15:52:01 1094
原创 无服务时代是“不分布式”云端系统的起点
无服务架构兴起在工业界,2012 年,iron.io 公司率先提出了“无服务”(Serverless,应该翻译为“无服务器”才合适,但现在用“无服务”已形成习惯了)的概念;2014 年开始,AWS 发布了命名为 Lambda 的商业化无服务应用,并在后续的几年里逐步得到了开发者的认可,发展成目前世界上最大的无服务的运行平台;到了 2019 年,中国的阿里云、腾讯云等厂商,也发布了无服务的产品。“无服务”成了近期技术圈里的“新网红”之一。无服务特点后端设施是指数据库、消息队列、日志、存储等这一..
2022-02-18 23:34:59 1141
原创 云原生时代(后微服务时代)跨越了软件与硬件之间界限
抛砖引玉有些问题一定要由分布式系统自己来解决吗?如果某个系统需要伸缩扩容,我们通常会购买新的服务器,多部署几套副本实例来分担压力; 如果某个系统需要解决负载均衡的问题,我们通常会布置负载均衡器,并选择恰当的均衡算法来分流; 如果需要解决安全传输的问题,我们通常会布置 TLS 传输链路,配置好 CA 证书,以保证通讯不被窃听篡改; 如果需要解决服务发现的问题,我们通常会设置 DNS 服务器,让服务访问依赖稳定的记录名而不是易变的 IP 地址,等等。在微服务时代,我们之所以不得不在应用服...
2022-02-16 23:20:01 1055
原创 微服务是SOA的革命者
现代微服务的概念微服务是一种通过多个小型服务的组合,来构建单个应用的架构风格,这些服务会围绕业务能力而非特定的技术标准来构建。各个服务可以采用不同的编程语言、不同的数据存储技术、运行在不同的进程之中。服务会采取轻量级的通讯机制和自动化的部署机制,来实现通讯与运维。微服务的九大特性围绕业务能力构建(Organized around Business Capabilities)这个核心技术特征,实际上再次强调了康威定律的重要性。它的意思是,有怎样的结构、规模和能力的团队,就会产生出对应结构、规..
2022-02-15 09:14:44 942
原创 SOA架构是成功的理论却是失败的实践
目录产生的背景SOA演进中产生的架构种类SOA是软件架构的基础平台SOA的最终目标推广失败的原因总结产生的背景人们探索过几种服务的拆分方法,把一个大的单体系统拆分为若干个更小的、不运行在同一个进程的独立服务,这些服务拆分的方法,后来导致了面向服务架构(Service-Oriented Architecture)的一段兴盛期,我们把它称作是“SOA 时代”。SOA演进中产生的架构种类烟囱式架构(Information Silo Architecture)信.
2022-02-14 00:35:06 2031
原创 单体系统是最广泛的架构风格
目录产生的时间单体的优劣势大型单体系统致命问题单体系统的拆分单体系统的权衡利弊SOA时代:面向服务架构总结产生的时间单体架构是出现时间最早、应用范围最广、使用人数最多、统治历史最长的一种架构风格。但“单体”这个名称,却是从微服务开始流行之后,才“事后追认”所形成的概念。在这之前,并没有多少人会把“单体”看成一种架构。单体的优劣势优势易于开发、易于测试、易于部署,而且因为各个功能、模块、方法的调用过程,都是在进程内调用的,不会发...
2022-02-13 20:21:05 2528
原创 45. 跳跃游戏 II
给你一个非负整数数组 nums ,你最初位于数组的第一个位置。数组中的每个元素代表你在该位置可以跳跃的最大长度。你的目标是使用最少的跳跃次数到达数组的最后一个位置。假设你总是可以到达数组的最后一个位置。输入: nums = [2,3,1,1,4]输出: 2解释: 跳到最后一个位置的最小跳跃数是 2。 从下标为 0 跳到下标为 1 的位置,跳1步,然后跳3步到达数组的最后一个位置。输入: nums = [2,3,0,1,4]输出: 2class S...
2022-02-10 02:39:07 695
原创 55. 跳跃游戏
给定一个非负整数数组 nums ,你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个下标。输入:nums = [2,3,1,1,4]输出:true解释:可以先跳 1 步,从下标 0 到达下标 1, 然后再从下标 1 跳 3 步到达最后一个下标。输入:nums = [3,2,1,0,4]输出:false解释:无论怎样,总会到达下标为 3 的位置。但该下标的最大跳跃长度是 0 , 所以永远不可能到达最后一个下标。.
2022-02-10 01:25:06 685
原创 122. 买卖股票的最好时机 II
给定一个数组 prices ,其中 prices[i] 表示股票第 i 天的价格。在每一天,你可能会决定购买和/或出售股票。你在任何时候最多只能持有 一股 股票。你也可以购买它,然后在 同一天 出售。返回 你能获得的 最大 利润。输入: prices = [7,1,5,3,6,4]输出: 7解释: 在第 2 天(股票价格 = 1)的时候买入,在第 3 天(股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5-1 = 4 。 随后,在第 4 天(股票价格 = 3)的时候...
2022-02-06 01:45:12 10836
原创 53. 最大子数组和
给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。子数组 是数组中的一个连续部分。输入:nums = [-2,1,-3,4,-1,2,1,-5,4]输出:6解释:连续子数组[4,-1,2,1] 的和最大,为6 。输入:nums = [1]输出:1输入:nums = [5,4,-1,7,8]输出:23class Solution { public int maxSubArray(int[] ..
2022-01-29 02:18:14 310
原创 原始分布式架构服务探索的得与失
目录架构并不是被“发明”出来的,而是持续进化的结果。结论原始分布式架构时代产生的背景探索实践的结论原始分布式时代的教训摩尔定律的黄金时期总结架构并不是被“发明”出来的,而是持续进化的结果。从以下三个方面思考:1. 它们都是什么、取代了什么,以及为什么能够在技术发展的中取得成功;2. 为什么会成为软件架构不可或缺的支撑;3. 它们为什么会失败,为什么会逐渐被我们遗忘。结论1. 微型机取代了大型机,逐步走向人们身边,因为当时硬件运算能力有限,因
2022-01-27 22:57:08 1186
原创 架构师知识体系总结
存储数据要分部到多个节点,你还需要数据复制为了保证数据的可靠性和可用性增强系统容错,数据复制就会产生副本副本则是分布式存储系统解决高可用的唯一手段多个副本同步会产生一致性问题,从而引出一致性问题的分类如强一致性,弱一致性,最终一致性要想解决一致性问题,会涉及一致性问题的协议多个副本还会带来主选举,这会涉及分布式锁的问题为了解决锁的容错性,比如解决双主(脑裂)问题。就会涉及租约机制,租约机制可以解决网络分区问题造成的“双主”问题为了衡量副本可用性和一致性就会引出...
2022-01-26 15:39:53 3333
原创 8. 字符串转换整数 (atoi)
请你来实现一个 myAtoi(string s) 函数,使其能将字符串转换成一个 32 位有符号整数(类似 C/C++ 中的 atoi 函数)。函数 myAtoi(string s) 的算法如下:读入字符串并丢弃无用的前导空格检查下一个字符(假设还未到字符末尾)为正还是负号,读取该字符(如果有)。 确定最终结果是负数还是正数。 如果两者都不存在,则假定结果为正。读入下一个字符,直到到达下一个非数字字符或到达输入的结尾。字符串的其余部分将被忽略。将前面步骤读入的这些数字转换为整数(即,"123"
2022-01-25 14:53:08 551
原创 376. 摆动序列
如果连续数字之间的差严格地在正数和负数之间交替,则数字序列称为 摆动序列 。第一个差(如果存在的话)可能是正数或负数。仅有一个元素或者含两个不等元素的序列也视作摆动序列。例如, [1, 7, 4, 9, 2, 5] 是一个 摆动序列 ,因为差值 (6, -3, 5, -7, 3) 是正负交替出现的。相反,[1, 4, 7, 2, 5]和[1, 7, 4, 5, 5] 不是摆动序列,第一个序列是因为它的前两个差值都是正数,第二个序列是因为它的最后一个差值为零。子序列 可以通过从原始序列中删除一些..
2022-01-24 12:01:56 525
原创 455. 分发饼干
假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。对每个孩子i,都有一个胃口值g[i],这是能让孩子们满足胃口的饼干的最小尺寸;并且每块饼干j,都有一个尺寸s[j]。如果s[j]>= g[i],我们可以将这个饼干j分配给孩子i,这个孩子会得到满足。你的目标是尽可能满足越多数量的孩子,并输出这个最大数值。输入: g = [1,2,3], s = [1,1]输出: 1解释:你有三个孩子和两块小饼干,3个孩子的胃口值分别是:1,2,...
2022-01-23 10:43:05 520
原创 47. 全排列 II
给定一个可包含重复数字的序列 nums ,按任意顺序 返回所有不重复的全排列。输入:nums = [1,1,2]输出:[[1,1,2], [1,2,1], [2,1,1]]输入:nums = [1,2,3]输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]class Solution { //存放结果 List<List<Integer>> result = new Array
2022-01-21 00:29:20 668
原创 491. 递增子序列
给你一个整数数组 nums ,找出并返回所有该数组中不同的递增子序列,递增子序列中 至少有两个元素 。你可以按 任意顺序 返回答案。数组中可能含有重复元素,如出现两个整数相等,也可以视作递增序列的一种特殊情况。输入:nums = [4,6,7,7]输出:[[4,6],[4,6,7],[4,6,7,7],[4,7],[4,7,7],[6,7],[6,7,7],[7,7]]输入:nums = [4,4,3,2,1]输出:[[4,4]]class Solution { p
2022-01-20 23:58:04 526
原创 383. 赎金信
给你两个字符串:ransomNote 和 magazine ,判断 ransomNote 能不能由 magazine 里面的字符构成。如果可以,返回 true ;否则返回 false 。magazine 中的每个字符只能在 ransomNote 中使用一次。输入:ransomNote = "a", magazine = "b"输出:false输入:ransomNote = "aa", magazine = "ab"输出:false输入:ransomNote = "a
2022-01-18 12:50:34 337
sublime Text2皮肤
2014-03-19
java并发包源码分析(3)ThreadLocal
2018-07-05
autoruns查看系统进程,查找病毒木马的好工具
2014-08-03
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人