首页 文章 精选 留言 我的

精选列表

搜索[自适应学习],共10005篇文章
优秀的个人博客,低调大师

Docker安装Oracle12C,快速搭建Oracle学习环境

安装说明 1.操作系统CentOS7_x64 2.安装的数据库为Oracle12C 3.已经安装了Docker环境 4.需要检查是否有swap分区,如果没有请设置 安装 1.Docker安装 镜像准备 sh 复制代码 docker pull sath89/oracle-12c 启动镜像 sh 复制代码 docker run -d --name oracle12c -p 8080:8080 -p 1521:1521 -v $PWD/data:/mnt -e TZ=Asia/Shanghai sath89/oracle-12c 注: oracle12c为Docker容器名称 8080:8080为内部端口映射外部端口 1521:1521为内部端口映射外部端口 查看日志,等待安装结束 sh 复制代码 docker logs -f -t oracle12c 默认数据库信息 sid: xe username: system password: oracle 2.切换镜像配置密码 查看镜像是否在运行 sh 复制代码 docker ps 进入oracle12c容器 sh 复制代码 docker exec -it oracle12c /bin/bash 注:oracle12c为Docker容器名称,注意与上面对应 进入oracle数据库 sh 复制代码 sqlplus system/oracle 注: system为用户名 oracle为密码 查看数据库运行状态 sh 复制代码 select status from v$instance; 修改sys用户密码 sh 复制代码 alter user sys identified by oracle; 3.外网连接测试 用户名:sys 密码:oracle 服务名:xe 端口:1521

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

Android -- Webview自适应屏幕

第一种 WebSetting settings = webView.getSettings(); settings.setLayoutAlgorithm(LayoutAlgorithm.SINGLE_COLUMN); 把所有内容放在webview等宽的一列中。(可能会出现页面中链接失效) 第二种 settings.setUseWideViewPort(true); settings.setLoadWithOverviewMode(true); 第三种 DisplayMetrics metrics = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(metrics); int mDensity = metrics.densityDpi; if (mDensity == 120) { settings.setDefaultZoom(ZoomDensity.CLOSE); }else if (mDensity == 160) { settings.setDefaultZoom(ZoomDensity.MEDIUM); }else if (mDensity == 240) { settings.setDefaultZoom(ZoomDensity.FAR); } 我是天王盖地虎的分割线 本文转自我爱物联网博客园博客,原文链接:http://www.cnblogs.com/yydcdut/p/3888164.html,如需转载请自行联系原作者

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

自适应微服务治理背后的算法

