自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

PacosonSWJTU的博客

技术分享,互惠你我!wish to make progress with everyone.

  • 博客(1009)
  • 资源 (3)
  • 问答 (4)
  • 收藏
  • 关注

转载 (转)网络系统-IO多路复用

最基础的 TCP 的 Socket 编程,它是阻塞 I/O 模型,基本上只能一对一通信,那为了服务更多的客户端,我们需要改进网络 I/O 模型。比较传统的方式是使用多进程/线程模型,每来一个客户端连接,就分配一个进程/线程,然后后续的读写都在对应的进程/线程,这种方式处理 100 个客户端没问题,但是当客户端增大到 10000 个时,10000 个进程/线程的调度、上下文切换以及它们占用的内存,都会成为瓶颈。

2024-06-08 21:28:13 97

转载 算法递归简论

【0】README0.1) 本文总结于 数据结构与算法分析,旨在了解设计 递归程序 的相关法则和技巧;【1】 递归简论1.1)当编写递归例程的时候,关键是要牢记递归的四条基本法则-Principle:P1)基准情形:必须总是有某些基准情形,它无需递归就能解除;P2)不断推进:对于那些需要递归求解的情形,每一次递归调用都必须要是求解状况朝接近基准情形的方向前进;P3)设计法则:假设所有的递归调用

2015-11-07 11:17:21 1233

原创 数据结构排序总结

【0】README0.1) 本文总结于 数据结构与算法分析+个人的学习心得体会,源代码均为原创; 0.2) 本文列出了数据结构中基本上所有的数据结构排序算法, 整理了相关的博文(源代码); 0.3)对于数据结构排序的遗憾是, 这个排序,哥子已经搞了整整1周了,搞乏了,所以没有实现 以 Sedgewick 增量序列 { 或者是 9*4^i - 9*2^i + 1或者是 4^i - 3*2^i +

2015-11-07 09:03:23 1712

原创 python基础-16-处理csv文件和json数据

2)json不能存储每种python数据类型, 只能包含以下类型的对象,包括字符串,整型, 浮点型,布尔型,列表,字典和NoneType;1)对于包含列标题的csv文件,通常使用DictReader和DictWriter对象,而不是 reader和writer对象;1)使用csv模块读取csv文件,需要创建一个reader对象,reader对象让你迭代遍历csv文件中的每一行;1)csv文件:csv是一种文件格式,csv格式的文件是一个文本文件,具有用逗号分割的值;

2025-04-05 11:36:51 488

原创 python基础-13-处理excel电子表格

1)Excel文档:就是一个工作簿,一个工作簿保存到xlsx文件;一个工作簿可以有多个工作表,即sheet;本文总结自《python编程快速上手-让繁琐工作自动化》第13章,非常棒的一本书,墙裂推荐;1)可以把Worksheet切片,取得表格中一行,一列或一个矩形区域中的所有单元格;1)调用 create_sheet() 和 del操作符 用于创建和删除工作表;1)从工作簿读取单元格涉及的所有函数,方法和数据类型;1)python使用Worksheet抽象工作表。

2025-04-05 10:41:55 144

原创 python基础-11-调试程序

【补充】写入文件errorInfo.txt的内容就是11.2 Traceback (most recent call last): 打印出的异常栈内容;1)异常的回溯字符串包括:错误信息, 导致该错误的代码行号,以及导致该错误的函数调用的序列,这个序列称为调用栈;1)调用logging.disable(level):禁止该级别和更低级别的所有日志消息;1)断言,异常,日志和调试器都是在程序中发现和预防bug的有效工具;1)断言:是健全性检查,用于确保代码没有做什么明显错误的事情;

2025-04-05 07:19:17 642

原创 python基础-10-组织文件

1)shutil.copytree: 把src路径表示的文件夹及其子文件夹及所有文件一并复制到des文件夹下;1)shutil.copy(src,des):把src路径下的文件复制到des路径下,其中src与des都是字符串;3)把当前路径下的src文件夹下的src01.txt文件复制到当前文件夹下的target文件夹下,且指定复制后的文件名为src01_copy.txt。1)os.walk(dirPath):被传入一个文件夹路径,遍历该文件夹下的子文件夹及文件;情况2:src是文件名,des是文件夹名;

2025-04-04 22:17:36 579

原创 python基础-09-读写文件

