C3D

高并发账户记录查询

前提是你 提交于 2020-12-19 08:52:00
【摘要】 面对高并发账户记录查询问题,按照本文的介绍一步一步操作,就能有效提升性能。点击了解 高并发账户记录查询 问题描述 高并发账户记录查询在银行、互联网企业、通信企业中广泛存在。例如:网上银行、手机银行、电商个人账户查询、互联网游戏账户等等。这类查询有三个共同点: 1、 数据总量非常大。用户数量本身就非常多,再加上多年的账户数据,数据量可以达到几千万甚至上亿条。 2、 访问人数众多。几百万甚至上千万人访问,属于高并发查询。 3、 不能让用户等待。手机、网页要达到秒级响应,否则严重影响用户体验。 下面以某银行账户活期明细查询为例,给出这类问题的解决办法。 某银行共一亿个活期账户,每个账户平均每月有 7 条数据,每年数据总量 84 亿条。每条数据中的机构字段,还要关联分支机构表(几千条)记录。在性能上,要求单台服务器支持一千个以上的查询,响应时间不能超过 1 秒。 有序行存 活期明细数据随着时间增长非常快,一年就有 84 亿条。如果放到内存中,需要大量内存空间,硬件投入成本太高,所以要放到硬盘上存储。分支机构表只有几千条数据,可以放在内存中存储。 在硬盘上存储,要考虑是行存还是列存。列存数据分块压缩,能减少遍历数据量。但由于账户查询是随机的,整块读取会有额外解压计算。而且每次取数都针对整个分块,复杂度较高,性能不如行存。因此,这个场景要选择行存存储,如下图: 图 1:行存和列存

前端必知必会之 JS 单线程与异步

半腔热情 提交于 2020-12-18 07:48:38
https://juejin.im/post/5e55272e6fb9a07ca453436f 已知,JavaScript 是单线程的,天生异步,适合 IO 密集型,不适合 CPU 密集型,但是,为什么是异步的喃,异步由何而来的喃,我们将在这里逐渐讨论实现。 一、进程与线程 1. 浏览器是多进程的 它主要包括以下进程: Browser 进程:浏览器的主进程,唯一,负责创建和销毁其它进程、网络资源的下载与管理、浏览器界面的展示、前进后退等。 GPU 进程:用于 3D 绘制等,最多一个。 第三方插件进程:每种类型的插件对应一个进程,仅当使用该插件时才创建。 浏览器渲染进程(浏览器内核):内部是多线程的,每打开一个新网页就会创建一个进程,主要用于页面渲染,脚本执行,事件处理等。 2. 渲染进程(浏览器内核) 浏览器的渲染进程是多线程的,页面的渲染,JavaScript 的执行,事件的循环,都在这个进程内进行: GUI 渲染线程:负责渲染浏览器界面,当界面需要重绘(Repaint)或由于某种操作引发回流(Reflow)时,该线程就会执行。 JavaScript 引擎线程:也称为 JavaScript 内核,负责处理 Javascript 脚本程序、解析 Javascript 脚本、运行代码等。(例如 V8 引擎) 事件触发线程:用来控制浏览器事件循环,注意这不归 JavaScript

前端必知必会之 JS 单线程与异步

我们两清 提交于 2020-12-18 07:48:27
https://juejin.im/post/5e55272e6fb9a07ca453436f 已知,JavaScript 是单线程的,天生异步,适合 IO 密集型,不适合 CPU 密集型,但是,为什么是异步的喃,异步由何而来的喃,我们将在这里逐渐讨论实现。 一、进程与线程 1. 浏览器是多进程的 它主要包括以下进程: Browser 进程:浏览器的主进程,唯一,负责创建和销毁其它进程、网络资源的下载与管理、浏览器界面的展示、前进后退等。 GPU 进程:用于 3D 绘制等,最多一个。 第三方插件进程:每种类型的插件对应一个进程,仅当使用该插件时才创建。 浏览器渲染进程(浏览器内核):内部是多线程的,每打开一个新网页就会创建一个进程,主要用于页面渲染,脚本执行,事件处理等。 2. 渲染进程(浏览器内核) 浏览器的渲染进程是多线程的,页面的渲染,JavaScript 的执行,事件的循环,都在这个进程内进行: GUI 渲染线程:负责渲染浏览器界面,当界面需要重绘(Repaint)或由于某种操作引发回流(Reflow)时,该线程就会执行。 JavaScript 引擎线程:也称为 JavaScript 内核,负责处理 Javascript 脚本程序、解析 Javascript 脚本、运行代码等。(例如 V8 引擎) 事件触发线程:用来控制浏览器事件循环,注意这不归 JavaScript

