AI之 panda
pandas 是python中的一个 数据分析库,填补了python在数据分析中的不足,同 numpy 、matplotlib一起 为python的小规模数据分析提供强大的支持。
** 数据分析的一般步骤**
数据整理和清洗
数据分析与建模
数据可视化和制表
pandas 在数据的处理方面表现卓越.
数据结构seriesseries (系列),在pandas中可以表示所有的由一维数据组成的数据结构。
123456789import pandas as pdl = [0,1,7,9,np.NAN,None,1024,512]# ⽆论是numpy中的NAN还是Python中的None在pandas中都以缺失数据NaN对待s1 = pd.Series(data = l) # pandas⾃动添加索引s2 = pd.Series(data = l,index = list('abcdefhi'),dtype='float32') # 指定⾏索引# 传⼊字典创建, key⾏索引s3 = pd.Series(data = {'a ...
AI之 python 基础
为什么是python
语法极简
数据分析领域极度火热
流行语言排名1
其他资料直接ai,metaso
4行代码,实现一万数据的正态分布显示。
1234import matplotlib.pyplot as pltimport numpy as npplt.hist(np.random.randn(10000), bins=40)plt.show()
安装
安装帖子多如牛毛,找资料安装即可
python2 已不建议使用
对于初学者和数据分析领域建议安装 anconda
IDE
vscode、cursor
jupyter notebook
pychem (idea同源)
主要语法变量变量即可变的量,在python中,可以直接定义
123a = 100b='zifuc'print(a)
命名规则
字母、数字、下划线
数字不做开头
区分大小写
python 约定俗成
普通变量建议小写
不建议 字母+数字的命名方式;
驼峰写法 or 下划线写法 (统一即可)
关键字1234567False await else import passNone break ...
1g内存如何存储1亿数据
1g内存如何存储1亿数据假设每条地址数据包含如下字段:1234567public class Location { String city; // 城市,如"北京市" String region; // 区域,如"海淀区" String countryCode;// 国家代码,如"CN" double longitude; // 经度 double latitude; // 纬度 }
一、原始数据结构:内存爆炸的根源123456public class Location { private String city; // 20字节 private String region; // 20字节 private String countryCode;// 4字节 private double ...
上亿号码去重方案
40亿个qq号,如何实现去重,限制内存1g的情况下。从QQ号和内存限制说起QQ号其实是一串数字,范围是4字节的无符号正整数,也就是32位,理论上最大值接近43亿。所以,如果单纯存储这40亿个QQ号,需要耗费多少内存呢?
简单计算一下:
14000000000*4 /1024/1024/1024 ≈ 15GB
总共需要15GB的内存,显然远远超过了题目给的1GB限制。这就需要我们换个思路,不能“硬塞”,要想办法巧妙地存储和处理这些QQ号。
所以问题的本质就是“在内存非常有限的情况下,高效实现重复数据的去重”。
解决方案有很多,但是主流的方案有两种:
方案1:使用BitMap
方案2:使用布隆过滤器
两者各有千秋,但在本题中,我们使用BitMap更加合适。
2.解决方案:用BitMap的精妙之处化繁为简2.1 什么是BitMap?所谓位图(BitMap)其实就是一个bit数组,即每一个位置都是一个bit,其中的取值可以是0或者1。
通俗点说,BitMap就像一个超级节省空间的“登记簿”。
如果某个QQ号存在,就在对应的“格子”上标记为1;
如果不存在,则是0。
比如,我们需要记录 ...
seate中的tcc
Alibaba-Seata TCC1. 什么是TCC
TCC 基于分布式事务中的二阶段提交协议实现,它的全称为 Try-Confirm-Cancel,即资源预留(Try)、确认操作(Confirm)、取消操作(Cancel),他们的具体含义如下:
Try:对业务资源的检查并预留;
Confirm:对业务处理进行提交,即 commit 操作,只要 Try 成功,那么该步骤一定成功;
Cancel:对业务处理进行取消,即回滚操作,该步骤回对 Try 预留的资源进行释放。
XA是资源层面的分布式事务,强一致性,在两阶段提交的整个过程中,一直会持有资源的锁。
TCC是业务层面的分布式事务,最终一致性,不会一直持有资源的锁。
TCC 是一种侵入式的分布式事务解决方案,以上三个操作都需要业务系统自行实现,对业务系统有着非常大的入侵性,设计相对复杂,但优点是 TCC 完全不依赖数据库,能够实现跨数据库、跨应用资源管理,对这些不同数据访问通过侵入式的编码方式实现一个原子操作,更好地解决了在各种复杂业务场景下的分布式事务问题。
常见开源TCC框架:
Seata TCC
Hmily
Tcc-T ...
cpu打到100的分析
CPU 飙升是一个常见的问题。
CPU100%定位的两大神器
想要定位到具体是哪一行的代码导致, 一般都会使用下面的两大神器
通常使用的jvm自带的工具jstack,
还有一种就是开源神器arthas,
一般而言,arthas还有其它的功能,所以选择它多一点.
CPU 飙升100%的解决思路****与方法论
使用jstack 解决CPU 100%问题实操使用jstack 解决CPU 100%问题,在方法论上要用到两个命令,
top 命令查看TOP N线程,
jstack命令查看堆栈信息
1.jstack命令讲解命令jstack是java堆栈的跟踪工具,可以打印出程序中所有线程的堆栈信息,包括线程状态,调用栈信息,锁信息等。
jstack可以诊断线程死锁、内存泄漏等问题
命令格式: jstack [options] pid
常用例子: jstack -l pid,查看线程的堆栈信息
堆栈信息解读:
123456789101112131415161718192021222324252627282930313233343536[root@192-168-65-185 ~]# jst ...
java中的各种锁
1、锁选择维度选择适合的锁通常依赖于特定的应用场景和并发需求。以下是一个表格,概述了不同锁类型的关键特性和选择它们的考量维度:
锁类型
适用场景
锁模式
性能特点
公平性
锁的粗细
条件支持
阻塞策略
用途举例
synchronized
简单的同步需求,无需复杂控制
独占式
适中,偏向锁、轻量级锁优化
无公平策略
粗粒度锁
不支持
阻塞等待
单例模式、简单的计数器
ReentrantLock
需要灵活的锁控制,如可中断、超时、尝试锁定等
独占式
高,支持多种锁定方式
可配置公平性
细粒度锁
支持
可中断、超时、尝试
同步代码块或方法、复杂同步控制
ReadWriteLock
读多写少的场景
共享-独占式
高,提高读操作并发性
不支持公平性
细粒度锁
不支持
阻塞等待
缓存系统、文件系统
StampedLock
读多写多,需要乐观读和悲观写的场景
乐观读-悲观写
高,提供读写锁的扩展
可配置公平性
细粒度锁
支持
可中断、超时、尝试
高性能计数器、数据缓存
CountDownLatch
需要等待一组操作完成的场景
无
低,一次性
不支持公平性
粗粒度锁
不支持 ...
java中CAS
1.CAS介绍什么是 CASCAS(Compare And Swap,比较与交换),是非阻塞同步的实现原理,它是CPU硬件层面的一种指令,从CPU层面能保证”比较与交换”两个操作的原子性。CAS指令操作包括三个参数:内存值(内存地址值)V、预期值E、新值N,当CAS指令执行时,当且仅当预期值E和内存值V相同时,才更新内存值为N,否则就不执行更新,无论更新与否都会返回否会返回旧的内存值V,上述的处理过程是一个原子操作。
用Java代码等效实现一下CAS的执行过程:
-
123456789101112131415161718192021public class CASDemo { // 内存中当前的值 private volatile int ramAddress; /** * @param expectedValue 期望值 * @return newValue 更新的值 **/ public synchronized int compareAndSwap(int exp ...
ES 深度分页问题
ES 深度分页问题及其解决方案详解1. 什么是深度分页深度分页是指在处理大数据集查询时,用户尝试访问多页数据中较后面的页面时遇到的问题。当尝试访问排序后的数据列表的第1000页或更后面的页面时,数据库需要先跳过前面数十万条记录,这一过程通常涉及大量的数据扫描和排序,极大地增加了数据库的查询负载,从而成为性能瓶颈。
ES分页查询流程大致如下:
数据存储在各个分片中,协调节点将查询请求转发给各个节点,当各个节点执行搜索后,将排序后的前N条数据返回给协调节点。
协调节点汇总各个分片返回的数据,再次排序,最终返回前N条数据给客户端。
这个流程会导致一个深度分页的问题,也就是翻页越多,性能越差,甚至导致ES出现OOM。
在分布式系统中,对结果排序的成本随分页的深度成指数上升。
从10万名高考生中查询成绩为的10001-10100位的100名考生的信息。
从上面案例中不难看出,每次有序的查询都会在每个分片中执行单独的查询,然后进行数据的二次排序,而这个二次排序的过程是发生在heap中的,也就是说当你单次查询的数量越大,那么堆内存中汇总的数据也就越多,对内存的压力也就越大。这里的单次查询的数据 ...
Java异步编程Future&CompletableFuture实战
Java异步编程Future&CompletableFuture实战1. allable&Future&FutureTask介绍直接继承Thread或者实现Runnable接口都可以创建线程,但是这两种方法都有一个问题就是:没有返回值,也就是不能获取执行完的结果。因此java1.5就提供了Callable接口来实现这一场景,而Future和FutureTask就可以和Callable接口配合起来使用。
1234567@FunctionalInterfacepublic interface Runnable { public abstract void run();}@FunctionalInterfacepublic interface Callable<V> { V call() throws Exception;}
Runnable 的缺陷:
不能返回一个返回值
不能抛出 checked Exception
Callable的call方法可以有返回值,可以声明抛出异常。和 ...