【补充】 导入pathlib的惯例是运行 from pathlib import Path,如果不这样做,我们就必须通过 pathlib.Path 来使用Path()函数;2)如何安全执行 os.makedirs() 与 Path().mkdir ,若path对象表示的文件或文件夹存在,则不创建;只有基本数据类型,才可以使用pprint.pformat把变量作为简单文本写入一个文件,如整型,浮点型,字符串,列表,字典;1)Path对象具有glob() 方法,用于根据通配符glob模式,列出文件夹的内容;

2025-04-04 22:15:17 510

原创 python基础-07-模式匹配与正则表达式

1)用花括号匹配特定次数 (ha){3} 匹配 ‘HaHaHa’ (ha){3,5} 匹配最少3个ha且最多5个ha的字符串。2)同时使用插入字符与美元字符: 表示整个字符串必须匹配该模式,也就是说,只匹配该字符串的某个子集是不够的;2)Regex对象的search()方法查找传入的字符串,返回该正则表达式所有的匹配;1)用\d表示任何数字, 等价于 (0|1|2|3|4|5|6|7|8|9)1)用+加号匹配一次或多次 (如果匹配真正的+号,使用+)1)用*星号匹配0次或多次(如果匹配真正的*号,使用*)

2025-03-25 08:30:39 1055

原创 python基础-04-字符串操作

2)原始字符串: 在字符串开始的单引号前加上r,表示这个字符串是原始(raw=原生)字符串;原始字符串完全忽略字符串中的所有转译字符,可以输出字符串中的转译字符;1)partition()字符串函数:将字符串分成分隔符字符串前后的文本,返回包含3个子字符串的元组,包括分隔符之前的文本,分隔符本身,分隔符之后的文本;1)字符串:把字符串看做一个列表,字符串中的每个字符都是一个元素,即字符串也可以使用索引和切片;1)如何在字符串中包含单引号(python中的字符串以单引号开始和结束);

2025-03-22 15:12:56 924

原创 python基础-03-字典数据类型

1)字典是非常有用的, 可以把一些键映射到另一些值;不像列表只包含一系列有序的值;字典中的值可以通过[] 访问的(与列表类似),但字典不仅仅使用整数索引,还使用其他数据类型索引如整型,浮点型,字符串或元组当然字典也可以通过get()函数访问。

2025-03-22 11:54:26 649

原创 python基础-02-列表+序列数据类型

【补充】如果要复制的列表中包含了列表, 那就使用copy.deepcopy()函数来代替,deepcopy()将同时复制它们内部的列表;1)注意:需要说明的是, del语句删除列表中指定索引的元素,被删除元素后面的所有元素,都会向前移动一个索引;1)什么是引用: 变量存储的是对计算机内存位置的引用,或者简单理解引用就是值的内存地址(我是这么理解的)2)在一个切片中:第1个整数是开始索引(包含),第2个整数是结束索引(不包含);1)列表的方法与函数是同一回事,只不过,列表的方法在一个值上进行调用;

2025-03-22 11:18:49 1015

原创 python基础-01-常用数据类型+控制流+函数定义

print('\n=== 定义有参函数 ===')# 调用有参函数# === 定义有参函数 ===

2025-03-22 11:06:46 537

原创 spring声明式事务原理02-调用第1层@Transactional方法-按需创建事务createTransactionIfNecessary

【DataSourceTransactionManager#doGetTransaction】创建逻辑事务创建DataSourceTransactionObject-逻辑事务对象;根据数据源从TransactionSynchronizationManager获取连接持有器;把数据库连接持有器conHolder绑定到逻辑事务对象;第1层@Transactional方法不走这个分支,即事务不存在;若存在,则调用 handleExistingTransaction;【本文不涉及】

2025-03-16 15:11:18 659

原创 spring声明式事务原理01-调用第1层@Transactional方法(事务访问入口)

transactionManager:事务管理器(封装了事务提交,回滚功能)TransactionAttribute:事务属性 (@Transaction注解元数据)joinpointIdentification:切点标识(被@Transaction标注的目标方法的全限定名称)TransactionStatus:事务状态 (封装获取事务状态的方法,如是否只读,是否回滚,是否保存点,事务是否完成,当前线程是否存在事务等)oldTransactionInfo-上一个事务信息对象;

2025-03-16 11:40:36 738

转载 spring声明式事务@Transactional底层原理