前言 go-zero 群里经常有同学问: 服务监控是通过什么算法实现的? 滑动窗口是怎么工作的?能否讲讲这块的原理? 熔断算法是怎么设计的?为啥没有半开半闭状态呢? 本篇文章,来分析一下 go-zero 中指标统计背后的实现算法和逻辑。 指标怎么统计 这个我们直接看 breaker : type googleBreaker struct { k float64 stat *collection.RollingWindow proba *mathx.Proba } go-zero 中默认的 breaker 是以 google SRE 做为实现蓝本。 当 breaker 在拦截请求过程中,会记录当前这类请求的成功/失败率: func (b *googleBreaker) doReq(req func() error, fallback func(err error) error, acceptable Acceptable) error { ... // 执行实际请求函数 err := req() if acceptable(err) { // 实际执行:b.stat.Add(1) // 也就是说:内部指标统计成功+1 b.markSuccess() } else { // 原理同上 b.markFailure() } return err } 所以其实底层说白了就是:请求执行完毕,会根据错误发生次数,内部的统计数据结构会相应地加上统计值(可正可负)。同时随着时间迁移,统计值也需要随时间进化。 简单来说:时间序列内存数据库【也没数据库这么猛,就是一个存储,只是一个内存版的】 下面就来说说这个时间序列用什么数据结构组织的。 滑动窗口 我们来看看 rollingwindow 定义数据结构: type RollingWindow struct { lock sync.RWMutex size int win *window interval time.Duration offset int ignoreCurrent bool lastTime time.Duration } 上述结构定义中,window 就存储指标记录属性。 在一个 rollingwindow 包含若干个桶(这个看开发者自己定义): 每一个桶存储了:Sum 成功总数,Count 请求总数。所以在最后 breaker 做计算的时候,会将 Sum 累计加和为 accepts,Count 累计加和为 total,从而可以统计出当前的错误率。 滑动是怎么发生的 首先对于 breaker 它是需要统计单位时间(比如1s)内的请求状态,对应到上面的 bucket 我们只需要将单位时间的指标数据记录在这个 bucket 即可。 那我们怎么保证在时间前进过程中,指定的 Bucket 存储的就是单位时间内的数据? 第一个想到的方式:后台开一个定时器,每隔单位时间就创建一个 bucket ,然后当请求时当前的时间戳落在 bucket 中,记录当前的请求状态。周期性创建桶会存在临界条件,数据来了,桶还没建好的矛盾。 第二个方式是:惰性创建 bucket,当遇到一个数据再去检查并创建 bucket。这样就有时有桶有时没桶,而且会大量创建 bucket,我们是否可以复用呢? go-zero 的方式是:rollingwindow 直接预先创建,请求的当前时间通过一个算法确定到bucket ,并记录请求状态。 下面看看 breaker 调用 b.stat.Add(1) 的过程: func (rw *RollingWindow) Add(v float64) { rw.lock.Lock() defer rw.lock.Unlock() // 滑动的动作发生在此 rw.updateOffset() rw.win.add(rw.offset, v) } func (rw *RollingWindow) updateOffset() { span := rw.span() if span <= 0 { return } offset := rw.offset // 重置过期的 bucket for i := 0; i < span; i++ { rw.win.resetBucket((offset + i + 1) % rw.size) } rw.offset = (offset + span) % rw.size now := timex.Now() // 更新时间 rw.lastTime = now - (now-rw.lastTime)%rw.interval } func (w *window) add(offset int, v float64) { // 往执行的 bucket 加入指定的指标 w.buckets[offset%w.size].add(v) } 上图就是在 Add(delta) 过程中发生的 bucket 发生的窗口变化。解释一下: updateOffset 就是做 bucket 更新,以及确定当前时间落在哪个 bucket 上【超过桶个数直接返回桶个数】,将其之前的 bucket 重置 确定当前时间相对于 bucket interval的跨度【超过桶个数直接返回桶个数】 将跨度内的 bucket 都清空数据。reset 更新 offset,也是即将要写入数据的 bucket 更新执行时间 lastTime,也给下一次移动做一个标志 由上一次更新的 offset,向对应的 bucket 写入数据 而在这个过程中,如何确定确定 bucket 过期点,以及更新时间。滑动窗口最重要的就是时间更新,下面用图来解释这个过程: 而 bucket 过期点,说白就是 lastTime 即上一个更新时间跨越了几个 bucket:timex.Since(rw.lastTime) / rw.interval 这样,在 Add() 的过程中,通过 lastTime 和 nowTime 的标注,通过不断重置来实现窗口滑动,新的数据不断补上,从而实现窗口计算。 总结 本文分析了 go-zero 框架中的指标统计的基础封装、滑动窗口的实现 rollingWindow。当然,除此之外,store/redis 也存在指标统计,这个里面的就不需要滑动窗口计数了,因为本身只需要计算命中率,命中则对 hit +1,不命中则对 miss +1 即可,分指标计数,最后统计一下就知道命中率。 滑动窗口适用于流控中对指标进行计算,同时也可以做到控流。 关于 go-zero 更多的设计和实现文章,可以关注『微服务实践』公众号。 项目地址 https://github.com/tal-tech/go-zero 欢迎使用 go-zero 并 star 支持我们! 微信交流群 关注『微服务实践』公众号并点击 交流群 获取社区群二维码。

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

iOS开发-UITextView根据内容自适应高度

UITextView作为内容文本输入区域,有的时候我们需要根据内容动态改变文本区域的高度,效果如下: 定义UITextView,实现UITextViewDelegate: 1 2 3 4 5 6 7 8 9 10 11 12 -(UITextView *)textView{ if (!_textView) { //http://www.cnblogs.com/xiaofeixiang/ _textView=[[UITextView alloc]initWithFrame:CGRectMake(30, 200, CGRectGetWidth([[UIScreen mainScreen] bounds])-60, 30)]; [_textView setTextColor:[UIColor redColor]]; [_textView.layer setBorderColor:[[UIColor blackColor] CGColor]]; [_textView setFont:[UIFont systemFontOfSize:15]]; [_textView.layer setBorderWidth:1.0f]; [_textView setDelegate:self]; } return _textView; } 实现textViewDidChange方法: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 -( void )textViewDidChange:(UITextView *)textView{ //博客园-FlyElephant static CGFloat maxHeight =60.0f; CGRect frame = textView.frame; CGSize constraintSize = CGSizeMake(frame.size.width, MAXFLOAT); CGSize size = [textView sizeThatFits:constraintSize]; if (size.height<=frame.size.height) { size.height=frame.size.height; } else { if (size.height >= maxHeight) { size.height = maxHeight; textView.scrollEnabled = YES; // 允许滚动 } else { textView.scrollEnabled = NO; // 不允许滚动 } } textView.frame = CGRectMake(frame.origin.x, frame.origin.y, frame.size.width, size.height); } 本文转自Fly_Elephant博客园博客,原文链接:http://www.cnblogs.com/xiaofeixiang/p/5148380.html,如需转载请自行联系原作者

资源下载

更多资源
Mario

Mario

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

腾讯云软件源

腾讯云软件源

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

Nacos

Nacos

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

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

用户登录
用户注册