Other

五、创建对象内存分析

 内存分析图   宠物类 public class Pet { String name; int age; void speak(String words){ System.out.println(words); } static void sayHi(){ System.out.println(Hi); } }  测试类 public static void main(String[] args) { Pet dog = new Pet(); dog.name=小狗; dog.age=2; dog.speak(汪汪汪); Pet cat = new Pet(); cat.name=小狗; cat.age=2; dog.speak(喵喵喵); }  

PostgreSQL库表字段信息

数据库 SELECT * FROM pg_database; 表信息 SELECT schemaname,tablename,tableowner,hasindexes,hasrules,obj_description(relfilenode,'pg_class') AS description FROM pg_tables AS tb INNER JOIN pg_class cs ON cs.relname = tb.tablename WHERE tablename NOT LIKE 'pg%' AND tablename NOT LIKE 'sql_%' ORDER BY tablename; 字段信息 select table_catalog,table_schema,column_name,ordinal_position,udt_name,character_maximum_length from information_schema.columns where table_schema='public' and table_name='TableName' order by ordinal_position;

[机器学习]三角不等式加速K均值聚类及C++实现

本博客涉及代码可在GitHub下载:传送门 K均值聚类 K均值聚类是常用的欧式距离聚类算法,即认为两个目标向量的差的模长越小,两个目标越可能是一类的。 通俗理解:牧师-村民模型 有四个牧师去郊区布道,一开始牧师们随意选了几个布道点,并且把这几个布道点的情况公告给了郊区所有的村民,于是每个村民到离自己家最近的布道点去听课。听课之后,大家觉得距离太远了,于是每个牧师统计了一下自己的课上所有的村民的地址,搬到了所有地址的中心地带,并且在海报上更新了自己的布道点的位置。牧师每一次移动不可能离所有人都更近,有的人发现A牧师移动以后自己还不如去B牧师处听课更近,于是每个村民又去了离自己最近的布道点……就这样,牧师每个礼拜更新自己的位置,村民根据自己的情况选择布道点,最终稳定了下来。 可以发现该牧师的目的是为了让每个村民到其最近中心点的距离和最小。 数学模型 参考K-Means聚类算法原理 收敛性证明 参考k-means聚类算法的收敛性证明与应用 三角不等式加速 定理1及优化 定理1:x是一个数据点,b和c是中点,如果 \(|bc|\geq 2|xb|\) 则有 \(|xc|\geq |xb|\) 使用三角不等式(两边之和大于第三边)即可证明。有了这条性质,我们如此考虑,若数据点x此时锚定了中点b,且我们知道 \(|xb|\) 或 \(|xb|\) 的一个上界,而 \(|bc|\geq 2|xb|\),那么我们不用考虑x点会从b点转移到c点去,节约了计算 \(|xc|\) 的时间。 定理2及优化 定理2:x是一个数据点,b和c是中点,有 \(|xc|\geq max\{0,|xb|-|bc|\}\)。 使用三角不等式(两边之和大于第三边)即可证明。 对于锚定了中点b的数据点x,考虑是否转移到另一个中点c,若我们知道 \(|xb|\) 的上界和 \(|xc|\) 的下界,且上界小于这个下界,那一定不考虑。在算法开始的时候上界和下界可以直接赋值为距离,在后续的迭代中,需要保证上下界的合法。 我们不维护每一对点的距离的上界,只维护一个数据点到它的锚定点的距离的上界u(x)。一开始数据点到锚定点的距离是确定的,上界也确定,若该点的锚定点发生了位移,根据定理1则 u(x)+=dis(m(c(x)),c(x)),m(c)表示c位移后的位置(代码中为mean),c(x)表示x数据点点锚定的中点。同时当我们计算x到它锚定点的距离的时候,我们顺手更新一下这个上界为x到它当前的锚定点的距离,让它不会一直增大以至于算法后期失去约束能力。同时,我们可以记录一下这个点它的上界是否仍然是c到x的距离,如果是的话,我们又能省去一次计算距离。 我们维护每一个数据点x到中点c的距离的下界l(x,c),一开始赋值为距离,迭代的时候,根据定理2,l(x,c)=max{l(x,c)-dis(c,m(c)),0}。 伪代码 C++实现思路 KMean KMeans(vector<vector<double>> dataset, vector<int> label, int cluster_number) 构造函数接口涉及为二维动态数组传数据点,一维数据传标签,最后一个int传聚类数量(k的值)。 vector<int> result; 算法结果 int iterator_times; 迭代次数 class Point; class Data_point; class Center; double cal_dis(Point &a, Point &b) void cal_disc(){ Calculate distance between centers and s(c) void init() Initialization bool repeat() Repeat steps void getResult() Get result and save to result void mainThread() Point 某种意义上是个抽象类

apache2.4+php7.4+mysql5.3基本配置

Apache2.4: httpd-2.4.46-win64-VC15.zip PHP7: php-7.4.16-Win32-vc15-x64.zip Mysql5.7: mysql-5.7.17-winx64.zip  一、Apache安装: i. 获取Apache: www.apachelounge.con/download/ ii. 解压: e:/web/apache2.4 iii. 配置conf/httpd.conf: c:/Apache24 => e:/web/apache2.4 #ServerName www.example.con:80 => ServerName www.example.con:80 iv. CMD(管理员): e: cd e:/web/apache2.4/bin httpd.exe -k install net start apache2.4 net stop apache2.4 #停止服务 注:当修改配置文件时,要关闭服务再开。  二、PHP安装 i. 获取PHP: php.net ii. 解压PHP: e:/web/php iii. 创建配置文件并修改: cp e:/web/php/php.ini-development e:/web/php/php.ini #修改 ;extension=php_curl.dll => extension=php_curl.dll ;extension=php_gd2.dll => extension=php_gd2.dll ;extension=php_mbstring.dll => extension=php_mbstring.dll ;extension=php_mysqli.dll => extension=php_mysqli.dll ;extension=php_pdo_mysql.dll => extension=php_pdo_mysql.dll;extension_dir = ext => extension_dir = e:/web/php/ext  iv.

java获取nginx反向代理的客户端真实ip(非服务器ip)

在使用nginx方向代理后 Remote Address代表的就是服务器的ip地址,而不是客户端的ip地址了,想要获取真实ip,就需要在nginx里面配置 worker_processes 1; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; log_format main '$remote_addr - $http_x_forwarded_for - $http_x_real_ip'; access_log logs/access.log main; sendfile on; keepalive_timeout 65; upstream tomcat_server_pool{ #server 172.17.0.14:3000 weight=10; #server 172.17.0.14:3001 weight=10; server 127.0.0.1:1001 weight=10; } server { listen 80; server_name localhost; location / { proxy_pass http://tomcat_server_pool; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; root html; index index.html index.htm; } } }  其中X-Real-IP和X-Forwarded-For都是客户端真实地址

【原创】Python 二手车之家车辆档案数据爬虫

本文仅供学习交流使用,如侵立删! 二手车之家车辆档案数据爬虫 先上效果图 环境 win10 python3.9 lxml、retrying、requests 需求分析 需求: 主要是需要车辆详情页中车辆档案的数据 先抓包分析一波,网页抓包没有什么有用的,转战APP 拿到数据接口就简单了,直接构造请求保存数据即可 获取车辆信息列表 def _get_car_list(self, _url: str): 获取二手车信息列表 res = self._parse_url(_url=_url) ret = res.text # 解析获得字符串类型数据 result = etree.HTML(ret) # 转换数据类型为HTML,方便使用xpath url_list = result.xpath('//*[@id=goodStartSolrQuotePriceCore0]/ul/li/a/@href') if not url_list: print('获取完成!') return for i in url_list: # 有些车型url直接是带域名的 if 'www.che168.com/' in i: yield 'https://' + i[2:] else: yield 'https://www.che168.com' + i 获取车辆详情信息 def _get_car_info(self, _url: str): 获取车辆详情信息 res = self.

java知识点

java具有跨平台性*** jdk(jre(jvm)) 删除jdk方法: 1.删除jdk安装目录 2.打开环境变量 3.删除java_home 4.删除path下关于java的目录 5.java-version查看是否已删除  jdk下载: 百度jdk8,选Oracle网址下的 选版本下载(右键此电脑属性查看电脑的系统) 双击安装包 记住jdk的安装路径  搜索 复制

磊磊零基础打卡算法:day11 c++ 区间合并

5.12 区间合并问题: 题目描述:给出n段区间,如果区间内,l -r存在交集,那么就可以合并,需要更新区间,如果不存在交集,那么就直接将单独的区间个数++,最后返回区间合并后的区间个数    解题思路: 将区间通过pair进行归类,并排序(可以去除包含的区间,并且可以从小到大排序也方便进行插入,计数); 找到没有交集的前后区间,进行计数; 找到有交集的区间,进行更换区间; #include iostream #include algorithm #include vector using namespace std; typedef pair<int, int> pii; vector<pii> segs; int n; void merge(vector<pii> &segs) { sort(segs.begin(), segs.end()); //排序后可以将本来是完全子区间的直接去重掉,sort对于pair排序的话,是先对前面进行排序,然后再对后排 vector<pii> res; int st = -2e9, ed = -2e9; //将一开始的左边和右边都置为负无穷 for (auto seg: segs) { //对所有segs里面的值进行遍历 if (ed < seg.first) { //如果是两条线段的话,原来线段的末尾<后面一条线段的最开始,那么就是需要进行计数加加的时候; if (st !

Head First Java学习:第十四章-序列化和文件

第十四章 序列化和文件的输入输出 保存对象  1、什么是序列化和反序列化  在编程的世界当中,常常有这样的需求:我们需要将本地已经实例化的某个对象,通过网络传递到其他机器当中,为了满足这种需求,就有了所谓的序列化和反序列化。 序列化就是,把内存中的某个对象压缩成字节流的形式; 反序列化就是,把字节流转换成内存中的对象。  2、把序列化对象写入文件 四部曲: // 创建出 FileOutputStream FileOutputStream fs = new FileOutputStream(foo.ser);// 创建ObjectOutputStreamObjectOutputStream os = new ObjectOutputStream(fs);// 写入对象os.writeObject(myBox);// 关闭ObjectOutputStreamos.close();  说明: stream 串流,把stream连接起来代表源和目的地的连接,即文件和网络端口的连接。串流 必须要连接到某处才能算是个串流。  串流一般要俩俩连接才能做出有意义的事情,一个表示连接,一个要被调用方法。  按照单一设计原则,每个类做一件事情。 FileOutputStream 把字节写入文件。 ObjectOutputStream 把对象转换成可以写入串流的数据。 调用ObjectOutputStream的writeObject时,对象会被打成stream 送到FileOutputStream,来写入文件。  3、对象被序列化发生了什么? 在堆上的对象,有状态即实例变量的值。这些值让同一类的不同实例有不同意义。 被序列化的对象,保存了实例变量的值因此之后可以在堆上带回一模一样的实例。  实例变量的值和java虚拟机所需要的信息会被保存到文件中,一般是字节码或者xml编码格式文件。  对象的状态时什么,有什么需要保存? 对象的状态 –—— 实例变量的值 如果是 primitive 主数据类型,直接保存 如果是引用其他对象,那所有对象都被保存。  当对象被序列化,该对象引用的实例变量也会被序列化。且所有被引用的对象也会被序列化。这些操作都是自动进行的。  4、类要被序列化,就要实现 Serializable objectOutputStream.writeObject(myBox); myBox必须要实现序列化,否则执行会出问题。  如果序列化的类中,实例变量引用了非序列化的类,执行会报错。  Serializable接口没有任何方法需要实现,唯一目的是申明有实现它的类是可以被序列化的。某个类被序列化,其子类自动可以序列化。