1. Mybatis是如何整合进Spring中的 - Spring如何知道哪些接口是Mapper接口的?- Mapper接口是如何变成Spring Bean的?2. Spring在哪里声明的SqlSession的实现逻辑?3. Spring中声明式事务的实现方式是怎样的?4. Spring中如何处理嵌套事务的?5. Spring中事务的传播方式是如何实现的?一篇文章带你了解Spring声明式事务的底层实现原理。【1】一篇文章带你了解Spring声明式事务的底层实现原理。

2025-03-06 23:05:12 30

转载 es-resthighlevelclient客户端批量写入数据(转)

搜索词条:how es resthighlevelclient bulk insert。

2025-02-09 19:00:40 36

原创 mysql官方文档翻译02-一致性非锁定读与一致性锁定读

参考资料::一致性读是一种读操作,它使用快照信息根据某个时间点呈现查询结果,不考虑其他事务同时执行的变更。如果查询的数据被另一个事务修改,则根据撤销日志内容重建原始数据。这种技术避免了一些锁定问题,这些问题可能会通过强行当前事务等待其他事务完成而降低并发度。在可重复读隔离级别下,快照的时间是根据第一次读取操作执行的时间点。而读已提交隔离级别下,快照的时间会重置为每次一致性读操作执行的时间点。在读已提交或可重复读隔离级别下,一致性读是innodb处理select语句的默认模式;

2025-01-19 16:48:57 1035

原创 mysql官方文档翻译01-innodb多版本并发控制

更新撤销日志可以用于一致性读,仅当不存在innodb为其分配快照的事务后,更新撤销日志可以删除。而在一致性读中,该快照可能需要更新撤销日志中的信息构建数据行的早期版本。innodb丢弃删除操作的更新撤销日志记录后才会物理删除对应数据行及其索引。否则,innodb不会删除更新撤销日志中的数据,而且回滚段可能会变得太大,填满它所在的撤销表空间。5.在innodb多版本控制模式中,当删除sql执行时,一个数据行并不是立即被物理删除。插入撤销日志仅在事务回滚时需要,一旦事务提交可以被删除。

2025-01-19 15:37:58 211

原创 redis开发与运维-redis0401-补充-redis流水线与Jedis执行流水线

但问题是大部分命令不支持批量操作,如hgetall,即批量业务场景只能执行单条命令,网络IO高,导致RTT高。1)redis流水线:能够将一组redis命令进行组装, 通过一次RTT传输给redis,再将这组执行结果一次性返回给客户端;即使用pipeline执行n次命令,耗时1个RTT;1)在不同网络环境下, 10000条set未使用流水线命令 与 使用流水线命令执行耗时如下。1)每次流水线封装的命令不能太多,流水线组装的命令过多可能导致阻塞;2)解决方法: 可以将包含大量命令的流水线拆分为多个小流水线;

2024-12-28 11:32:07 1124

原创 redis开发与运维-redis04-redis客户端Jedis与连接池及客户端异常模拟

原因1-客户端: 高并发下连接池设置过小,供不应求;原因2-客户端:没有正确使用连接池,jedis连接没有释放;原因3-客户端:存在慢查询,慢查询会导致业务线程归还Jedis连接速度变慢,最终导致连接池被顶满;原因4-服务端:redis服务器执行客户端命令时存在阻塞,与慢查询类似,会导致业务线程归还Jedis连接速度变慢,最终导致连接池被顶满;

2024-12-28 11:27:44 897

原创 redis开发与运维-redis03-redis其他数据类型与命令(Bitmaps++HyperLogLog+GEO)

增加地理位置信息。【注意1】如果此时有userid=50的用户访问了chatgpt,那么Bitmaps第6号到第49号偏移量上的值为0,第50号偏移量上的值为1;bitop是一个复合操作,可以做多个Bitmaps的and交集, or并集, not非,xor异或运算,并把结果保存到result_key;1)Bitmaps定义:Bitmaps不是一种数据结构,它就是字符串,只不过可以对字符串的位(单个bit)进行操作;3)bitcount key [start end] 获取指定范围值为1的bit个数。

2024-12-22 16:21:40 855

原创 redis开发与运维-redis02-redis数据类型与命令总结

命令命令描述时间复杂度设置键与值O(1)get key获取键的值O(1)删除键O(k),k为键的个数批量设置多个键值对O(k),k为键的个数批量获取多个键的值O(k),k为键的个数incr keyKey的值自增O(1)decr keyKey的值自减O(1)Key的值增加incrementO(1)Key的值减少incrementO(1)Key的值增加incrementO(1)向key的值的尾部追加valueO(1)strlen key。