利用python 进行数据清洗

↘锁芯ラ 提交于 2020-12-02 05:55:59
import pandas as pd data.to_csv( " 路径 " ,encoding=utf-8) 保存文件 data.head() 查看前几行 data.tail() 查看后几行 data.shape 几行几列 data.index 查看索引 data.columns 查看标题 data.values 查看值 data.info 查看整体结构 data.describe() 对数值型数据进行描述统计 data.value_counts()对值计数 data.sort_index(axis =1/0) 对索引进行排序 参数ascending= False 降序排序 data.sort_calues(by = " columens " ) 按照某一行的值进行排序 inplace=True 修改原始数据 选取数据 data.columns data[ " cloumns " ] data.loc[] 显示索引 data.iloc[] 隐示索引 set_option () 函数解决显示不全的问题 # 显示所有列 pd.set_option( ' display.max_columns ' , None) pd.set_option( ' display.max_columns ' , 5) # 最多显示五列 # 显示所有行 pd.set_option( ' display

JAVA UUID 生成

做~自己de王妃 提交于 2020-11-24 06:37:54
UUID是1.5中新增的一个类,在java.util下,用它可以产生一个号称全球唯一的ID public class UTest { public static void main(String[] args) { UUID uuid = UUID.randomUUID(); System.out.println(uuid); } } UUID(Universally Unique Identifier)全局唯一标识符,是指在一台机器上生成的数字,它保证对在同一时空中的所有机器都是唯一的。按照开放软件基金会(OSF)制定的标准计算,用到了以太网卡地址、纳秒级时间、芯片ID码和许多可能的数字。由以下几部分的组合:当前日期和时间(UUID的第一个部分与时间有关,如果你在生成一个UUID之后,过几秒又生成一个UUID,则第一个部分不同,其余相同),时钟序列,全局唯一的IEEE机器识别号(如果有网卡,从网卡获得,没有网卡以其他方式获得),UUID的唯一缺陷在于生成的结果串会比较长。 在Java中生成UUID主要有以下几种方式: JDK1.5 如果使用的JDK1.5的话,那么生成UUID变成了一件简单的事,以为JDK实现了UUID: java.util.UUID,直接调用即可. UUID uuid = UUID.randomUUID(); String s = UUID.randomUUID

Temporal Action Detection(时序动作检测)之R-C3D论文详解

ⅰ亾dé卋堺 提交于 2020-11-20 07:30:05
  本篇文章是基于《R-C3D:Region Convolutional 3D Network for Temporal Activity Detection》的详解,欢迎批评指正。     动作检测(Action Detection)主要用于给分割好的视频片段分类,但在实际中视频多是未分割的长视频,对于长视频的分割并且分类任务叫做时序动作检测(Temporal Action Detection)。给定一段未分割的长视频,算法需要检测视频中的动作片段,包括开始时间、结束时间和动作类别。一段视频可以包含一个或多个相同或不同的动作片段。   Action Recognition和Temporal Action Detection之间的关系和Image Classification和Object Detection之间的关系很像。基于Image Classification产生了例如VGG等网络模型,这些模型在Object Detection中提取目标特征提供很大帮助。同样,Action Recognition相关的模型(例如C3D等)也被广泛用于Temporal Action Detection中提取相关动作特征。   由于Temporal Action Detection和Object Detection存在相似性,很多Temporal Action

PLSQL Developer常用设置

大憨熊 提交于 2020-11-09 20:26:37
[TOC] 显示配置 My objects升到最顶 Tools→User Interface→Object Brower→Filters, 把My objects升到最顶 Tables升到最顶 Tools→User Interface→Object Brower→Folders, 把Tables升到最顶 数据库连接配置 登出默认事物回滚 Tools→Preferences→Oracle→Connection, Logoff with open transacation, 选 Rollback; 检查连接 Tools→Preferences→Oracle→Connection, Check connnection, 勾选; 保存登录信息 Tools→Preferences→Oracle→Logon History, Store history是默认勾选的, 再勾选Store with password, 重新登录在输入一次密码则记住了 查询配置 语句自动选择 鼠标所在的那条SQL语句, 即执行当前SQL语句 Tools→Preferences→Window types→SQL Window, AutoSelect Statement 语句执行热键(可选) 然后按Ctrl+Enter, 更改默认执行得快捷键F8为Ctrl+Enter(类同toad) Tools→Preferences

