首页 文章 精选 留言 我的

精选列表

搜索[提示词调教],共10000篇文章
优秀的个人博客,低调大师

Redis 官网昨日宕机,错误提示为无法连接 Redis

【金融特辑】光大银行科技部DBA女神带你从0到1揭秘MGR Redis 官网redis.io昨日罕见地宕机了一段时间。宕机原本不是什么新鲜事,但戏剧性的是网站的报错信息居然是连接不上 Redis。 Redis::CannotConnectErrorat/ErrorconnectingtoRedison127.0.0.1:6379(Errno::ECONNREFUSED) ▲ 看到这,忍不住刷一句:禁止套娃! Redis 作者 Antirez 很快修复了问题,并解释了宕机的原因。原来是因为他最近在运行redis.io的实例上安装了Try Redis(用于在线体验 Redis 数据库),可能是未能对 session key 进行良好的垃圾回收,从而导致内存累积,最终因为内存溢出(OOM)引发宕机。对此,Antirez 表示这种情况只是由于实例的内存不足而导致的。所以他的解决方案也十分直接,升级为 $20/月,4G 内存的实例。另外还为 allkeys-lru 策略配置了 1GB 内存的限制。 However lately I installedhttp://try.redis.iothere. And apparently it does not garbage collect the session keys well enough or something like that. So memory accumulated and the instance quit for OOM, but this probably only happened because the instance is very low on mem. viahttps://twitter.com/antirez/status/1238132868137787392 TLDR, today I'm going to resize it to a 4GB instance for 20$/month. Looks like a good upgrade :-D Maybe the site will be faster too, even if it was quite fast actually, already. Lessons: if you use Redis as your store, you can do a lot with very little. viahttps://twitter.com/antirez/status/1238132885762211841 我们也由此得知一个出乎大家意料的情况,Redis 官网居然运行在一台仅$5/月,内存 1G 的 DigitalOcean 虚拟主机(Droplet)上,这也是 DigitalOcean 提供的最低(标准)配置。 Todayhttp://Redis.iowent down for some time, sorry about this problem,http://Redis.iois running in a $5 / month droplet at@digitalocean. I was a bit too cheap on that :-) But since it uses Redis as its main store + a Ruby app, this was enough. viahttps://twitter.com/antirez/status/1238132866682359813 Antirez 解释道,选择这么便宜的配置是因为这台主机使用了 Redis 作为持久存储,并且只跑了一个 Ruby 应用,所以已经足够应对。

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

React Navigation 导航栏样式调整+底部角标消息提示