2024-12-21 16:53:41 861

转载 (转)redis揭秘-Redis内存数据库必读的4本书

Redis从一个不为人熟知、只有少量应用的崭新数据库,逐渐变成了内存数据库领域的事实标准。时至今日,经过大量的实践应用,Redis简洁高效、安全稳定的特性已经深入人心。无论是国内还是国外,从五百强公司到小型初创公司都在使用Redis,很多云服务提供商还以Redis为基础构建了相应的缓存服务、消息队列服务以及内存存储服务,当你使用这些服务时,实际上就是在使用Redis。

2024-12-01 16:56:51 72

原创 redis揭秘-redis01-redis单例与集群安装总结

Redis从入门到放弃(8):哨兵模式1)为什么哨兵需要多个节点的原因:哨兵节点也存在单点故障。因此,为防止Sentinel发生意外,Sentinel也需要实现集群高可用,即需要多哨兵模式,实现了哨兵节点的高可用(本文部署了3个哨兵节点)。Sentinel不只是监控Redis节点,各Sentinel节点之间也会互相监控。

2024-12-01 10:49:14 981

转载 (转)signature hdr data: BAD, no. of btyes(9088) out of range 问题排查与解决方案

在使用yum工具安装gcc的时候,报出了signature hdr data: BAD, no. of btyes(9088) out of range 的问题:这是由于centos8中rpm工具存在的一个bug,在校验安装包头部大小的时候,应当限制为64M,但是实际限制了64k。再使用这个安装命令的时候,推荐的依赖工具中包含了tpm2-tss-2.3.2-6.el8.x86_64.rpm 但是这个包的头部大小也会超出限制。查看你本机的rpm版本可以使用命令。手动安装更高版本的rpm。

2024-11-30 15:12:57 172

原创 centos8:Could not resolve host: mirrorlist.centos.org

【代码】centos8:Could not resolve host: mirrorlist.centos.org。

2024-11-30 14:02:20 930

原创 springboot源码02-springboot启动主要步骤总结

【发布事件:事件名=应用开始启动,事件类型=ApplicationStartingEvent 】【发布事件: 事件名=环境初始化完成, 事件类型=ApplicationEnvironmentPreparedEvent 】【发布事件: 事件名=容器初始化完成,事件类型=ApplicationContextInitializedEvent 】【发布事件:事件名=启动容器关闭,事件类=BootstrapContextClosedEvent 】

2024-11-21 23:05:09 512

原创 springboot源码01-springboot应用启动过程源码分析

1)springboot启动main函数所在类定义可以查到,SpringApplication.run()静态方法分2步运行,包括new SpringApplication() ,执行SpringApplication实例方法run();【@SpringBootApplication】注解定义// 被@Configuration标注// 启用自动配置,把所有符合自动配置条件的bean定义加载到spring容器。

2024-11-21 22:39:46 837

原创 spring源码02-spring容器启动(容器初始化+bean实例化)源码解读【常见面试题】

步骤1)容器初始化;初始化属性源,替换属性占位符 , 保存应用监听器;步骤2) 获取最新BeanFactory;步骤3)初始化BeanFactory;新增资源编辑器注册器-ResourceEditorRegistrar , 新增Bean后置处理器ApplicationContextAwareProcessor,ApplicationListenerDetector;忽略依赖接口, 注册可处理器依赖步骤4)允许子类自行定义BeanFactory的后置处理逻辑;

2024-11-17 14:05:14 853 1

原创 spring源码01-spring容器启动流程概述

step1)prepareRefresh():刷新容器的准备工作,包括初始化属性源,并校验属性,保存应用监听器;step2)obtainFreshBeanFactory():获取最新容器,包括把容器hashcode赋值给BeanFactory的序列化id。

2024-11-17 11:06:10 1043

原创 springboot揭秘00-基于java配置的spring容器

1)默认情况下,@Bean注解的方法名作为实例化bean的名称,即bean名称=repositoryA1(参见下文的BeanNameConfig);但若代码指定了@Bean注解的name属性=userRepo,所以bean名称=userRepo;2)@Bean注解的name属性接收一个string数组,以便为一个bean指定多个别名;【BeanNameConfigMain】bean名称配置测试main【执行结果】

2024-10-29 06:41:16 865 1

原创 (转)spark并行加载数据属性设置

参考:

2024-10-20 16:34:37 330

原创 关于mysql jdbc驱动fetchSize属性的说明

