IO笔记

1. File代表与平台无关的文件和目录,新建、删除、重命名文件和目录。

2. 输入流:InputStream,Reader;输出流:OutputStream,Writer

3. 字节流,字符流;节点流,处理流。装饰器模式。

4. 处理流封装节点流,屏蔽底层设备节点流的差异,提供更加方便的输入输出方法。

    节点流:构造器参数是物理IO节点

    处理流:构造器参数是已存在的节点流

5. 输出文本内容,使用PrintStream包装输出节点流。只关闭处理流即可,系统会自动关闭被包装的节点流。

    读取文本内容,使用BufferedReader包装输入节点流。例:BufferedReader(new InputStreamReader(System.in))

6. 输入/输出的内容是文本,考虑使用字符流;输入/输出内容是二进制内容,考虑使用字节流。

7. 两个转换流:InputStreamReader,OutputStreamWriter。字节流转成字符流

8. System.setErr(),重定向标准错误输出。

    System.setIn(),重定向标准输入。

    System.setOut(),重定向标准输出。

9. RandomAccessFile,文件内容访问类,可以任意访问文件内容。

10. 对象序列号机制允许把内存中的java对象转换成平台无关的二进制流,可以在网络或磁盘上传输。

11. 目标类实现Serializable接口,方可序列化。

12. 序列化的步骤:

      1. 创建一个ObjectOutputStream

      2. 调用ObjectOutputStream对象的writeObject()方法

13. 反序列化的步骤:

     1. 创建一个ObjectInputStream

     2. 调用ObjectInputStream的readObject()方法

14. 反序列化无须通过构造器初始化对象。

15. 如果一个可序列化类有多个父类,则该类的所有父类要么是可序列化的,要么有无参数的构造器。

16. 含有引用类型的类,引用类型是可序列化的,类才可以序列化。

17. 同一个对象,只被序列化一次,后续序列化,只使用序列化编号。如果多次序列同一个java对象,只有第一次序列化才会把对象转换成字节流并输出。

18. 通过在属性前面加上transient关键字,可以指定java序列化时无须理会该属性。transient只能用来修饰属性,不能修饰其他。

19. 自定义序列化的几个方法,写在被序列化的类中。系统在序列化某个对象之前,会先调用writeRelpace和writeObject方法。反序列化时,调用readObject和readResolve

      1. writeReplace();

      2.  writeObject();

      3. readObjectNoData();

      4. readObject();

      5. readResolve();

20. 早期的单例类和枚举类在反序列化后,会生成新的对象,为保证和序列化前的对象一致,需要提供readResolve方法。

21. 序列化版本兼容问题,使用序列化ID。新类修改方法和静态属性,不影响反序列化,不用修改序列化serialVersionUID。如果修改非静态属性,同名,不同类型,反序列化         失败,需跟新serivalVersionUID。新类比序列化对象流中的属性 多,或者少 都可以正常反序列化,无须更新serivalVersionUID。

22. java 新io采用内存映射文件的方式来处理输入输出,新IO把文件或文件的一段映射到内存中,比传统的输入输出快很多。

23. Channel和Buffer是新IO中两个核心类。新IO系统中,所有数据都要经过Channel,传统的面向流处理,新IO面向块处理。Buffer可以理解成一个容器,发送到Channel中数        据和从Channel中读取的数据都要先放到Buffer中。还有字符串映射到Charset类,以及非阻塞式输入输出的Selector类。

24. Buffer是抽象类,其子类有XXXBuffer。其中ByteBuffer和CharBuffer最常用。Buffer中常用的三个重要概念:

      容量:capacity

      界限:limit

      位置:position

     三者关系:0 <= position <= limit <= capacity

25. Buffer中包含两个重要方法:flip和clear,flip为从Buffer中取出数据做好准备,clear则向Buffer中装入数据做好准备。clear不清空buffer中的数据。

26. Buffer还包含put和get方法,用于向Buffer中放入数据和取出数据。

27. Channel可以直接将文件的部分或全部映射成Buffer,Channel只能和Buffer交互。Channel通过传统节点流InputStream,OutputStream的getChannel获得。

