序列化

复习.Net高级

蓝咒 提交于 2020-03-22 05:54:53
索引器:本质是封装了get,set方法,可以是只读或只写(在get或set前加上private),字符串是只读索引。 密闭类与静态类: 第一、密闭类是修饰为sealed的类,sealed不能有子类。String类无法被继承,因为String被声明了sealed。 第二、声明为static的类,不能实例化,只能定义static成员。通常用它定义扩展方法。 第三、C#3.0特性:扩展方法。声明静态类,增加一个静态方法,第一个参数是被扩展类型的标记为this,然后在其他类中可以直接调用。 1 static void Main(string[] args) 2 { 3 string str = "Hello World!"; 4 str.ShowMsg(str); 5 } 6 7 //扩展方法 8 9 static class MyString 10 { 11 public static void ShowMsg(this string a,string msg) 12 { 13 Console.WriteLine(msg); 14 } 15 } 给string增加一个ShowMsg() 深拷贝、浅拷贝: 深拷贝就是重新new一个对象,然后把之前的那个对象的属性值再重新赋值给这个用户。 1 static void Main(string[] args) 2 { 3 MyCopy copy1

Mapreduce之序列化框架(转自http://blog.csdn.net/lastsweetop/article/details/9376495)

十年热恋 提交于 2020-03-22 02:40:54
框架简介 MapReduce仅仅可以支持Writable做key,value吗?答案是否定的。事实上,一切类型都是支持的,只需满足一个小小的条件:每个类型是以二进制流的形式传输。 为此Hadoop提供了一个序列化框架来支持,他们在org.apache.hadoop.io.serializer包中,Writable可以作为MapReduce支持的类型也是因为实现了这个框架,类不多,我们从几个接口说起。 Serializer 定义了一组接口,打开流,序列化,关闭流 [java] view plain copy public interface Serializer <T> { void open(java.io.OutputStream outputStream) throws java.io.IOException; void serialize(T t) throws java.io.IOException; void close() throws java.io.IOException; } Deserializer 定义了一组接口,打开流,反序列化,关闭流 [java] view plain copy public interface Deserializer <T> { void open(java.io.InputStream inputStream) throws

第四周 day4 python学习笔记

不羁岁月 提交于 2020-03-22 00:02:31
关于装饰器的更多信息可以参考 http://egon09.blog.51cto.com/9161406/1836763 1.装饰器Decorator 装饰器:本质上是函数,(装饰其他函数),就是为其他函数添加附加功能 原则:不能修改被装饰函数的源代码;不能修改被装饰函数的调用方式 #实现装饰器的知识储备: 1.函数即变量 2.高阶函数,有两种方式: (1)把一个函数名当做实参传递给另一个函数(在不修改被装饰函数源代码的情况下为其添加功能) (2)返回值中包含函数名(不修改函数调用的方式) 3.嵌套函数 高阶函数+嵌套函数==》装饰器 import time #计算一个函数的运行时间的装饰器 def timer(func): def wrapper(*kargs,**kwargs): start_time=time.time() func() end_time=time.time() print("the func runtime is %s"%(end_time-start_time)) return wrapper @timer def test1(): time.sleep(3) print("in the test1....") test1() #高阶函数 def bar(): print("in the bar...") def test(func): print(func

Java关键字-transient

 ̄綄美尐妖づ 提交于 2020-03-21 22:48:22
  transient 关键字的作用是控制变量的序列化,在变量声明前加上该关键字,可以阻止该变量被序列化到文件中。 示例: 项目A:序列化对象类 package com.java.serializable; import java.io.Serializable; public class Class04 implements Serializable { // 序列化ID private static final long serialVersionUID = 1L; // 昵称 private String nickName; // 关键字transient修饰,该变量无法被序列化 private transient int age = 26; // 关键字transient修饰,该变量无法被序列化 private transient String sex = "man"; // 以下省略setter、getter方法 } View Code 项目A:序列化对象工具类 package com.java.serializable; import java.io.FileOutputStream; import java.io.IOException; import java.io.ObjectOutputStream; public class CtestA04 { public

java中的Serializable接口

江枫思渺然 提交于 2020-03-21 15:43:12
实现java.io.Serializable 接口的类是可序列化的。没有实现此接口的类将不能使它们的任一状态被序列化或逆序列化。   序列化类的所有子类本身都是可序列化的。这个序列化接口没有任何方法和域,仅用于标识序列化的语意。允许非序列化类的子类型序列化,子类型可以假定负责保存和恢复父类型的公有的、保护的和(如果可访问)包的域的状态。只要该类(扩展)有一个无参构造子,可初始化它的状态,那么子类型就可承担上述职责。在这种情况下申明一个可序列化的类是一个错误。此错误将在运行时被检测。就是可以把对象存到字节流,然后可以恢复!   例如:Integer实现了Serializable,所以可以把一个Integer的对象用IO写到文件里,之后再可以从文件里读出,如你开始写入的时候那个对象的intValue() 是5的话,那读出来之后也是5。这一点体现了用序化类的作用,即用来传送类的对象。    所谓的Serializable,就是java提供的通用数据保存和读取的接口。 至于从什么地方读出来和保存到哪里去都被隐藏在函数参数的背后了。 这样子,任何类型只要实现了Serializable接口,就可以被保存到文件中,或者作为数据流通过网络发送到别的地方。也可以用管道来传输到系统的其他程序中。这样子极大的简化了类的设计。只要设计一个保存一个读取功能就能解决上面说得所有问题。 Object

FastJson的简单实用

↘锁芯ラ 提交于 2020-03-21 13:38:40
一、FastJson的理解 在工作中,经常客服端需要和服务端进行通信,目前很多项目都采用JSON的方式进行数据传输,简单的参数可以通过手动拼接JSON字符串,但如果请求的参数过多,采用手动拼接JSON字符串,出错率就非常大了。并且工作效率也特别低。 常用一些开源的JSON框架,比如Google提供的Gson,Jackson,FastJson等框架。 FastJson不依赖于第三方包, 直接可以运行在Java JDK1.5之上,FastJson完全支持 http://json.org 的标准,支持各种JDK类型,包括基本类型、JavaBean、Collection、Map、Enum、泛型等 还支持循环引用。 FastJson项目是开源的:Fastjson代码托管在github.org上,项目地址是 https://github.com/AlibabaTech/fastjson 一个JSON库涉及的最基本功能就是序列化和反序列化。Fastjson支持java bean的直接序列化。使用com.alibaba.fastjson.JSON这个类进行序列化和反序列化。 FastJson是阿里巴巴工程师设计的 二、FastJson的基本使用 package cn.monster.entity; import java.util.ArrayList; import java.util.Date;

ql的python学习之路-day12

纵饮孤独 提交于 2020-03-21 06:44:24
前言:这一节主要学习json和pickle 背景: 相信大家在日常生活中都有接触大型的网络游戏,打游戏的时候都是自己在电脑上操作,自己刷怪升级;当然也会碰到中午去吃饭然后挂机的情况,让电脑自动的刷怪,吃完饭后再来继续手动操作。在这个过程中我们有挂机,挂机的时候其实就是将之前的操作(如:用技能1、技能2、大招、左右移动等)都以文件的形式进行保存,吃完饭回来之后又接着之前的状态进行游戏而不是重头开始。我们这里要讲的序列化以及反序列化就跟这个很类似,挂机前的操作保存为文件就是序列化,吃完饭回来再加载之前的游戏就是反序列化;另外,日常我们也用过虚拟机,虚拟机的挂载,挂载后的恢复也是这样的情况。 一、json序列化和反序列化 1 #!/usr/bin/env python 2 # -*- coding:utf-8 -*- 3 # Author:qinjiaxi 4 ''' 5 1.序列化是指将内存的对象存成字符串; 6 2.反序列化是指将存起来的字符串变成之前的内存对象; 7 3.json主要作用是所有语言之间的交互,只能进行简单转换比如字符串、列表、字典等,不能处理函数; 8 4.xlm和json一样,逐渐被json替代; 9 ''' 10 import json 11 info = { 12 'name' : 'qinlang', 13 'age' : 3 14 } 15 f =

DRF的版本,解析器,与序列化

你说的曾经没有我的故事 提交于 2020-03-21 06:41:45
补充 配置文件中的 类的调用: (字符串) v1 = ["view.xx.apth.Role","view.xx.apth.Role"] for item in v1: m = importlib.import_module('view.xx.apth') cls = getattr(m,'Role') cls() 1 版本控制 一般是全局的 配置 1 基于 参数版本控制 versioning_class = QueryParameterVersioning # 默认参数是 version version = request.version # 获取到参数会放置在 request中 2 基于 url 版本控制 versioning_class = URLPathVersioning url 规则 (?P < version > [v1 | v2] +) print(request.versioning_scheme.reverse(viewname='api:user', request=request)) 这里可以通过request.versioning_scheme.reverse 进行url 反向解析 >> http: // 127.0.0.1: 8000 / api / v2 / user / 3 基于 host域名 版本控制 versioning_class =

Spark必背面试题

守給你的承諾、 提交于 2020-03-20 18:27:15
3 月,跳不动了?>>> 1,spark的工作机制 用户在客户`端提交作业后,会由Driver运行main方法并创建SparkContext上下文, SparkContext向资源管理器申请资源, 启动Execotor进程, 并通过执行rdd算子,形成DAG有向无环图,输入DAGscheduler, 然后通过DAGscheduler调度器, 将DAG有向无环图按照rdd之间的依赖关系划分为几个阶段,也就是stage, 输入task scheduler, 然后通过任务调度器taskscheduler将stage划分为task set分发到各个节点的executor中执行。 2,spark中stage是如何划分的 在DAG调度的过程中,Stage阶段的划分是根据是否有shuffle过程,也就是存在ShuffleDependency宽依赖的时候,需要进行shuffle,这时候会将作业job划分成多个Stage 整体思路:从后往前推,遇到宽依赖就断开,划分为一个 stage;遇到窄依赖就将这个 RDD 加入该 stage 中 3, spark的shuffle和调优 Spark中一旦遇到宽依赖就需要进行shuffle的操作,本质就是需要将数据汇总后重新分发的过程, 也就是数据从map task输出到reduce task输入的这段过程, 在分布式情况下,reduce

Java中的浅拷贝与深拷贝

99封情书 提交于 2020-03-20 08:09:16
Object中的clone方法: protected native Object clone() throws CloneNotSupportedException;   创建并返回此对象的一个副本。“副本”的准确含义可能依赖于对象的类。这样做的目的是,对于任何对象 x,表达式: x.clone() != x 为 true,表达式: x.clone().getClass() == x.getClass() 也为 true,但这些并非必须要满足的要求。一般情况下: x.clone().equals(x) 为 true,但这并非必须要满足的要求。 按照惯例,返回的对象应该通过调用 super.clone 获得。如果一个类及其所有的超类(Object 除外)都遵守此约定,则 x.clone().getClass() == x.getClass()。   按照惯例,此方法返回的对象应该独立于该对象(正被复制的对象)。要获得此独立性,在 super.clone 返回对象之前,有必要对该对象的一个或多个字段进行修改。这通常意味着要复制包含正在被复制对象的内部“深层结构”的所有可变对象,并使用对副本的引用替换对这些对象的引用。如果一个类只包含基本字段或对不变对象的引用,那么通常不需要修改 super.clone 返回的对象中的字段。   Object 类的 clone 方法执行特定的复制操作