当数据库有大量数据满足查询条件时,如有100w,这些如果一次性加载到jvm(java查询客户端),可能存在jvm因堆内存不足导致oom;为了解决这个问题,我们在查询时可以设置fetchsize属性,即提示jdbc驱动程序每次网络请求从数据库返回的数据行数;若结果集很大超过fetchsize大小,则jdbc驱动程序需要向数据库服务器发起多次网络请求;表示同一个查询连接上,jvm向db发送的每次网络请求仅返回一行数据;如果满足条件的数据量是1000条,则需要1000次网络连接;

2024-10-20 16:29:04 923

原创 spring揭秘31-spring任务调度02-spring集成任务执行与调度-spring官方文档

所以设置为每2s执行1次,但实际上3s执行1次)2)起初,TaskExecutor是为了给spring组件提供线程池抽象而创建的,如ApplicationEventMulticaster, JMS’s AbstractMessageListenerContainer,以及Quartz集成都使用TaskExecutor对池化线程进行抽象。1)从spring3.0开始,spring就提供了配置 TaskExecutor与TaskScheduler的xml命名空间,允许开发者以便捷的方式配置带触发器的调度任务。

2024-10-20 13:07:35 793

原创 spring揭秘31-spring任务调度01-spring集成Quartz及JDKTimer定时器

【执行效果】 程序中设置定时器每隔2s执行调度任务,而运行效果是每隔5s执行调度任务;所以spring无需注册job)1)在quartz中, job抽象了调度任务,而job的上下文信息由JobDetail封装,Job与JobDetail的数据交互通过JobDataMap实现;【执行效果】 2个调度任务在执行(因为有2个触发器,tomSimpleTrigger-每5秒执行1次;本文发现使用Quartz框架执行调度任务需要依赖以下4个组件(Job, JobDetail, Trigger, Scheduler)

2024-10-17 21:55:53 811

原创 spring揭秘26-springmvc06-springmvc注解驱动的web应用

1)springmvc提供了2种类型注解,包括 @Controller 与 @RequestMapping, 用于标注二级控制器及请求处理方法,以便HandlerMapping查找被标注的二级控制器并把请求转给该控制器做业务逻辑处理;因为在执行任何处理器方法前(@RequestMapping标注),模型对象已经被创建了;3)@ResponseBody也支持标注处理器类, 所有的处理器方法都继承处理器类的标注,即所有处理器方法的返回结果都会被HttpMessageConverter序列化为响应报文体;

2024-10-06 20:53:05 1178

原创 spring揭秘25-springmvc05-过滤器与拦截器区别(补充)

1)springmvc拦截器定义:基于servlet拦截器思想,springmvc提供的对servlet内部处理逻辑进行拦截的抽象接口;2)应用场景:日志收集, 参数校验等;其实最重要的应用,应该是偷梁换柱;就是在拦截方法中,可以用新对象替换已有对象;【TimeCostHandlerInterceptor】自定义拦截器@Override@Override@Override。

2024-10-04 10:19:51 1060

原创 spring揭秘25-springmvc04-servlet容器与springmvc容器总结

1)ServletContext抽象了servlet容器, WebApplicationContext抽象了springmvc容器;当然,本文通过web.xml部署web应用,所以springmvc容器的实际类型为XmlWebApplicationContext,它是WebApplicationContext的子类;2)servlet容器如何与springmvc容器产生关联?

2024-10-03 17:28:27 1362 3

原创 spring揭秘25-springmvc03-其他组件(文件上传+拦截器+处理器适配器+异常统一处理)

1)springmvc中:任何用于web请求处理的处理对象统称为Handler处理器;Controller是处理器的一种;2)对于DispatcherServlet来说,有个问题:DispatcherServlet应该使用什么样的Handler, 又如何调用Handler的哪个方法来处理请求?DispatcherServlet把Handler调用职责转交给HandlerAdapter(

2024-10-03 15:27:42 1826

(中文译文)Haar wavelets for efficient similarity search of time series

Haar小波对时间序列的有效相似性搜索:有和没有时间规整

2015-12-11

基于15个国家的世界杯排名的Kmeans算法实现

本代码 旨在演示kmeans的算法思想,以及将其应用到15个国家的世界杯排名分析中。

2015-09-01

嵌入式开发基础+实践教程课

嵌入式开发基础+实践教程课,主要包括嵌入式的基础知识和硬件架构知识

2015-06-29

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除