28. Channel中最常用的三类方法是:map,read和write;map用于将Channel对应的部分或全部数据映射到ByteBuffer;read和write用于从Buffer中读数据或写数据。

29. 把明文的字符序列转换成计算机理解的字节序列(二进制文件),称为编码;把字节序列转化成普通人能看懂的明文字符串,称为解码。

30. Charset.availableCharsets()可以取代所支持的字符集。

       Charset csCn = Charset.forName("GBK");

       csCn.new Encoder().encode() / new Decoder().decode();

       Charset自身也含有decode和encode方法,进行编码和解码。

31. String的getBytes方法,就是使用特定字符集将字符串转成字节序列。

内容概要:本文详细介绍了一个基于Java和Vue的联邦学习隐私保护推荐系统的设计与实现。系统采用联邦学习架构,使用户数据在本地完成模型训练,仅上传加密后的模型参数或梯度,通过中心服务器进行联邦平均聚合,从而实现数据隐私保护与协同建模的双重目标。项目涵盖完整的系统架构设计,包括本地模型训练、中心参数聚合、安全通信、前后端解耦、推荐算法插件化等模块,并结合差分隐私与同态加密等技术强化安全性。同时,系统通过Vue前端实现用户行为采集与个性化推荐展示,Java后端支撑高并发服务与日志处理,形成“本地训练—参数上传—全局聚合—模型下发—个性化微调”的完整闭环。文中还提供了关键模块的代码示例,如特征提取、模型聚合、加密上传等,增强了项目的可实施性与工程参考价值。 适合人群:具备一定Java和Vue开发基础,熟悉Spring Boot、RESTful API、分布式系统或机器学习相关技术,从事推荐系统、隐私计算或全栈开发方向的研发人员。 使用场景及目标:①学习联邦学习在推荐系统中的工程落地方法;②掌握隐私保护机制(如加密传输、差分隐私)与模型聚合技术的集成;③构建高安全、可扩展的分布式推荐系统原型;④实现前后端协同的个性化推荐闭环系统。 阅读建议:建议结合代码示例深入理解联邦学习流程,重点关注本地训练与全局聚合的协同逻辑,同时可基于项目架构进行算法替换与功能扩展,适用于科研验证与工业级系统原型开发。
源码来自:https://pan.quark.cn/s/a4b39357ea24 遗传算法 - 简书 遗传算法的理论是根据达尔文进化论而设计出来的算法: 人类是朝着好的方向(最优解)进化,进化过程中,会自动选择优良基因,淘汰劣等基因。 遗传算法(英语:genetic algorithm (GA) )是计算数学中用于解决最佳化的搜索算法,是进化算法的一种。 进化算法最初是借鉴了进化生物学中的一些现象而发展起来的,这些现象包括遗传、突变、自然选择、杂交等。 搜索算法的共同特征为: 首先组成一组候选解 依据某些适应性条件测算这些候选解的适应度 根据适应度保留某些候选解,放弃其他候选解 对保留的候选解进行某些操作,生成新的候选解 遗传算法流程 遗传算法的一般步骤 my_fitness函数 评估每条染色体所对应个体的适应度 升序排列适应度评估值,选出 前 parent_number 个 个体作为 待选 parent 种群(适应度函数的值越小越好) 从 待选 parent 种群 中随机选择 2 个个体作为父方和母方。 抽取父母双方的染色体,进行交叉,产生 2 个子代。 (交叉概率) 对子代(parent + 生成的 child)的染色体进行变异。 (变异概率) 重复3,4,5步骤,直到新种群(parentnumber + childnumber)的产生。 循环以上步骤直至找到满意的解。 名词解释 交叉概率:两个个体进行交配的概率。 例如,交配概率为0.8,则80%的“夫妻”会生育后代。 变异概率:所有的基因中发生变异的占总体的比例。 GA函数 适应度函数 适应度函数由解决的问题决定。 举一个平方和的例子。 简单的平方和问题 求函数的最小值,其中每个变量的取值区间都是 [-1, ...
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值