五一佳节匆匆而过,有人选择在外面看人山人海,有人选择宅在家中度过五一,也有人依然坚守在第一线,致敬! 这是坚持学习react-native的第二篇文章,可能会迟到,但是绝不会缺席,这篇要涉及到的是react-navigation,也是rn社区主推的一个导航库。 网上关于react-navigation的基本使用也是一抓一大把,这里对于它的使用不做过多介绍,主要记录使用过程中的其他问题。 因为android 和iOS 手机的不同,导航栏的显示也不太一样,而这篇文章会尽量的配置属性,让两端的导航栏样式、页面跳转的动画保持一致,同时还会介绍底部导航栏添加角标的方法。 这里使用的是3.9.1版本,网上好多文章是2.x版本的,用法基本大同小异。 android 导航栏标题居中适配 默认情况下,iOS的标题居中显示,而android的则不!!! 解决:createStackNavigator的defaultNavigationOptions属性里配置textAlign和flex const AppStackNavigator = createStackNavigator({ HomeScreen: {screen: HomeScreen}, RainScreen: {screen: RainScreen} },{ defaultNavigationOptions:{ ... headerTitleStyle: { ... textAlign: "center", //用于android 机型标题居中显示 flex:1 } } }) 注:android机型标题默认不居中,textAlign和flex的属性配置用于android机型标题居中显示。 在这种情况下,如果配置了headerLeft或者headerRight 属性,会出现标题偏移的现象。 直接在defaultNavigationOptions里配置空view的headerLeft和headerRight defaultNavigationOptions:{ ... headerTitleStyle: { ... textAlign: "center", //用于android 机型标题居中显示 flex:1, }, headerRight: <View/>, headerLeft: <View/> } 这时候标题居中,同时可以在各自的页面里面去重写headerLeft的样式。 android 导航栏去除阴影样式 android的导航栏还有阴影的样式,添加elevation 设置阴影的偏移量 defaultNavigationOptions:{ headerStyle:{ backgroundColor:"#fff", elevation:0.5 }, ... } 至此的导航栏的效果跟iOS基本保持一致。 android 页面跳转动画,自右向左打开 默认的android页面跳转是自下而上打开页面,而要与iOS的保持一致的自右向左,配置transitionConfig属性。 const AppStackNavigator = createStackNavigator({ HomeScreen: {screen: HomeScreen}, ... },{ defaultNavigationOptions:{ ... }, transitionConfig: () => ({ screenInterpolator: (sceneProps) => { return StackViewStyleInterpolator.forHorizontal(sceneProps) }, }), }) 底部导航添加消息角标 有时候我们会遇到这样的需求,在底部导航处添加消息的角标,提醒用户阅读的。 在tabBarIcon的属性里直接添加图标显示的,这里的msg变量数值是全局的,只做演示使用,实际项目里可以根据接口返回数据,可以搭配mobx 一起使用。 const rootTab = createBottomTabNavigator({ ... info: { screen: InfoStack, navigationOptions: { tabBarLabel: "消息", tabBarIcon: ({focused, tintColor}) => { let icon = focused ? require('../resources/img/mine_icon_message_selected.png') : require('../resources/img/mine_icon_message_default.png'); return <View> { msg > 0 ? <View style={{ width:12, height:12, justifyContent:"center", position: 'absolute', zIndex: 9, backgroundColor: "#FB3768", borderRadius:6, right:0, top:-2, }}> <Text style={[{fontSize:10, color:"#fff", textAlign:"center",}]}>{msg}</Text> </View> : null } <Image source={icon} style={{width: 34, height: 26}}/> </View> } } } },{ ... defaultNavigationOptions: ({navigation, screenProps}) => ({ tabBarOnPress: (obj) => { //点击的时候清除消息 const {routeName} = obj.navigation.state; if (routeName === "info") { msg = 0 } obj.navigation.navigate(obj.navigation.state.key) } }) }) 以上几点是在react-navigation的使用过程中遇到的问题以及解决方法,相关代码已经传到了github上https://github.com/taixiang/reactNativeDemo,仅供参考,如果有更好的方式 欢迎一起学习研究。 欢迎关注我的个人博客:https://www.manjiexiang.cn/

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

安装android时提示The operation cannot be completed. See the details.

Cannot complete the install because one or more required items could not be found. Software being installed: Android Development Tools 0.9.5.v200911191123-20404 (com.android.ide.eclipse.adt.feature.group 0.9.5.v200911191123-20404) Missing requirement: Android Development Tools 0.9.5.v200911191123-20404 (com.android.ide.eclipse.adt.feature.group 0.9.5.v200911191123-20404) requires 'org.eclipse.wst.sse.core 0.0.0' but it could not be found 满意回答 这个是eclipse里面的信息吧,我之前也遇到过这种情况,版本问题,你下载个低版本的eclipse就可以了。不是越新越好的。。 下载这个版本比较合适,是版本的问题,eclipse-jee-indigo-win32.zip 本文转自左正博客园博客,原文链接:http://www.cnblogs.com/soundcode/archive/2012/03/12/2392248.html,如需转载请自行联系原作者

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

“动态规划”这词太吓人,其实可以叫“状态缓存”

摘要:平时练习算法题学习算法知识时,经常会发现题解里写着“动态规划”,里面一上来就是一个复杂的dp公式,对于新人来说除了说声“妙啊”,剩下就是疑惑,他是怎么想到这个公式的?我能想到吗?这玩意工作中有用吗? 本文分享自华为云社区《动态规划究竟是怎么想到的?【奔跑吧!JAVA】》,原文作者:breakDraw。 平时练习算法题学习算法知识时,经常会发现题解里写着“动态规划”,里面一上来就是一个复杂的dp公式,对于新人来说除了说声 剩下就是疑惑,他是怎么想到这个公式的?我能想到吗?这玩意工作中有用吗? 加上“动态规划”这高端的名字,然后就劝退了不少试图去理解他的人。 动态规划听起来太吓人,可以换个说法 我在内心更喜欢叫他“状态缓存” 如果是服务开发,相信很熟悉这个词语, 利用缓存来加快一些重复的请求的响应速度。 而这个缓存的特点是和其他缓存有所关联。 比如我们的服务要计算7天内的某金钱总和,计算后要缓存一下。 后来又收到一个请求,要计算8天内的金钱总和 那我们只需要取之前算过的7天内的金钱综合,加上第8天的金钱就行了。 1+4的思考套路 自己针对动态规划总结了一个自己的思考套路,我叫他1组例子4个问题,就叫1+4好了,通过这5个过程,可以站在普通人的角度(就是非acm大佬那种的角度),去理解动态规划是如何被思考出来的 在超时的思路上写出一组计算过程的例子 在超时例子的基础上,有哪些重复、浪费的地方? 如何定义dp数组 状态的变化方向是什么,是怎么变化的 边界状态是什么 简单例子 以一道简单题为例: 爬楼梯: https://leetcode-cn.com/problems/climbing-stairs/ 这时候就要静下心,观察这个解法的例子中是否有重复经历的场景,而这个重复经历的场景就叫状态。 我处理动态规划的题目时, 都会问自己3个问题,一般就能顺利地解决。 ①在超时的思路上写出一组计算过程的例子 如果我们考虑最简单的解法, 就是从起点开始,每次选择走1步或者走2步,看下能否走到终点,能走到则方法数+1。 但这种方法注定超时(O(n^2)) 但我还是照着这个过程模拟了一下,随便列了几个 1 ->2-> 3-> 4-> 5 1 ->2 ->3-> 5 1->3->4->5 1->3->5 ②在超时例子的基础上,有哪些重复、浪费的地方? 在上面,我发现了重复的地方 也就是说 从3到5总共就2种路线,已经在1->2之后计算过了,我后面从1走到3再往后走时,没必要再去算了。 换言之,当我走到3的时候,其实早就可以知道后面还剩下多少种走法。 发现重复的地方后,就可以开始建立dp公式了。 ③如何定义dp数组? 定义dp数组,也就是定义上面提到的重复的地方。重新看下之前的那句话 当我走到3的时候,其实早就可以知道后面还剩下多少种走法。 所以dp[3]代表的就是从3往后,有多少种可走的方法。 ④状态的变化方向是什么,是怎么变化的 首先思考状态的变化方向 重新看这句话: 当我走到3的时候,其实早就可以知道后面还剩下多少种走法 说明结果取决于往后面的状态 因此我们要先计算后面的状态, 即从后往前算 接着思考这个后面的状态和当前的状态有什么联系,是怎么变化的 这个一般都包含在题目条件中 根据题意,要么走2步,要么走1步,因此每当我走到一层时,下一次就2种状态可以变化。 那么对于第3层而言,他后续有2种走法,走1步或者走2步 那么他的情况就是dp[3] = dp[3+1] + dp{3+2} 如果层数设为i,那么这个变化情况就是 dp[i] = dp[i+1] + dp[i+2] ⑤边界状态是什么? 边界状态就是不需要依赖后面的状态了,直接可以得到结果的状态。 在这里肯定就是最后一层dp[n], 最后一层默认是一种走法。 dp[n]=1 实现 根据上面的过程,自己便定义了这个状态和变化 定义:dp[i] : 代表从第i层往后,有多少种走法 方向和变化:dp[i] = dp[i+1] + dp[i+2]; 边界: dp[n] = 1 根据这个写代码就很容易了 代码: public int climbStairs(int n) { int[] dp = new int[n + 1]; dp[n] = 1; dp[n-1] = 1; for(int i = n-2; i >=0;i--) { dp[i] = dp[i+1] + dp[i+2]; } return dp[0]; } 进阶版,二维的动态规划 https://leetcode-cn.com/problems/number-of-ways-to-stay-in-the-same-place-after-some-steps/ ①在超时的思路上写出一组计算过程的例子 超时的思路肯定是像搜索一样模拟所有的行走过程。 先假设1个steps=5, arrlen=3的情况 随便先列几个。模拟一下不断走的位置。数字指的是当前位置。 0->1->2->1->0->0 0->1->2->1->1->0 0->1->1->1->1->0 0->1->1->1->0->0 0->0->1->1->1->0 …… ②在超时例子的基础上,有哪些重复、浪费的地方? 0->1->2->1->0->0 0->1->2->1->1->0 0->1->1->1->1->0 0->1->1->1->0->0 0->0->1->1->1->0 0->0->1->1->0->0 我发现这部分标粗的部分重复了, 换句话说 当我还剩2步且当前位置为1的时候,后面还有多少种走法,其实早就知道了。 ③如何定义dp数组? 重新看这句话: 当我还剩2步且当前位置为1的时候,后面还有多少种走法,其实早就知道了。 涉及了2个关键因素: 剩余步数和当前值,所以得用二维数组 因此 dp[realstep][index] 就代表了 剩余步数为step且位置为index时, 后续还剩多少种走法。 ④状态的变化方向是什么,是怎么变化的 先思考变化方向 “当我还剩2步且当前位置为1的时候,后面还有多少种走法,其实早就知道了。” 这个后面是指啥, 后面会怎么变? 后面肯定是步数越来越少的情况, 并且位置会根据规律变化。 所以变化方向是步数变少,位置则按照规定去变。 那么这个固定越来越少的这个“剩余步数”,就是核心的变化方向。 我们计算时,可以先计算小的剩余步数的状态, 再去算大的剩余步数。 如何变化 根据题意和方向,剩余步数肯定-1, 然后位置有3种选择(减1,不变,加1), 那么方法就是3种选择的相加。 dp[step][index] = dp[step-1][index-1] + dp[step-1][index] + dp[step-1][index+1] ⑤边界状态是什么? 剩余步数为0时,只有当前位置为0才是我们最终想要的方案,把值设为1并提供给后面用,其他位置且步数为0时都认为是0。 dp[0][0] = 1; dp[0][index] = 0;(index>0) 实现 那么最终出来了 定义:dp{realstep][index]: 剩余步数为step且位置为index时, 后续还剩多少种走法。 方向和变化:dp[step][index] = dp[step-1][index-1] + dp[step-1][index] + dp[step-1][index+1] 边界: dp[0][0] = 1; 内存溢出处理 不过这题因为是困难题,所以给上面这个公式设立了一个小难度: 数组长度非常大,导致如果index的范围我们选择为0~arrLen-1, 那么最大情况dp[500][10^6]注定超时内存范围。 这时候就要去思考index设那么大是不是没必要 一般我们可以自己列这种情况的小例子,例如 step=2, arr=10 然后看下index有没有必要设成0~9,随便走几步 0->1->0 0->1->0 0->0->0 嗯?我发现就3种情况,arr后面那么长不用啦? 于是发现规律: 剩余的步数,必须支撑他返回原点! 也就是说,其实index的最大范围最多就是step/2, 不能再多了,再多肯定回不去了。 于是问题解决。 其他类似题目练习 https://leetcode-cn.com/problems/minimum-cost-for-tickets/ 点击关注,第一时间了解华为云新鲜技术~

资源下载

更多资源
Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

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等操作系统。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册