按指定基准对齐的分组运算

只谈情不闲聊 提交于 2020-11-06 01:54:35
【摘要】 在分组时经常会要求结果集必须按基准集合的次序出现,这种对齐分组在日常统计中是很常见的。我们还能把对齐分组推广成更一般的枚举分组。如何简便快捷的处理对齐分组,这里为你全程解析,并提供 esProc 示例代码。 按指定基准对齐的分组运算 对照一个基准集合,将待分组集合成员的某个字段或表达式与基准集合成员比较,相同者则分到同一个组中,最后拆分出来的组数和基准集合成员数是相同的。这种分组我们称为对齐分组。对齐分组可能会有空组,也可能有成员未分配到任何一个组中。 1. 普通对齐分组 1.1 每组保留最多一个匹配成员 按某字段的指定顺序,将表中所有记录分组并汇总求和。 【例 1】 根据相互关联的课程表和选课表,按课程表顺序查询有哪些课程无人选择: 【SPL 脚本】 A5 的执行结果如下: 1.2 每组保留所有匹配成员 按某字段的指定顺序,将表中所有记录分组并汇总求和。 【例 2】 根据相互关联的员工表和部门表,按部门表中的部门顺序统计各部门人数: 【SPL 脚本】 A5 的执行结果如下: 1.3 不匹配记录放到新组 按某字段的指定顺序,将表中所有记录分组,不匹配记录放到新组。 【例 3】 根据员工薪资表,统计 [California, Texas, New York, Florida] 的平均工资,未指定的州作为“Other”统计。员工薪资表部分数据如下: 【SPL 脚本】 A5

程序员的聚会

时间秒杀一切 提交于 2020-10-17 19:55:45
下车后,第一个来迎接我的,是祢豆车站前的小花园,大片的彩菊在晨风中摇曳生姿,像是爵士酒吧里微醺的优雅舞者。 祢豆是我出生的城市,大学毕业后,每年只有过年才会回家,这次也不例外。 在车站对面的街口有一条横幅,上书“欢迎回家”四个红底白字。横幅下,是一家米粉铺,店外的露天桌椅上,坐满了吃饭的年轻人,各色的行李箱就立在身旁,想必他们也是从远方归乡的务工者。米粉铺的老板我不认识,只见他一只手煮粉调码,另一只手托着手机刷短视频,动作娴熟且精确。他是个很年轻的小伙子,外表看起来与店外食客别无二致。 走出车站时手机震了几下,是大苏打来了电话。 “我来接你了,你在哪呢?” “刚到站,我现在在车站对面的街口,这里有家米粉店。” “好,我马上到。” 大苏是我高中时最好的朋友,现在更成为了同行,我俩都是程序员。高中毕业后,大家都分散到全国,乃至全世界去求学,毕业后也鲜有人留在老家。只有大苏是例外,他没有像其他人一样奔向北上广深纽约东京,而是在完成学业后回到了老家。 几分钟后,一辆崭新的白色雅阁停在我面前,透过降下的车窗,我看到大苏坐在驾驶室嘻嘻地笑着。“兄弟!快上来,这里不能久停的!”他说。我迅速拉开车门坐入副驾,把公务包丢在后座上,嘴里说着好久不见。 车子缓缓地开出了这个街区,向着我家进发。大苏显得很兴奋,他表示我们兄弟两人这么久不见,今晚上要好好地喝一顿,说着递给我一支烟,自己也点上了一支。他说

Python基础变量类型——List浅析

孤者浪人 提交于 2020-10-13 16:15:27
Python使用list 一、list Python内置的一种数据类型是列表:list。list是一种有序的集合,可以随时添加和删除其中的元素。 比如,列出班里所有同学的名字,就可以用一个list表示: classmates = ['Michael', 'Bob', 'Tracy'] print(classmates) 变量classmates就是一个list。 len()函数 1. 获得list元素的个数: classmates = ['Michael', 'Bob', 'Tracy'] print(len(classmates)) 用索引来访问list中每一个位置的元素,记得索引是从 0 开始的: classmates = ['Michael', 'Bob', 'Tracy'] print(classmates[0]) print(classmates[1]) print(classmates[2]) print(classmates[3]) 当索引超出了范围时,Python会报一个IndexError错误,所以,要确保索引不要越界,记得最后一个元素的索引是len(classmates) - 1。 如果要取最后一个元素,除了计算索引位置外,还可以用 -1 做索引,直接获取最后一个元素: print(classmates[-1]) 以此类推,可以获取倒数第2个、倒数第3个: