barriers / 阅读 / 详情

什么是MongoDB_MySQL

2023-08-07 13:58:07
共1条回复
FinCloud

MongoDB

MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。他支持的数据结构非常松散,是类似json的bjson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。

它的特点是高性能、易部署、易使用,存储数据非常方便。主要功能特性有:

面向集合存储,易存储对象类型的数据。

模式自由。

支持动态查询。

支持完全索引,包含内部对象。

支持查询。

支持复制和故障恢复。

使用高效的二进制数据存储,包括大型对象(如视频等)。

自动处理碎片,以支持云计算层次的扩展性

支持RUBY,PYTHON,JAVA,C++,PHP等多种语言。

文件存储格式为BSON(一种JSON的扩展)

可通过网络访问

所谓“面向集合”(Collenction-Orented),意思是数据被分组存储在数据集中,被称为一个集合(Collenction)。每个 集合在数据库中都有一个唯一的标识名,并且可以包含无限数目的文档。集合的概念类似关系型数据库(RDBMS)里的表(table),不同的是它不需要定 义任何模式(schema)。模式自由(schema-free),意味着对于存储在mongodb数据库中的文件,我们不需要知道它的任何结构定义。如果需要的话,你完全可以把不同结构的文件存储在同一个数据库里。存储在集合中的文档,被存储为键-值对的形式。键用于唯一标识一个文档,为字符串类型,而值则可以是各中复杂的文件类型。我们称这种存储形式为BSON(Binary Serialized dOcument Format)。

MongoDB服务端可运行在Linux、Windows或OS X平台,支持32位和64位应用,默认端口为27017。推荐运行在64位平台,因为MongoDB

在32位模式运行时支持的最大文件尺寸为2GB。

MongoDB把数据存储在文件中(默认路径为:/data/db),为提高效率使用内存映射文件进行管理。

相关推荐

怎样对带有不可序列化属性的Java对象进行序列化

出于很多原因我们想使用自定义的序列化方法取代Java默认的机制。一个最常见的原因是提高性能,而另一个原因是有时候我们无法使用默认的序列化方法。在这篇文章中,我们具体来讨论怎样通过定制的序列化方法,对一个较大的、带有不可序列化属性的对象进行序列化。下面这段代码定义了一个简单的类。它可以把一个给定的对象序列化到一个指定的文件,或者从相同的文件中把对象反序列化出来。112345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 package dustin.examples.serialization; import static java.lang.System.out; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; /** * Simple serialization/deserialization demonstrator. * * @author Dustin */ public class SerializationDemonstrator { /** * Serialize the provided object to the file of the provided name. * @param objectToSerialize Object that is to be serialized to file; it is * best that this object have an individually overridden toString() * implementation as that is used by this method for writing our status. * @param fileName Name of file to which object is to be serialized. * @throws IllegalArgumentException Thrown if either provided parameter is null. */ public static <T> void serialize(final T objectToSerialize, final String fileName) { if (fileName == null) { throw new IllegalArgumentException( "Name of file to which to serialize object to cannot be null."); } if (objectToSerialize == null) { throw new IllegalArgumentException("Object to be serialized cannot be null."); } try (FileOutputStream fos = new FileOutputStream(fileName); ObjectOutputStream oos = new ObjectOutputStream(fos)) { oos.writeObject(objectToSerialize); out.println("Serialization of Object " + objectToSerialize + " completed."); } catch (IOException ioException) { ioException.printStackTrace(); } } /** * Provides an object deserialized from the file indicated by the provided * file name. * * @param <T> Type of object to be deserialized. * @param fileToDeserialize Name of file from which object is to be deserialized. * @param classBeingDeserialized Class definition of object to be deserialized * from the file of the provided name/path; it is recommended that this * class define its own toString() implementation as that will be used in * this method"s status output. * @return Object deserialized from provided filename as an instance of the * provided class; may be null if something goes wrong with deserialization. * @throws IllegalArgumentException Thrown if either provided parameter is null. */ public static <T> T deserialize(final String fileToDeserialize, final Class<T> classBeingDeserialized) { if (fileToDeserialize == null) { throw new IllegalArgumentException("Cannot deserialize from a null filename."); } if (classBeingDeserialized == null) { throw new IllegalArgumentException("Type of class to be deserialized cannot be null."); } T objectOut = null; try (FileInputStream fis = new FileInputStream(fileToDeserialize); ObjectInputStream ois = new ObjectInputStream(fis)) { objectOut = (T) ois.readObject(); out.println("Deserialization of Object " + objectOut + " is completed."); } catch (IOException | ClassNotFoundException exception) { exception.printStackTrace(); } return objectOut; } }
2023-08-05 19:21:542

Java中的警告:The serializable class FirstApplet does not declare a static final,请问是什么错误?

序列化。。。
2023-08-05 19:22:074

java 代码中跑出来这句话什么意思

实现java.io.Serializable这个接口是为序列化,serialVersionUID 用来表明实现序列化类的不同版本间的兼容性。如果你修改了此类, 要修改此值。否则以前用老版本的类序列化的类恢复时会出错。实现后如果你用的是工具的话会出来警告,他会提示你,可以自动生成private static final long serialVersionUID = 1L; 为了在反序列化时,确保类版本的兼容性,最好在每个要序列化的类中加入private static final long serialVersionUID这个属性,具体数值自己定义.   在JDK中,可以利用JDK的bin目录下的serialver.exe工具产生这个serialVersionUID,如对于Test.class可执行如下命令:serialver Test。 这样,即使某个类在与之对应的对象已经序列化出去后做了修改,该对象依然可以被正确反序列化。否则,如果不显式定义该属性,这个属性值将由JVM根据类的相关信息计算,而修改后的类的计算结果与修改前的类的计算结果往往不同,从而造成对象的反序列化因为类版本不兼容而失败。 不显式定义这个属性值的另一个坏处是,不利于程序在不同的JVM之间的移植。因为不同的编译器实现该属性值的计算策略可能不同,从而造成虽然类没有改变,但是因为JVM不同,出现因类版本不兼容而无法正确反序列化的现象出现。 当我们的系统不太经常需要序列化类时,可以去掉这些警告,做如下设置:Window-->Preferences-->Java,将serializable class without serialVersionUID的设置由warning改为Ignore。然后Eclipse会重新编译程序,那些警告信息也就消失了。最后的建议是,如果我们开发大量需要序列化的类的时候,我们最好还是还原为原来的设置。这样可以保证系统的性能和健壮。关于serialVersionUID的解释 serialVersionUID作用: 序列化时为了保持版本的兼容性,即在版本升级时反序列化仍保持对象的唯一性。 你可以随便写一个,在Eclipse中它替你生成一个,有两种生成方式:一个是默认的1L,比如:private static final long serialVersionUID = 1L;一个是根据类名、接口名、成员方法及属性等来生成一个64位的哈希字段,比如:private static final long serialVersionUID = -8940196742313994740L;之类的。 Eclipse提示The serializable class XXX does not declare a static final serialVersionUID field of type long 那是Eclipse提供这个提示功能给你吧.你点它warning的icon两下Eclipse就会自动给定.如果你不喜欢,可以把它关掉,windows -> preferences -> compiler -> Error/Warnings-> Potential Programming problems将Serializable class without serialVersionUID的warning改成ignore.其实如果你没有考虑到兼容性问题时,那就把它关掉吧.其实有这个功能是好的.只要任何类别实作了Serializable这个介面,如果没有加入serialVersionUID,Eclipse都会给你warning提示,这个serialVersionUID为了让该类别Serializable後兼容.考虑一下,如果今天你的类Serialized存到硬碟里,可是後来你却更改了类别的field(增加或减少或改名).当你Deserialize时,就会出现Exception.这样就会做成不兼容性的问题.但当serialVersionUID相同时,它就会将不一样的field以type的预设值Deserialize.这个可以避开不兼容性的问题.异常状态:The serializable class XXX does not declare a static final serialVersionUID field of type long
2023-08-05 19:22:141

c#在一个类的声明的前面加上[Serializable],那这个类就可以被序列化了吗?

是的。
2023-08-05 19:22:224

浅析Redis的BigKey(阿里巴巴技术协会ATA同步发送)

在完成事件接入的需求时,我们需要记录上一个批次拉取的事件,并与当前拉取到的事件做出比对,从而进行差分。我们目前的做法是使用redis来进行缓存:将上一个批次拉取到的事件缓存到一个list中。但是当事件数量过多时,value的大小会超过1M的限制,直接抛出异常。这其实是Tair出于性能的考虑而做出的限制,本文将谈谈我个人对于bigKey的理解。 顾名思义,bigKey指一个key对应的value占据的内存空间相对比较大,bigKey通常会有两种表现形式: bigKey一旦产生,将会对tair的性能以及稳定性造成较大的影响,下面我将详细介绍一下bigKey的危害。 bigKey给tair带来的危害是多方面的,性能下降只是其中的一方面,极端情况下,bigKey甚至会导致缓存服务崩溃。下面我将从几个角度进行分析。我们可以看到: 另外,在Redis执行异步重写操作时(bgrewriteaof),主线程会fork出一个子进程来执行重写命令,这个子进程会与主线程共享内存。当主线程收到了新增或者修改一个key的命令,主线程会申请一块额外的内存空间来保存数据。但如果这个key是一个bigKey时,主线程会去申请一块更大空间,同样会阻塞主线程(与JVM分配内存一样,涉及锁和同步)。如果申请不到足够的空间,会导致Swap甚至会有OOM的风险,这同样会降低Redis的性能和稳定性。 Tair中一个key最大为1M,我们就以1M举例,当访问这个key的QPS为1000时,每秒将会有1GB左右的流量,对于带宽来说将是一个较大压力。如果这个bigKey是一个热点key时,后果将不堪设想。 如果主从同步的 client-output-buffer-limit 设置过小,并且 master 存在大量bigKey(数据量很大),主从全量同步时可能会导致 buffer 溢出,溢出后主从全量同步就会失败。如果主从集群配置了哨兵,那么哨兵会让 slave 继续向 master 发起全量同步请求,然后 buffer 又溢出同步失败,如此反复,会形成复制风暴,这会浪费 master 大量的 CPU、内存、带宽资源,也会让 master 产生阻塞的风险。 另外,当我们使用Redis Cluster时,由于Redis Cluster采用了同步迁移的方式,bigKey同样会阻塞主线程。这里提一下Codis,Codis在迁移bigKey时,使用了异步迁移 + 指令拆分的方式,对于bigKey (集合类型) 中每个元素,用一条指令进行迁移,而不是把整个 bigKey 进行序列化后再整体传输。这种化整为零的方式,就避免了 bigKey 迁移时,因为要序列化大量数据而阻塞的问题。当我们写入或者读取大量bigKey的时候,很有可能导致输入/输出缓冲区溢出。如果客户端占用的内存总量超过了服务器设置的maxmemory时(默认4GB),将会直接触发服务器的内存淘汰策略,如果有数据被淘汰,再要获取这些数据就需要到后端回源,间接降低了缓存系统的性能。同时,淘汰的如果是bigKey也同样会阻塞主线程。另外,在极端情况下,多个客户端占用了过多的内存将导致OOM,进而使得整个redis进程崩溃。 使用切片集群的时候,我们通常会将不同的key存放在不同的实例上,如果存在bigKey的话,会导致相应实例的数据量增大,内存压力也相应增大。 常用的做法是通过./redis-cli --bigkeys命令对整个redis中的键值对进行统计,输出每种数据类型中最大的 bigkey 的信息。一般会配合-i参数一起使用,控制扫描间隔,避免长时间扫描降低 Redis 实例的性能。另外该命令不要在业务高峰期使用。 或者我们可以通过debug object key 命令去查看serializedlength属性,serializedlength表示key对应的value序列化后的字节数,通过观察serializedlength的大小可以辅助排查bigKey。使用scan + debug object key命令,我们可以计算其中每个key的serializedlength,进而发现其中的bigKey,并做好相应的监控和处理。不过对于集合类型的bigKey,debug object key 命令的执行效率不高,存在阻塞redis的风险。另外,在读取bigKey的时候,我们尽量不要一次性将全部数据读取出来,而是采用分批的方式进行读取:利用scan命令进行渐进式遍历,将大量数据分批多次读取出来,减小redis的压力,避免阻塞的风险。 同样的,在删除bigKey的时候我们也可以使用scan命令来进行批量删除。如果你是用的redis是4.0之后的版本,则可以利用unlink命令配合lazy free配置(需要手动开启)来进行异步删除,避免主线程阻塞。
2023-08-05 19:22:411

phpexcel导入大数据内存溢出的解决方法有哪些

PHPExcel版本:1.7.6+在不进行特殊设置的情况下,phpExcel将读取的单元格信息保存在内存中,我们可以通过PHPExcel_Settings::setCacheStorageMethod()来设置不同的缓存方式,已达到降低内存消耗的目的!相关视频教程推荐:php入门教程解决方案:1、将单元格数据序列化后保存在内存中PHPExcel_CachedObjectStorageFactory::cache_in_memory_serialized;2、将单元格序列化后再进行Gzip压缩,然后保存在内存中PHPExcel_CachedObjectStorageFactory::cache_in_memory_gzip;3、缓存在临时的磁盘文件中,速度可能会慢一些PHPExcel_CachedObjectStorageFactory::cache_to_discISAM;4、保存在php://tempPHPExcel_CachedObjectStorageFactory::cache_to_phpTemp;5、保存在memcache中PHPExcel_CachedObjectStorageFactory::cache_to_memcache;$cacheMethod = PHPExcel_CachedObjectStorageFactory::cache_to_memcache; $cacheSettings = array( "memcacheServer" => "localhost", "memcachePort" => 11211, "cacheTime" => 600 ); PHPExcel_Settings::setCacheStorageMethod($cacheMethod, $cacheSettings);注意是加在new PHPExcel()前面,如下:require_once APPPATH ."third_party/PHPExcel/PHPExcel.php";$cacheMethod = PHPExcel_CachedObjectStorageFactory::cache_to_phpTemp;$cacheSettings = array("memoryCacheSize"=>"16MB");PHPExcel_Settings::setCacheStorageMethod($cacheMethod, $cacheSettings);$objPHPExcel = new PHPExcel();推荐相关文章教程:php教程
2023-08-05 19:22:481

redis 时间复杂度0(1) ,0(N)什么意思

1 是常数级 n是线性及 你就想象增长方式
2023-08-05 19:22:573

serialVersionUID有什么作用?

serialVersionUID作用: 序列化时为了保持版本的兼容性,即在版本升级时反序列化仍保持对象的唯一性。有两种生成方式: 一个是默认的1L,比如:private static final long serialVersionUID = 1L; 一个是根据类名、接口名、成员方法及属性等来生成一个64位的哈希字段,比如: private static final long serialVersionUID = xxxxL;当你一个类实现了Serializable接口,如果没有定义serialVersionUID,Eclipse会提供这个 提示功能告诉你去定义 。在Eclipse中点击类中warning的图标一下,Eclipse就会 自动给定两种生成的方式。如果不想定义它,在Eclipse的设置中也 可以把它关掉的,设置如下: Window ==> Preferences ==> Java ==> Compiler ==> Error/Warnings ==> Potential programming problems 将Serializable class without serialVersionUID的warning改成ignore即可。如果你没有考虑到兼容性问题时,就把它关掉,不过有这个功能是好的,只要任何类别实现了Serializable这个接口的话,如果没有加入serialVersionUID,Eclipse都会给你warning提示,这个serialVersionUID为了让该类别Serializable向后兼容。 如果你的类Serialized存到硬盘上面后,可是后来你却更改了类别的field(增加或减少或改名),当你Deserialize时,就会出现Exception的,这样就会造成不兼容性的问题。 但当serialVersionUID相同时,它就会将不一样的field以type的预设值Deserialize,可避开不兼容性问题。
2023-08-05 19:23:161

java类中经常会出现一个常量是序列号,序列号是什么意思

序列号主要用于将内存中的数据序列化用,就是一个ID。
2023-08-05 19:23:265

构件式玻璃幕墙的构件式半隐框玻璃幕墙

Stick-built semi-hidden frame supported glass curtain walla. 构件式半隐框(显横)玻璃幕墙Horizontally exposed beam system●标准产品——产品标准化、系列化设计,质量稳定可靠,可满足不同的要求。Standard catalog products—standardized and serialized designs, and the reliable quality can meet different requirements.●结构特点——固定于横梁的托板能够承担玻璃自重,结构可靠。Structural features—pallets fixed on the beam can withstand the dead load of the glass, which provides reliability.●建筑效果——通过改变横向扣板形式来满足不同的建筑立面效果要求。Architectural effects—different requirements of building facades architectural effect can be met through changing the connecting forms of horizontal buckle plates.b. 构件式半隐框(显竖)玻璃幕墙Vertically exposed beam system●标准产品——产品标准化、系列化设计,质量稳定可靠,可满足不同的要求。Standard catalog products—standardized and serialized designs, and reliable quality can meet different requirements.●结构特点——玻璃自重由固定于横梁的托板承担,结构安全可靠。Structural features—pallets fixed on the beam can withstand the dead load of the glass, which provides reliability.●建筑效果——通过改变竖向扣板形式来满足不同的建筑立面效果要求。Architectural effects —different requirements of building facades architectural effects can be met through changing the connecting forms of vertical buckle plates.4、构件式干法隐框玻璃幕墙Stick-built dry-processed hidden frame supported glass curtain wall●标准产品——产品标准化、系列化设计,质量稳定可靠,可满足不同的要求。Standard catalog products—standardized and serialized designs, and reliable quality can meet different requirements.●结构特点——采用挂钩式机械锁紧结构固定,安全可靠;玻璃板块可实现无序安装,操作简单,安装速度快捷。Structural features—the structure is fixed by hook lock, which provides reliability. The glass panels can be installed without sequence. Installing operation is simple and installation speed is fast.●建筑效果——建筑立面开启部分与固定部分内、外视效果一致,整体协调统一。Architectural effects--interior and exterior visual effects of the building facades openings and fixed components are consistent with each other and bring forth integrated harmony.
2023-08-05 19:23:421

private static final long serialVersionUID = 1L; 有什么用

serialVersionUID 用来表明类的不同版本间的兼容性简单来说,Java的序列化机制是通过在运行时判断类的serialVersionUID来验证版本一致性的。在进行反序列化时,JVM会把传来的字节流中的serialVersionUID与本地相应实体(类)的serialVersionUID进行比较,如果相同就认为是一致的,可以进行反序列化,否则就会出现序列化版本不一致的异常。
2023-08-05 19:23:572

private static final long serialVersionUID=1L 是什么意思

网页链接
2023-08-05 19:24:075

Android Gson 使用详解

Json 是一种文本形式的数据交换格式,比 xml 更为轻量。Json 的解析和生成的方式很多,在 Android 平台上最常用的类库有 Gson 和 FastJson 两种,这里要介绍的是 Gson Gson 的 GitHub 主页点击这里: Gson 在进行序列化与反序列操作前,需要先实例化一个 com .google.gson.Gson 对象,获取 Gson 对象的方法有两种 利用 Gson 可以很方便地生成 Json 字符串,通过使用 addProperty 的四个重载方法 addProperty 方法底层调用的是 add(String property, JsonElement value) 方法,即将基本数据类型转化为了 JsonElement 对象,JsonElement 是一个抽象类,而 JsonObject 继承了 JsonElement ,因此我们可以通过 JsonObject 自己来构建一个 JsonElement Json数组 与 字符串数组 Json数组 与 List Gson 也提供了 toJson() 和 fromJson() 两个方法用于转化 Model 与 Json,前者实现了序列化,后者实现了反序列化 首先,声明一个 User 类 序列化的方法很简单,调用 gson 对象的 toJson 方法,传入要序列化的对象 反序化的方式也类似 继续使用上一节声明的 User 类,根据 User 类声明的各个属性名,移动端的开发者希望接口返回的数据格式即是如下这样的 如果没有和服务器端沟通好或者是 API 改版了,接口返回的数据格式可能是这样的 如果继续使用上一节介绍的方法,那无疑会解析出错 例如 name 属性值解析不到,所以为 null 此时为了兼顾多种格式的数据,就需要使用 SerializedName 注解 根据 SerializedName 的声明来看,SerializedName 包含两个属性值,一个是字符串,一个是字符串数组,而字符串数组含有默认值 SerializedName 的作用是为了在序列化或反序列化时,指导 Gson 如果将原有的属性名和其它特殊情况下的属性名联系起来 例如,修改 User 类,为 name 声明 SerializedName 注解,注解值为 userName 在序列时,Json 格式就会相应改变 在反序列化时也一样,能够解析到正确的属性值 还有个问题没解决,为了应对多种属性名不一致的情况,难道我们要声明多个 User 类吗?这显然是不现实的,所以还需要为 User 类设置多个备选属性名,这就需要用到 SerializedName 注解的另一个属性值 alternate 了。 以下几种情况都能够被正确的反序列化 有时候并不是所有的字段都需要进行系列化和反序列化,因此需要对某些字段进行排除,有四种方法可以来实现这种需求。 Expose 注解包含两个属性值,且均声明了默认值。Expose 的含义即为“暴露”,即用于对外暴露字段,serialize 用于指定是否进行序列化,deserialize 用于指定是否进行反序列化。如果字段不声明 Expose 注解,则意味着不进行序列化和反序列化操作,相当于两个属性值均为 false 。此外,Expose 注解需要和 GsonBuilder 构建的 Gson 对象一起使用才能生效。 Expose 注解的注解值声明情况有四种 现在来看个例子,修改 User 类 按照如上的注解值,只有声明了 Expose 注解且 serialize 值为 true 的字段才能被序列化,只有声明了 Expose 注解且 deserialize 值为 true 的字段才能被反序列化 Gson 提供了 @Since 和 @Until 两个注解基于版本对字段进行过滤,@Since 和 @Until 都包含一个 Double 属性值,用于设置版本号。Since 的意思是“自……开始”,Until 的意思是“到……为止”,一样要和 GsonBuilder 配合使用。 当版本( GsonBuilder 设置的版本) 大于或等于 Since 属性值或小于 Until 属性值时字段会进行序列化和反序列化操作,而没有声明注解的字段都会加入序列化和反序列操作 现在来看个例子,修改 User 类 访问修饰符由 java.lang.reflect.Modifier 提供 int 类型的定义,而 GsonBuilder 对象的 excludeFieldsWithModifiers 方法接收一个 int 类型可变参数,指定不进行序列化和反序列化操作的访问修饰符字段 看个例子 GsonBuilder 类包含 setExclusionStrategies(ExclusionStrategy... strategies) 方法用于传入不定长参数的策略方法,用于直接排除指定字段名或者指定字段类型 看个例子 字段名为 "intField" 和字段类型为 double 的字段都会被排除掉 setExclusionStrategies 方法在序列化和反序列化时都会生效,如果只是想指定其中一种情况下的排除策略或分别指定排除策略,可以改为使用以下两个方法 对于 Gson 而言,在序列化时如果某个属性值为 null 的话,那么在序列化时该字段不会参与进来,如果想要显示输出该字段的话,可以通过 GsonBuilder 进行配置 默认的序列化后的 Josn 字符串并不太直观,可以选择格式化输出 Gson 也可以对时间值进行格式化 TypeAdapter 是一个泛型抽象类,用于接管某种类型的序列化和反序列化过程,包含两个抽象方法,分别用于自定义序列化和反序列化过程 下面看个简单的例子 定义 TypeAdapter 的子类 UserTypeAdapter 来接管 User 类的序列化和反序列化过程 这里设定当 User 类序列化时 Json 中的Key值都是大写字母开头,反序列化时支持“name”和“Name”两种不同的 Json 风格 可以看到 User 类按照预定义的策略来完成序列化和反序列化了 TypeAdapter 将序列化和反序列操作都接管了过来,其实 Gson 还提供了只接管序列化过程的接口,即 JsonSerializer 看个例子 相对应的,JsonDeserializer 接口提供了反序列化的接口 这里有个比较麻烦的地方,那就是在使用 TypeAdapter 、JsonSerializer 和 JsonDeserializer 时,总需要调用 registerTypeAdapter 方法进行注册,那有没有更简单的注册方法呢? 有的,Gosn 还提供了另一个注解 @JsonAdapter 用于进行简单的声明 类似于这样,声明了 User 类的序列化或反序列化操作由 UserTypeAdapter 完成,注解的优先级高于 registerTypeAdapter 方法 TypeAdapterFactory 是用于创建 TypeAdapter 的工厂类,通过参数 TypeToken 来查找确定对应的 TypeAdapter,如果没有就返回 null 并由 Gson 默认的处理方法来进行序列化和反序列化操作,否则就由用户预定义的 TypeAdapter 来进行处理 这一篇文章好像写得太长了一点?Gson 的知识点介绍到这里也差不多了,以后如果还发现新内容的话我会继续补充,现在就先这样啦
2023-08-05 19:24:521

Spark内存管理详解(下)——内存管理

弹性分布式数据集(RDD)作为Spark最根本的数据抽象,是只读的分区记录(Partition)的集合,只能基于在稳定物理存储中的数据集上创建,或者在其他已有的RDD上执行转换(Transformation)操作产生一个新的RDD。转换后的RDD与原始的RDD之间产生的依赖关系,构成了血统(Lineage)。凭借血统,Spark保证了每一个RDD都可以被重新恢复。但RDD的所有转换都是惰性的,即只有当一个返回结果给Driver的行动(Action)发生时,Spark才会创建任务读取RDD,然后真正触发转换的执行。 Task在启动之初读取一个分区时,会先判断这个分区是否已经被持久化,如果没有则需要检查Checkpoint或按照血统重新计算。所以如果一个RDD上要执行多次行动,可以在第一次行动中使用persist或cache方法,在内存或磁盘中持久化或缓存这个RDD,从而在后面的行动时提升计算速度。事实上,cache方法是使用默认的MEMORY_ONLY的存储级别将RDD持久化到内存,故缓存是一种特殊的持久化。 堆内和堆外存储内存的设计,便可以对缓存RDD时使用的内存做统一的规划和管理 (存储内存的其他应用场景,如缓存broadcast数据,暂时不在本文的讨论范围之内)。 RDD的持久化由Spark的Storage模块 [1] 负责,实现了RDD与物理存储的解耦合。Storage模块负责管理Spark在计算过程中产生的数据,将那些在内存或磁盘、在本地或远程存取数据的功能封装了起来。在具体实现时Driver端和Executor端的Storage模块构成了主从式的架构,即Driver端的BlockManager为Master,Executor端的BlockManager为Slave。Storage模块在逻辑上以Block为基本存储单位,RDD的每个Partition经过处理后唯一对应一个Block(BlockId的格式为 rdd_RDD-ID_PARTITION-ID )。Master负责整个Spark应用程序的Block的元数据信息的管理和维护,而Slave需要将Block的更新等状态上报到Master,同时接收Master的命令,例如新增或删除一个RDD。 在对RDD持久化时,Spark规定了MEMORY_ONLY、MEMORY_AND_DISK等7种不同的 存储级别 ,而存储级别是以下5个变量的组合 [2] : 通过对数据结构的分析,可以看出存储级别从三个维度定义了RDD的Partition(同时也就是Block)的存储方式: RDD在缓存到存储内存之前,Partition中的数据一般以迭代器( Iterator )的数据结构来访问,这是Scala语言中一种遍历数据集合的方法。通过Iterator可以获取分区中每一条序列化或者非序列化的数据项(Record),这些Record的对象实例在逻辑上占用了JVM堆内内存的other部分的空间,同一Partition的不同Record的空间并不连续。 RDD在缓存到存储内存之后,Partition被转换成Block,Record在堆内或堆外存储内存中占用一块连续的空间。 将Partition由不连续的存储空间转换为连续存储空间的过程,Spark称之为“展开”(Unroll) 。Block有序列化和非序列化两种存储格式,具体以哪种方式取决于该RDD的存储级别。非序列化的Block以一种DeserializedMemoryEntry的数据结构定义,用一个数组存储所有的Java对象,序列化的Block则以SerializedMemoryEntry的数据结构定义,用字节缓冲区(ByteBuffer)来存储二进制数据。每个Executor的Storage模块用一个链式Map结构(LinkedHashMap)来管理堆内和堆外存储内存中所有的Block对象的实例 [6] ,对这个LinkedHashMap新增和删除间接记录了内存的申请和释放。 因为不能保证存储空间可以一次容纳Iterator中的所有数据,当前的计算任务在Unroll时要向MemoryManager申请足够的Unroll空间来临时占位,空间不足则Unroll失败,空间足够时可以继续进行。对于序列化的Partition,其所需的Unroll空间可以直接累加计算,一次申请。而非序列化的Partition则要在遍历Record的过程中依次申请,即每读取一条Record,采样估算其所需的Unroll空间并进行申请,空间不足时可以中断,释放已占用的Unroll空间。如果最终Unroll成功,当前Partition所占用的Unroll空间被转换为正常的缓存RDD的存储空间,如下图2所示。 在 《Spark内存管理详解(上)——内存分配》 的图3和图5中可以看到,在静态内存管理时,Spark在存储内存中专门划分了一块Unroll空间,其大小是固定的,统一内存管理时则没有对Unroll空间进行特别区分,当存储空间不足是会根据动态占用机制进行处理。 由于同一个Executor的所有的计算任务共享有限的存储内存空间,当有新的Block需要缓存但是剩余空间不足且无法动态占用时,就要对LinkedHashMap中的旧Block进行淘汰(Eviction),而被淘汰的Block如果其存储级别中同时包含存储到磁盘的要求,则要对其进行落盘(Drop),否则直接删除该Block。 存储内存的淘汰规则为: 落盘的流程则比较简单,如果其存储级别符合 _useDisk 为true的条件,再根据其 _deserialized 判断是否是非序列化的形式,若是则对其进行序列化,最后将数据存储到磁盘,在Storage模块中更新其信息。 Executor内运行的任务同样共享执行内存,Spark用一个HashMap结构保存了任务到内存耗费的映射。每个任务可占用的执行内存大小的范围为 1/2N ~ 1/N ,其中N为当前Executor内正在运行的任务的个数。每个任务在启动之时,要向MemoryManager请求申请最少为1/2N的执行内存,如果不能被满足要求则该任务被阻塞,直到有其他任务释放了足够的执行内存,该任务才可以被唤醒。 执行内存主要用来存储任务在执行Shuffle时占用的内存,Shuffle是按照一定规则对RDD数据重新分区的过程,我们来看Shuffle的Write和Read两阶段对执行内存的使用: 在ExternalSorter和Aggregator中,Spark会使用一种叫AppendOnlyMap的哈希表在堆内执行内存中存储数据,但在Shuffle过程中所有数据并不能都保存到该哈希表中,当这个哈希表占用的内存会进行周期性地采样估算,当其大到一定程度,无法再从MemoryManager申请到新的执行内存时,Spark就会将其全部内容存储到磁盘文件中,这个过程被称为溢存(Spill),溢存到磁盘的文件最后会被归并(Merge)。 Shuffle Write阶段中用到的Tungsten是Databricks公司提出的对Spark优化内存和CPU使用的计划 [4] ,解决了一些JVM在性能上的限制和弊端。Spark会根据Shuffle的情况来自动选择是否采用Tungsten排序。Tungsten采用的页式内存管理机制建立在MemoryManager之上,即Tungsten对执行内存的使用进行了一步的抽象,这样在Shuffle过程中无需关心数据具体存储在堆内还是堆外。每个内存页用一个MemoryBlock来定义,并用 Object obj 和 long offset 这两个变量统一标识一个内存页在系统内存中的地址。堆内的MemoryBlock是以long型数组的形式分配的内存,其 obj 的值为是这个数组的对象引用, offset 是long型数组的在JVM中的初始偏移地址,两者配合使用可以定位这个数组在堆内的绝对地址;堆外的MemoryBlock是直接申请到的内存块,其 obj 为null, offset 是这个内存块在系统内存中的64位绝对地址。Spark用MemoryBlock巧妙地将堆内和堆外内存页统一抽象封装,并用页表(pageTable)管理每个Task申请到的内存页。 Tungsten页式管理下的所有内存用64位的逻辑地址表示,由页号和页内偏移量组成: 有了统一的寻址方式,Spark可以用64位逻辑地址的指针定位到堆内或堆外的内存,整个Shuffle Write排序的过程只需要对指针进行排序,并且无需反序列化,整个过程非常高效,对于内存访问效率和CPU使用效率带来了明显的提升 [5] 。 Spark的存储内存和执行内存有着截然不同的管理方式:对于存储内存来说,Spark用一个LinkedHashMap来集中管理所有的Block,Block由需要缓存的RDD的Partition转化而成;而对于执行内存,Spark用AppendOnlyMap来存储Shuffle过程中的数据,在Tungsten排序中甚至抽象成为页式内存管理,开辟了全新的JVM内存管理机制。 Spark的内存管理是一套复杂的机制,且Spark的版本更新比较快,笔者水平有限,难免有叙述不清、错误的地方,若读者有好的建议和更深的理解,还望不吝赐教。
2023-08-05 19:24:591

epc编码由几部分组成,都有几种类型

条码一共有九种:EAN条码:是国际物品编码协会制定的一种条码,即通用商品条码,通用于全世界,属一维条码。 UPC条码:一维条码的一种,由美国统一代码委员会制定,主要用于美国和加拿大地区。 三九条码:是一种条、空均表示信息的非连续型条码,可表示数字0——9、字母A——Z和-、空格等43个字符,主要用于工业、图书以及票据的自动化管理上。 库德巴条码:是一种条、空均表示信息的非连续、可变长度、双向自检的条码,可表示数字0——9、字母A——Z和-、+等特殊字符。 二五条码:是一种只有条表示信息的非连续型条码,条与条之间等距离的间隔不表示信息。 交叉二五条码:是编码原理同二五条码、只是将条与条之间的间隔作为信息的一部分进行编制的一种连续码。 矩阵二五条码:是将条码符号排成一个4╳5的矩阵,表示一个四位数字,有条的位置表示逻辑“1”、无条的位置表示逻辑“0”的一种条码。一一条码:是一种分离式的带有强自校验功能、高密度的条码。 二维条码:是一种由点、空组成的点阵形条码,它不需要数据库的支持就可使用,实际上是一种高密度、高信息量的便携式数据文件,具有信息容量大、编码范围广、纠错能力强、译码可靠性高、防伪能力强等技术特点,可广泛应用于各个领域。商品条码的概念商品条码是由一组规则排列的条、空及其对应字符组成的表示一定信息的商品标识。商品条码包括标准版商品条码和缩短版商品条码。标准版商品条码由厂商识别代码、商品项目代码和校验码组成。缩短版商品条码由商品项目识别代码和校验码组成。条码是利用光电扫描阅读设备识读并实现数据输入计算机的一种特殊代码。它是由一组粗细不同、黑白或彩色相间的条、空及其相应的字符、数字、字母组成的标记,用以表示一定的信息。
2023-08-05 19:25:093

如何解决分布式系统中的跨时区问题

  从跨时区的角度对DateTime这个我们熟知的类型进行了深入探讨,它们都是为这篇文章作的准备工作。在接下来的两篇文章中,我们将完整的介绍如果在一个分布式系统中处理时区的问题。  一、场景以及需求  为了让大家本文介绍的主题有一个比较直观的认识,我们给出一个具体的应用场景。一个跨国公司开发一套统一的办公系统,供遍布全球的所有分公司使用。客户端的UI采用Smart Client (Windows Forms应用),而主要的业务逻辑均通过WCF服务的形式提供。我们将承载业务服务的服务器成为应用服务器,应用服务器部属于中国境内(东8区)。主要的客户端(分公司)分布于三个主要的国家和地区:北美、欧州和澳洲。  不论客户端和服务器之间,还是不同的客户端之间所处的时区均不相同,在进行时间处理的时候就会遇到一些麻烦:某个客户端通过服务调用获取的时间值应该基于哪个时区?对于这个问题,不同的场景可能有不同的要求。在大部分情况下,我们希望获取的时间值就是基于客户端的本地时区。不过也有些场景我们希望获取的时间值对应的时区是描述对象基于的那个时区。比如说,美国分公司于当地时间9月1号早8点举行开业典礼,欧洲分公司员工读取这条信息就没有必要将时间转换成基于本地时区的时间。  不过,本文不考虑这种情况,我们的最终要求是:客户端应用根本不用考虑时区问题,就像是一个单纯的本地应用一样。客户端调用服务传入的时间是DateTimeKind.Local时间或者DateTimeKind.Unspecified时间,同理通过服务调用返回的时间也应该是基于客户端所在时区的时间。  二、解决方案实现原理  现在我们就来谈谈如何解决上面提出的问题。既然时区的处理不能在客户端做,换言之就必须在服务端实现。我们的一个前提是:在数据库中不存储时区的任何信息。在这样一个前提下实现上述的目标,需要解决两个问题:时间的保存和时间获取。  在时间的保存方面,既然数据库中能保存任何时区偏移之类的信息。在这种情况下,我们必须让所有保存在数据库中的时间都是基于同一个时区。我们可以选择应用服务器所在的时区,也可以直接采用UTC时间。我们的方案采用后者,即数据库所有时间保存为UTC时间 。  时间在数据库中的存储形式确定了,现在又出现一个问题:客户端传来的时间为客户端所在时区的当地时间,服务端接收到客户端发送的时间后,需要基于客户端相应时区转换成UTC时间才能保存到数据库。那么,服务端如何获取客户端所在的时区信息呢?将其作为服务操作的参数肯定是不可取的。  如果你看过我之前的WCF系列文章,可能会记得我有一篇介绍如何通过WCF扩展实现在客户端和服务端之间传递上下文的文章:《通过WCF Extension实现Context信息的传递》。在这篇文章中我通过WCF扩展实现了将可户端的Culture和UICulture自动传向了服务端,从而确保两边保存一样的语言文化环境上下文。如果我们能够将基于客户端本地的TimeZoneInfo作为上下文进行传递,就能解决服务端对客户端的时区识别问题了。  关于保存时间的处理大体可以通过上面的序列图(点击看大图)来描述。客户端将基于本地时区的DateTimeKind.Local或者DateTimeKind.Unspecified时间作为输入操作调用某个服务,与此同时,本地的TimeZoneInfo序列化后作为上下文传递到服务端。服务端接将接收到的时间,根据接收到TimeZoneInfo上下文转换成DateTimeKind.Utc时间,并保存到数据库中。  当客户端调用服务获取某个时间的时候,本地的同样作为上下文信息被传递到服务端。借助于这个TimeZoneInfo,服务端可以将数据库中以UTC形式保存的时间转换成基于客户端时区的DateTimeKind.Local时间。右图(点击看大图)所示的序列图反映了这个过程。  三、TimeZoneInfo的序列化问题  在《谈谈你最熟悉的System.DateTime[上篇]》对TimeZoneInfo这个类进行介绍中,我说该类是可以被序列化的,序列化对于解决跨时区问题很重要。就是因为我们需要将TimeZoneInfo作为上下文在客户端和服务端进行传递,换言之,就是将TimeZoneInfo对象进行序列化,将序列化后的内容放入出栈消息(Outgoing Message)的消息报头(Message Header)中。  不过关于TimeZoneInfo对象序列化,我们一般并不会真正地将整个TimeZoneInfo对象交给序列化器去做序列化,而是利用定义在TimeZoneInfo中的两个特殊的方法来进行序列化和反序列化的工作。一个是实例方法ToSerializedString,将TimeZoneInfo转换成序列化后的一个字符串;另一个则静态方法FromSerializedString,对序列化后的字符转进行反序列化生成TimeZoneInfo对象。这两个方法的定义如下:  1: [Serializable]  2: public sealed class TimeZoneInfo  3: {  4: //Others  5: public static TimeZoneInfo FromSerializedString(string source);  6: public string ToSerializedString();  7: }  下面的代码演示了通过上述的这两个方法对TimeZoneInfo的序列化和反序列化的实现:  1: string serializedString = TimeZoneInfo.Local.ToSerializedString();  2: Console.WriteLine("SerializedString: {0} ", serializedString);  3: TimeZoneInfo deserializedTimeZone = TimeZoneInfo.FromSerializedString(serializedString);  4: Console.WriteLine("deserializedTimeZone.Equals(TimeZoneInfo.Local) ? {0}", deserializedTimeZone.Equals(TimeZoneInfo.Local));  5: Console.WriteLine("deserializedTimeZone == TimeZoneInfo.Local ? {0}", deserializedTimeZone == TimeZoneInfo.Local);  下面是输出结果,从中我们看出最终被序列化后的文本的内容。此外,输出结果也反映两个另一个信息:两个包含时区信息的TimeZoneInfo对象,调用Equals方法和使用==操作符得到不一样的结果。个人觉得这是微软作得不太到位的地方。  1: SerializedString: China Standard Time;480;(UTC+08:00) Beijing, Chongqing, Hong Kong, Urumqi;China Standard Time;China Daylight Time;;  2:  3: deserializedTimeZone.Equals(TimeZoneInfo.Local) ? True  4: deserializedTimeZone == TimeZoneInfo.Local ? False  关于这个分布式系统中跨时区问题的讨论暂时就到这里,在下篇中我将给出一个完整的例子,相信会使你对本文给出的解决方案有一个深刻的认识。转载,仅供参考。
2023-08-05 19:25:221

php 数组序列化

<?php$string = "a:7:{i:0;O:8:"stdClass":2:{s:3:"key";s:12:"学员姓名";s:5:"value";s:6:"哈哈";}i:1;O:8:"stdClass":2:{s:3:"key";s:107:"参加过这次疯狂家族夏令营后,是否可以吸引你对科学课程(物理化学生物)的兴趣";s:5:"value";s:9:"有兴趣";}i:2;O:8:"stdClass":2:{s:3:"key";s:57:"对於疯狂家族夏令营的讲师之教学满意度。";s:5:"value";s:6:"喜欢";}i:3;O:8:"stdClass":2:{s:3:"key";s:48:"对於助教哥哥、姊姊之服务满意度。";s:5:"value";s:12:"非常喜欢";}i:4;O:8:"stdClass":2:{s:3:"key";s:51:"对於我们今天准备的午餐,你是否喜欢";s:5:"value";s:0:"";}i:5;O:8:"stdClass":2:{s:3:"key";s:72:"明年寒假您是否愿意继续参加疯狂家族冬令营的活动。";s:5:"value";s:6:"愿意";}i:6;O:8:"stdClass":2:{s:3:"key";s:81:"想对讲师大哥哥大姊姊们讲的话、爸妈想对疯狂家族的建议:";s:5:"value";s:9:"不知道";}}";var_dump(unserialize($string));?>这样就可以了
2023-08-05 19:25:303

如何统计Redis中各种数据的大小

如果 MySQL 数据库比较大的话,我们很容易就能查出是哪些表占用的空间;不过如果 Redis 内存比较大的话,我们就不太容易查出是哪如果 MySQL 数据库比较大的话,我们很容易就能查出是哪些表占用的空间;不过如果 Redis 内存比较大的话,我们就不太容易查出是哪些(种)键占用的空间了。 有一些工具能够提供必要的帮助,比如 redis-rdb-tools 可以直接分析 RDB 文件来生成报告,可惜它不能百分百实现我的需求,而我也不想在它的基础上二次开发。实际上开发一个专用工具非常简单,利用 SCAN 和 DEBUG 等命令,没多少行代码就能实现:当然,前提是你需要提前总结出可能的键模式,,简单但不严谨的方法是 MONITOR:shell> /path/to/redis-cli monitor |awk -F """ "$2 ~ "ADD|SET|STORE|PUSH" {print $4}"此外,需要注意的是:因为 DEBUG 返回的 serializedlength 是序列化后的长度,所以最终计算的值小于实际内存占用,但考虑到相对大小依然是有参考意义的。Ubuntu 14.04下Redis安装及简单测试 Redis集群明细文档 Ubuntu 12.10下安装Redis(图文详解)+ Jedis连接Redis Redis系列-安装部署维护篇 CentOS 6.3安装Redis Redis安装部署学习笔记 Redis配置文件redis.conf 详解 Redis 的详细介绍:请点这里 Redis 的下载地址:请点这里本文永久更新链接地址:
2023-08-05 19:25:381

C#中的using.system

1.MSDN2.VS对像查看器3.第三方软件
2023-08-05 19:26:034

为什么Ajax的请求会一次点击多次提交

这次给大家带来为什么Ajax的请求会一次点击多次提交,Ajax请求一次点击多次提交的注意事项有哪些,下面就是实战案例,一起来看一下。页面中的按钮的type是submit的: <input type="submit" value="Create" id="submit" />ajax的请求,在JQuery中是:$(function () {$("#submit").click(function () {var createGenreForm = $("#createGenreForm");if (createGenreForm.valid()) {var obj = {Name: $("#Name").val(),Description: $("#Description").val()};var jsonSerialized = JSON.stringify(obj);$.ajax({type: "POST",url: createGenreForm.attr("action"),dataType: "json",contentType: "application/json; charset=utf-8",data: jsonSerialized,success: function (result) {alert(result.Message);},error: function (error) {alert("There was an error posting the data to the server: " + error.responseText);}});}});});发生两次提交的原因是在执行完ajax请求后,并没有阻止submit的行为,所以解决方法有两种:1、不使用type为submit类型的按钮,而是使用type是button的按钮。2、在$("#submit").click函数中,最后加一行return false;,即可阻止submit。一点说明:为什么在标题中要嵌入英文?原因是为了能够让国外的网友能查询到这篇文章。平常在Google上查资料的时候,经常参考国外网友的博客,帮助我解决了很多问题,所以我也想让他们能够参考我写的内容。当然文中我不可能全部译为英文,所以我尽量把代码粘全,靠代码说话吧。相信看了本文案例你已经掌握了方法,更多精彩请关注Gxl网其它相关文章!推荐阅读:ajax怎样提交form表单与实现文件上传ajax后台success上传的json数据如何处理
2023-08-05 19:26:431

HttpURLConnection中setRequestProperty()用法

这个是告诉服务器你的客户端的配置/需求比如说你要取某个文件的多少字节到多少字节就通过这个东西告诉服务器你的客户端支持压缩,也可以告诉服务器服务器会压缩传输你的客户端支持什么编码也可以告诉服务器服务器会尽量按照你的编码传递数据还有比如你的客户端是什么类型,IE,FIrefox之类,有的服务器会按照你的客户端类型给你传送文本你啥都不告诉服务器就按缺省配置传递内容给你的客户端
2023-08-05 19:26:542

hibernate怎么开启注解

1.类级别注解@Entity 映射实体类@Table 映射数句库表@Entity(name="tableName") - 必须,注解将一个类声明为一个实体bean。属性:name - 可选,对应数据库中的一个表。若表名与实体类名相同,则可以省略。@Table(name="",catalog="",schema="") - 可选,通常和@Entity 配合使用,只能标注在实 体的 class 定义处,表示实体对应的数据库表的信息。属性:name - 可选,表示表的名称,默认地,表名和实体名称一致,只有在不一致的情况下才需 要指定表名catalog - 可选,表示Catalog名称,默认为 Catalog("").schema - 可选 , 表示 Schema 名称 , 默认为Schema("").2.属性级别注解@Id 映射生成主键@Version 定义乐观锁@Column 映射表的列@Transient 定义暂态属性 2.1 与主键相关注解@Id - 必须,定义了映射到数据库表的主键的属性,一个实体只能有一个属性被映射为主 键,置于 getXxxx() 前。@GeneratedValue(strategy=GenerationType,generator="") - 可选,用于定义主键生成策略。属性:Strategy - 表示主键生成策略,取值有:GenerationType.AUTO - 根据底层数据库自动选择(默认),若数据库支持自动 增 长类型,则为自动增长。GenerationType.INDENTITY - 根据数据库的Identity字段生成,支持DB2、MySQL、 MS、SQL Server、SyBase与HyperanoicSQL数据库的Identity 类型主键。GenerationType.SEQUENCE - 使用Sequence来决定主键的取值,适合Oracle、DB2等 支持Sequence的数据库,一般结合@SequenceGenerator使用。(Oracle没有自动增长类型,只能用Sequence)GenerationType.TABLE - 使用指定表来决定主键取值,结合@TableGenerator使用。如:@Id@TableGenerator(name="tab_cat_gen",allocationSize=1)@GeneratedValue(Strategy=GenerationType.Table)Generator - 表示主键生成器的名称,这个属性通常和ORM框架相关 , 例如:Hibernate 可以指定 uuid 等主键生成方式@SequenceGenerator — 注解声明了一个数据库序列。属性:name - 表示该表主键生成策略名称,它被引用在@GeneratedValue中设置的“gernerator”值中。sequenceName - 表示生成策略用到的数据库序列名称。initialValue - 表示主键初始值,默认为0.allocationSize - 每次主键值增加的大小,例如设置成1,则表示每次创建新记录后自动加1,默认为50.示例 :@Id@GeneratedValues(strategy=StrategyType.SEQUENCE)public int getPk() {return pk; } Hibernate的访问类型为field时,在字段上进行注解声;访问类型为property时,在getter方法上进行注释声明。2.2 与非主键相关注解@Version - 可以在实体bean中使用@Version注解,通过这种方式可添加对乐观锁定的支持@Basic - 用于声明属性的存取策略:@Basic(fetch=FetchType.EAGER) 即时获取(默认的存取策略)@Basic(fetch=FetchType.LAZY) 延迟获取@Temporal - 用于定义映射到数据库的时间精度:@Temporal(TemporalType=DATE) 日期@Temporal(TemporalType=TIME) 时间@Temporal(TemporalType=TIMESTAMP) 两者兼具@Column - 可将属性映射到列,使用该注解来覆盖默认值,@Column描述了数据库表中 该字段的详细定义,这对于根据 JPA 注解生成数据库表结构的工具非常有作用。属性:name - 可选,表示数据库表中该字段的名称,默认情形属性名称一致nullable -可选,表示该字段是否允许为 null,默认为trueunique - 可选,表示该字段是否是唯一标识,默认为 falselength - 可选,表示该字段的大小,仅对 String 类型的字段有效,默认值255.insertable -可选,表示在ORM框架执行插入操作时,该字段是否应出现INSETRT 语句中,默认为 trueupdateable -可选,表示在ORM 框架执行更新操作时,该字段是否应该出现在 UPDATE语句中,默认为 true.对于一经创建就不可以更改的字段,该 属性非常有用,如对于 birthday字段。columnDefinition - 可选,表示该字段在数据库中的实际类型。通常ORM框架可以根 据属性类型自动判断数据库中字段的类型,但是对于Date类型仍无法确定数据 库中字段类型究竟是 DATE,TIME还是 TIMESTAMP. 此外 ,String 的默认映射类型为VARCHAR, 如果要将 String 类型映射到特定数据库的 BLOB或 TEXT字段类型,该属性非常有用。示例 :@Column(name="BIRTH",nullable="false",columnDefinition="DATE")public String getBithday() {return birthday;}@Transient - 可选,表示该属性并非一个到数据库表的字段的映射,ORM框架将忽略该属性,如果一个属性并非数据库表的字段映射,就务必将其标示为@Transient,否则ORM 框架默认其注解为 @Basic示例 :// 根据 birth 计算出 age 属性@Transientpublic int getAge() {return getYear(new Date()) - getYear(birth);}2.3无注解属性的默认值如果属性为单一类型,则映射为@Basic,否则,如果属性对应的类型定义了@Embeddable注解,则映射为@Embedded,否则,如果属性对应的类型实现了Serializable, 则属性被映射为@Basic并在一个列中保存该对象的serialized版本,否则,如果该属性的类型为java.sql.Clob或 java.sql.Blob,则作为@Lob并映射到适当的LobType.。3.映射继承关系@Inheritance注解来定义所选择的策略. 这个注解需要在每个类层次结构(class hierarchy) 最顶端的实体类上使用4.映射实体bean的关联关系4.1关联映射的一些定义单向一对多:一方有集合属性,包含多个多方,而多方没有一方的引用。用户--->电子邮件单向多对一:多方有一方的引用,一方没有多方的引用。论文类别--->类别双向一对多:两边都有多方的引用,方便查询。班级--->学生双向多对一:两边都有多方的引用,方便查询。单向多对多:需要一个中间表来维护两个实体表。论坛--->文章单向一对一:数据唯一,数据库数据也是一对一。舰船--->水手主键相同的一对一:使用同一个主键,省掉外键关联。客户--->地址单向:关系写哪边,就由谁管理。双向:一般由多方管理。@OneToMany(mappedBy="对方") //反向配置,对方管理。4.2 关联映射的一些共有属性@OneToOne、@OneToMany、@ManyToOne、ManyToMany的共有属性:fetch - 配置加载方式。取值有Fetch.EAGER - 及时加载,多对一默认是Fetch.EAGER Fetch.LAZY - 延迟加载,一对多默认是Fetch.LAZYcascade - 设置级联方式,取值有:CascadeType.PERSIST - 保存CascadeType.REMOVE - 删除CascadeType.MERGE - 修改CascadeType.REFRESH - 刷新CascadeType.ALL - 全部targetEntity - 配置集合属性类型,如:@OneToMany(targetEntity=Book.class)@JoinColumn - 可选,用于描述一个关联的字段。@JoinColumn和@Column类似,介量描述的不是一个简单字段,而是一个关联字段,例如描述一个 @ManyToOne 的字段。属性:name - 该字段的名称,由于@JoinColumn描述的是一个关联字段,如ManyToOne, 则默认的名称由其关联的实体决定。例如,实体 Order 有一个user 属性来关联实体 User, 则 Order 的 user 属性为一个外键 ,其默认的名称为实体User的名称 + 下划线 + 实体User的主键名称4.3 一对一关联@OneToOne – 表示一个一对一的映射1.主表类A与从表类B的主键值相对应。主表:@OneToOne(cascade = CascadeType.ALL)@PrimaryKeyJoinColumnpublic B getB(){Return b;}从表:无2.主表A中有一个从表属性是B类型的b主表:@OneToOne(cascade = CascadeType.ALL)@JoinColumn(name="主表外键") //这里指定的是数据库中的外键字段。public B getB(){return b;}从表:无3.主表A中有一个从表属性是B类型的b,同时,从表B中有一个主表属性是A类型的a主表:@OneToOne(cascade = CascadeType.ALL)@JoinColumn(name="主表外键") //这里指定的是数据库中的外键字段。public B getB(){return b;}从表:@OneToOne(mappedBy = "主表类中的从表属性")public 主表类 get主表类(){return 主表对象}注意:@JoinColumn是可选的。默认值是从表变量名+"_"+从表的主键(注意,这里加的是主键。而不是主键对应的变量)。4.4 多对一关联@ManyToOne - 表示一个多对一的映射,该注解标注的属性通常是数据库表的外键。1.单向多对一:多方有一方的引用,一方没有多方的引用。在多方@ManyToOne(targetEntity=XXXX.class) //指定关联对象@JoinColumn(name="") //指定产生的外键字段名2.双向多对一:配置方式同双向一对多。示例 :// 订单 Order 和用户 User 是一个 ManyToOne 的关系// 在 Order 类中定义@ManyToOne()@JoinColumn(name="USER")public User getUser() {return user;}4.5 一对多关联@OneToMany - 描述一个一对多的关联,该属性应该为集合类型,在数据库中并没有实际字段。1.单向一对多:一方有集合属性,包含多个多方,而多方没有一方的引用。@OneToMany 默认会使用连接表做一对多关联添加@JoinColumn(name="xxx_id") 后,就会使用外键关联,而不使用连接表了。2.双向一对多1)在多方@ManyToOne@JoinColumn(name="自己的数据库外键列名")2)在一方@OneToMany(mappedBy="多端的关联属性名")@JoinColumn(name="对方的数据库外键列名")4.6 多对多关联@ManyToMany - 可选,描述一个多对多的关联。属性:targetEntity - 表示多对多关联的另一个实体类的全名,例如:package.Book.classmappedBy - 用在双向关联中,把关系的维护权翻转。1.单向多对多关联:在主控方加入@ManyToMany注解即可。2.双向多对多关联:两个实体间互相关联的属性必须标记为@ManyToMany,并相互指定targetEntity属性。有且只有一个实体的@ManyToMany注解需要指定mappedBy属性,指向targetEntity的集合属性名称。以下为使用注解的实例:我们以产品类型ProductType类和产品Product类为例,一个产品类型对应多个产品,删除产品类型将该类型下的所有产品同时删除。首先需要@OneToMany和@ManyToOne标签来设置外键约束。在一对多的关系中,一是关系维护端(owner side),多是关系被维护端(inverse side)。@OneToMany有5个属性:targetEntity,fetch,mappedBy,orphanRemoval,cascade# targetEntity (Class targetEntity() default void.class;) 属性表示默认关联的实体类型,默认为当前标注的实体类;因为一对多的实体集合时保存在集合类中,因此必须指明集合类中保存的具体类型:1)指定集合泛型的具体类型;如:public List<Product> getProducts() {...}2)指定targetEntity属性类型;如:@OneToMany(targetEntity=Product.class,...)# fetch (FetchType fetch() default LAZY;) 属性是该实体的加载方式,FetchType是枚举类型,值有两种:LAZY和EAGER。一对多,一的一方,FetchType默认是LAZY, 多的一方FetchType默认是EAGER。如果在字段中声明为Eager,那么在取得当前Bean时,同时会抓取Bean中的关联Bean值。即数据库查询多次。反之Lazy则在之后抓取提交查询。具体实验讲解:[Hibernate] - EAGER and LAZY# mappedBy (String mappedBy() default "";) 属性用于双向关联实体时使用,用在关系的维护端指定关系的被维护端,在hibernate4中与外键标签@JoinColumn冲突,同时使用会报错;如:@OneToMany(targetEntity=Product.class,mappedBy="productType",...)。#orphanRemoval (boolean orphanRemoval() default false;) 属性作用是删除孤立记录,即外键为空的类型,默认为false。该属性为true时会根据外键执行级联删除,因为当你删除productType的记录时,会使product表的记录外键被删除变为孤立记录,该属性进而将孤立记录删除掉。但hibernate实际执行的语句是先删除product表中的记录,后删除productType表中的记录。#cascade (CascadeType[] cascade() default {};) 级联属性,默认为空。该属性其实是一个值为枚举类型CascadeType的数组,在jpa的CascadeType枚举类型里面,有PERSIST(级联保存操作),MERGE(合并(merge=save+update)),REMOVE(级联删除操作),REFRESH(级联刷新操作),DETACH(级联分离操作),ALL(所有级联操作)等6个枚举变量,其中DETACH是jpa2.0新加入的变量。这些变量的作用和他们的名字一样,可以很清楚的辨别出。这里我现在仅仅用过级联删除操作,其他的操作都仅仅是从名字和注释上猜测的,留待以后测试。上面是jpa的级联操作,但在网上很多教程中往往写到用CascadeType.DELETE_ORPHAN,该操作属于hibernate自身的级联操作,在hibernate4中已声明过时,并推荐使用orphanRemoval属性来级联删除记录。在级联删除记录时,要先用hibernate.load()方法加载持久化对象,然后才能根据外键进行级联删除。至于load()方法和get()方法有什么不同,这里有一篇博文讲的不错:hibernate session的常用方法解析注意:改变model类的时候可能需要重新建表,如果级联删除不成功可以试一下。下面开始代码,首先是productType类,要求删除type的时候要删掉该type对应的所有
2023-08-05 19:27:031

serialVersionUID有什么作用

serialVersionUID作用: 序列化时为了保持版本的兼容性,即在版本升级时反序列化仍保持对象的唯一性。有两种生成方式: 一个是默认的1L,比如:private static final long serialVersionUID = 1L; 一个是根据类名、接口名、成员方法及属性等来生成一个64位的哈希字段,比如: private static final long serialVersionUID = xxxxL;当你一个类实现了Serializable接口,如果没有定义serialVersionUID,Eclipse会提供这个 提示功能告诉你去定义 。在Eclipse中点击类中warning的图标一下,Eclipse就会 自动给定两种生成的方式。如果不想定义它,在Eclipse的设置中也 可以把它关掉的,设置如下: Window ==> Preferences ==> Java ==> Compiler ==> Error/Warnings ==> Potential programming problems 将Serializable class without serialVersionUID的warning改成ignore即可。如果你没有考虑到兼容性问题时,就把它关掉,不过有这个功能是好的,只要任何类别实现了Serializable这个接口的话,如果没有加入serialVersionUID,Eclipse都会给你warning提示,这个serialVersionUID为了让该类别Serializable向后兼容。 如果你的类Serialized存到硬盘上面后,可是后来你却更改了类别的field(增加或减少或改名),当你Deserialize时,就会出现Exception的,这样就会造成不兼容性的问题。 但当serialVersionUID相同时,它就会将不一样的field以type的预设值Deserialize,可避开不兼容性问题。
2023-08-05 19:27:311

serialVersionUID有什么作用?

serialVersionUID作用: 序列化时为了保持版本的兼容性,即在版本升级时反序列化仍保持对象的唯一性。有两种生成方式: 一个是默认的1L,比如:private static final long serialVersionUID = 1L; 一个是根据类名、接口名、成员方法及属性等来生成一个64位的哈希字段,比如: private static final long serialVersionUID = xxxxL;当你一个类实现了Serializable接口,如果没有定义serialVersionUID,Eclipse会提供这个 提示功能告诉你去定义 。在Eclipse中点击类中warning的图标一下,Eclipse就会 自动给定两种生成的方式。如果不想定义它,在Eclipse的设置中也 可以把它关掉的,设置如下: Window ==> Preferences ==> Java ==> Compiler ==> Error/Warnings ==> Potential programming problems 将Serializable class without serialVersionUID的warning改成ignore即可。如果你没有考虑到兼容性问题时,就把它关掉,不过有这个功能是好的,只要任何类别实现了Serializable这个接口的话,如果没有加入serialVersionUID,Eclipse都会给你warning提示,这个serialVersionUID为了让该类别Serializable向后兼容。 如果你的类Serialized存到硬盘上面后,可是后来你却更改了类别的field(增加或减少或改名),当你Deserialize时,就会出现Exception的,这样就会造成不兼容性的问题。 但当serialVersionUID相同时,它就会将不一样的field以type的预设值Deserialize,可避开不兼容性问题。
2023-08-05 19:27:411

private static final long serialVersionUID = 1L;是什么意思啊?

serialVersionUID的是最后的静态和私有变量,该变量的值将被JVM 产生 和用于序列化和对象的反序列化。序列化运行联营每个序列化类版本号,被称为的serialVersionUID,这是反序列化过程中用于验证序列化对象的发送者和接收者加载类是关于序列化兼容的对象。如果接收器已经装载一个类具有不同的serialVersionUID比相应的发送者的类的对象,然后反序列化将导致InvalidClassException。可序列化类可以通过声明名为“serialVersionUID的”必须是静态的,最后一个字段显式声明long类型自身的serialVersionUID,和。ANY-ACCESS-MODIFIER static final long serialVersionUID = 42L;ANY-访问修饰符静态最后长的serialVersionUID = 42L;如果一个序列化类没有显式声明的serialVersionUID,则序列化运行时将计算默认的serialVersionUID值基于类的各个方面的类,如在Java(TM)中描述的对象序列化规范。然而,强烈建议所有可序列化类中明确声明的serialVersionUID值,因为默认的serialVersionUID的计算是类细节取决于编译器实现,可能会发生变化高度敏感,并因此可能导致反序列化过程中意外InvalidClassExceptions。因此,为了保证不同java编译器实现了一致的serialVersionUID值,序列化类必须声明一个明确的serialVersionUID值。它也强烈建议明确的serialVersionUID声明使用私有修饰符在可能的情况,因为这样的声明仅适用于立即声明类 - 的serialVersionUID字段不作为继承的成员是有用的。
2023-08-05 19:27:492

series怎么读

series的读音是:英["s__ri_z]。series的读音是:英["s__ri_z]。series的词语用法是n.(名词)series是可数名词,单复数同形。series【近义词】cycle。一、详尽释义点此查看series的详细内容n.(名词)丛书,丛刊套,组,辑连续,接连串联系列连续比赛【数】级数【电】串联【音】序列【语】一组交替母音系列节目,系列比赛【生】区【植】轮adj.(形容词)串连的二、英英释义Noun:similarthingsplacedinorderorhappeningoneafteranother;"theywereinvestigatingaseriesofbankrobberies"aserializedsetofprograms;"acomedyseries""theMasterworksconcertseries"aperiodicalthatappearsatscheduledtimes(sports)severalcontestsplayedsuccessivelybythesameteams;"thevisitingteamswepttheseries"(electronics)connectionofcomponentsinsuchamannerthatcurrentflowsfirstthroughoneandthenthroughtheother;"thevoltagedividerconsistedofaseriesoffixedresistors"agroupofpostagestampshavingacommonthemeoragroupofcoinsorcurrencyselectedasagroupforstudyorcollection;"thePostOfficeissuedaseriescommemoratingfamousAmericanentertainers""hiscoincollectionincludedthecompleteseriesofIndian-headpennies"(mathematics)thesumofafiniteorinfinitesequenceofexpressions三、网络解释1.串联:此外,电子元件的特性除了电阻(R)及电抗(X)外,还有品质因子(Quality)及损串联(Series)及并联(Parallel)显示.在串联模式时,阻抗可以简单的加法求出等效造成量测的误差.改善之道是将一片守护板(GuardPlate)置於量测夹具的正和负端守护板(GuardPlate)可降低杂散电融效应表示,2.级数:对传统的、视觉上确定的几何学的这种摧毁,最明晰的例证,在我看来,莫过于把角函数--在印度数学中,它便是数字(我们的心智几乎无法理解印度人的这个词的含义)--转化成周期函数,由此而进入无穷的数字王国,在那里,角函数变成了级数(series),不再留有欧几里得3.系:群(group),组(section),系(series):这些类群名称用在不同场合,常常有非常不同的含义,可以是种水平系睦嗳,也可以代表属以系燃兜姆掷嗟ピ的集合.四、例句Thelectureseriesfallsnaturallyintothreeparts.该系列讲座可自然分作三部分。Thetheoryisbasedonaseriesofwrongassumptions.这一理论是以一系列错误的设想为依据的。HepublishedanewseriesofreadersforstudentsofEnglish.他出版了一套新的英语学习丛书。Afteraseriesofunsuccessfulattempts,hehasfinallypassedthedrivingtest.经过连续几次的失败,他最后终于通过了驾驶考试。五、常用短语用作名词(n.)aseriesof一系列agroupofthingsofthesamekindorrelatedinsomeway,comingoneafteranotherorinorder六、经典引文Arowofsmallred-brickhouses,showingaseriesofhomely,domestic-lookingbacks.出自:H.James七、词源解说☆1611年进入英语,直接源自拉丁语的series,意为行,列。series的相关近义词cycle、chain、sequence、stringseries的相关临近词serif、serial、Seriese、seriesNo、seriesfit、seriescopy、seriesoil、seriesarm、SeriesHEV、seriesgap、seriesmap、seriesloss点此查看更多关于series的详细信息
2023-08-05 19:27:571

求《全职猎人》的剧情简介,英文版,要翻译

  Jack-Jack was brought about the hero HUNTERxHUNTER Island, grew up in the whale, and Mitt aunt and grandmother had each other. Cheerful personality, he has to communicate with animals, spirituality. Because there was no father and mother, Aunt Jill Demeter as their mother loved. Until the 9-year-old year, Jill in the forest by a young man rescue. Jack-Jack from his mouth that his father was still alive and job hunters. After Aunt in convincing Mitt, Jill alone set foot on the parent seeking journey. Yet the world so much, in the vast sea of easy to find the father? As a result, Jill decided to become hunters, from here to search for traces of his father. By such a belief adventurous journey began, and make friends on the road were continually grown, and thus leads to the back of all the stories, leads to the wonderful world .... Animation Hunter X Hunter a total of 92 collections, comic books are still serialized in the.  Hunter X Hunter chapter in the story plot was divided into the following:  A hunter test articles  2 beat the enemy off the family chapter  Sky Arena 3 articles  Whale Island chapter 4  5 Mirage brigade articles  6 Greed Island chapter  7 NGL ant articles (continued serial in the beginning by the end of 2009)  HUNTERxHUNTER讲述主人公小杰自小在鲸鱼岛长大,与米特阿姨和阿婆相依为命。性格开朗的他,有着能与动物沟通的灵性。因为无父无母,小杰将米特阿姨当作自己的生母爱着。直到9岁那一年,小杰在森林里被一个青年男子搭救。从他口中小杰得知自己的父亲还活着且职业是猎人。在说服米特阿姨之后,小杰独自踏上了寻父的征程。然而世界那么大,在茫茫人海中找到父亲谈何容易?于是,小杰决定成为猎人,从这里开始找寻他父亲的踪迹。靠这样一种信念开始了冒险旅途,并在旅途当中结交好友,不断成长,从而引出了后面的所有故事,引出全职猎人的精彩世界....动画共92集,漫画还在连载中。  全职猎人故事剧情一共分以下篇章:  1 猎人试验篇  2 揍敌客家族篇  3 天空竞技场篇  4 鲸鱼岛篇  5 幻影旅团篇  6 贪婪之岛篇  7 NGL蚂蚁篇(零九年底 开始继续连载中)  分集简介字数太多,不让上传叻。。。  你把邮箱给我,我发你
2023-08-05 19:28:302

求《荒凉山庄》的英文读书报告

问题是荒凉山庄,答案是双城记。。。o(╯□╰)o
2023-08-05 19:28:382

30G的redis如何优化

突然发现我们的redis 已经用了30G了,好吧这是个很尴尬的数字因为我们的缓存机器的内存目前是32G的,内存已经告竭。幸好上上周公司采购了90G的机器,现在已经零时迁移到其中的一台机器上了。(跑题下,90G的内存太爽了是我除了koding.com 之外第二次用到90G的 突然发现我们的redis 已经用了30G了,好吧这是个很尴尬的数字因为我们的缓存机器的内存目前是32G的,内存已经告竭。幸好上上周公司采购了90G的机器,现在已经零时迁移到其中的一台机器上了。(跑题下,90G的内存太爽了是我除了koding.com 之外第二次用到90G的机器,koding 是个好网站,在线编程IDE。) 但是随着数据量越来越大单机始终无法承受的,改造势在必行。经过初步思考我们得出了很简单的方案 概括起来就是 "内外兼修"1.内功修炼先从我们的应用层说起 看看redis 使用情况 ,有没有办法回收一些key ,先进入redis 服务器执行 info ,有删减 1: redis 127.0.0.1:6391> info 2: used_memory_human:35.58G 3: keyspace_hits:2580207188 4: db0:keys=2706740,expires=1440700目前我们只使用了1个DB 但是key 太多了 有270W个key,已经过期的有144W。第一个想到的就是我勒个去,怎么会有这么多key ,第二个想法就是可能存在过大的key看看能不能针对过大的key 做优化?可是遗憾的是官方并没有命令显示db 的key 大小,我们只能自己想办法了Google 一番,发现国外友人已经写好了shell传送门: https://gist.github.com/epicserve/5699837可以列出每个key 大小了。可是这并不适用我们,因为我们key 太大了 执行了9个小时都没跑完,无力吐槽了。 其实还有一个选择就是用另外一个工具传送门:https://github.com/sripathikrishnan/redis-rdb-tools可惜这个太重了 ,不想麻烦ops ,我们就只能撩起袖子,造轮子。把shell 代码简单看了下发件DEBUG OBJECT 是个好东西啊 ,google 下发现官网 已经有简单的调试信息了,剩下的就好处理了 1: #coding=utf-8 2: import redis 3: 4: COLOR_RED = "33[31;49;1m %s 33[31;49;0m" 5: 6: COLOR_GREED = "33[32;49;1m %s 33[39;49;0m" 7: 8: COLOR_YELLOW = "33[33;49;1m %s 33[33;49;0m" 9: 10: COLOR_BLUE = "33[34;49;1m %s 33[34;49;0m" 11: 12: COLOR_PINK = "33[35;49;1m %s 33[35;49;0m" 13: 14: COLOR_GREENBLUE = "33[36;49;1m %s 33[36;49;0m" 15: 16: 17: def getHumanSize(value): 18:gb = 1024 * 1024 * 1024.0 19:mb = 1024 * 1024.0 20:kb = 1024.0>= gb: 22:return COLOR_RED % (str(round(value / gb, 2)) + " gb") 23:elif value >= mb: 24:return COLOR_YELLOW % (str(round(value / mb, 2)) + " mb") 25:elif value >= kb: 26:return COLOR_BLUE % (str(round(value / kb, 2)) + " kb") 27:else: 28:return COLOR_GREED % (str(value) + "b") 29: 30: 31: month = 3600 * 24 * 30 32: result = [] 33: client = redis.Redis(host="XXXXX", port=XXXX) 36: client.info() 37: 38: count = 0 39: for key in client.keys("*"): 40:try: 41:count += 1 42:idleTime = client.object("idletime", key) 43:refcount = client.object("refcount", key) 44:length = client.debug_object(key)["serializedlength"] 45:value = idleTime * refcount 46:print "%s key :%s , idletime : %s,refcount :%s, length : %s , humSize :%s" % (count, key, idleTime, refcount, length, getHumanSize(length)) 47:except Exception: 48:pass写了个简单的python 脚本输出每个key 的大小和idle time,和refer count 。有了这么多数据结合awk 就可以很好的统计每个key 的使用情况。有一点要注意的是这个size 是key 在redis 中的大小,并非实际的大小,这个是经过redis 压缩的。经过分析之后发现不存在过大的key ,但是存在有些key 半年都没有被访问过 Orz 。接下来就很好处理了,我们为每个key 设置的过期时间,若key 被hit 上则更新这个expire time 。这样可以逐步淘汰冷数据,达到冷热分离2. 外功修炼我们对内清理了无效的key,对外我们要做到水平扩展,单机的承载始终有限,于是我们开始了传说中的分布式改造分布式这东西看起来很唬人做起来更唬人,幸好我们是缓存服务 CAP约束有限。 缓存服务做分布式最好的当然是一致性hash 咯。其实当我们改造完成之后,才发现官方已经准备做这个分布式的缓存体系了(流口水啊) 只是现在还在开发中 给了个备用的响当当的 Twemproxy 奈何我们已经做好了,就先用着,坐等官方测试之后再说传送门: 我们实现了数据的平滑迁移,而且对server 的修改实现了最小影响。 因为原来是用的是phpredis 所以就扩展了下,代码可以平滑过渡。我们自己的实现:https://github.com/trigged/redis_con_hash其实扯了这么多就是要把redis 的数据分散开,单机的承载始终是个瓶颈,但是redis 在这方面没有Memcached 完善,不过以后会越来越好,
2023-08-05 19:28:461

gson 如何设置不区分大小写

可这样设置对应多个别名@SerializedName(value = "emailAddress", alternate = {"email", "email_address"})public String emailAddress;
2023-08-05 19:29:082

Unity5.6发布后场景中一片粉色(缺少颜色材质),同时unity界面下方console报错

你的手机没有它的材质吧。unity如果物体的材质缺失,使用这个材质的物体就会变成粉红色。确保你的材质在Asset文件夹里。如果在的话可能是unity发布错了。再发一次试试。
2023-08-05 19:29:161

什么是NoSQL_MySQL

NoSQL NoSQL,指的是非关系型的数据库。随着互联网web2.0网站的兴起,传统的关系数据库在应付web2.0网站,特别是超大规模和高并发的SNS类型的web2.0纯动态网站已经显得力不从心,暴露了很多难以克服的问题,而非关系型的数据库则由于其本身的特点得到了非常迅速的发展。 简介 NoSQL(NoSQL = Not Only SQL ),意即反SQL运动,是一项全新的数据库革命性运动,早期就有人提出,发展至2009年趋势越发高涨。NoSQL的拥护者们提倡运用非关系型的数据存储,相对于目前铺天盖地的关系型数据库运用,这一概念无疑是一种全新的思维的注入。 现今状况 现今的计算机体系结构在数据存储方面要求具备庞大的水平扩展性①,而NoSQL致力于改变这一现状。目前Google的 BigTable 和Amazon 的Dynamo使用的就是NoSQL型数据库。 NoSQL项目的名字上看不出什么相同之处,但是,它们通常在某些方面相同:它们可以处理超大量的数据。 这场革命目前仍然需要等待。的确,NoSQL对大型企业来说还不是主流,但是,一两年之后很可能就会变个样子。在NoSQL运动的最新一次聚会中,来自世界各地的150人挤满了CBS Interactive的一间会议室。分享他们如何推翻缓慢而昂贵的关系数据库的暴政,怎样使用更有效和更便宜的方法来管理数据。 “关系型数据库给你强加了太多东西。它们要你强行修改对象数据,以满足RDBMS (relational database management system,关系型数据库管理系统)的需要,”在NoSQL拥护者们看来,基于NoSQL的替代方案“只是给你所需要的”。 ①水平扩展性(horizontal scalability)指能够连接多个软硬件的特性,这样可以将多个服务器从逻辑上看成一个实体。 我们为什么要使用NOSQL非关系数据库? 随着互联网web2.0网站的兴起,非关系型的数据库现在成了一个极其热门的新领域,非关系数据库产品的发展非常迅速。而传统的关系数据库在应付web2.0网站,特别是超大规模和高并发的SNS类型的web2.0纯动态网站已经显得力不从心,暴露了很多难以克服的问题,例如: 1、High performance - 对数据库高并发读写的需求 web2.0网站要根据用户个性化信息来实时生成动态页面和提供动态信息,所以基本上无法使用动态页面静态化技术,因此数据库并发负载非常高,往往要达到每秒上万次读写请求。关系数据库应付上万次SQL查询还勉强顶得住,但是应付上万次SQL写数据请求,硬盘IO就已经无法承受了。其实对于普通的BBS网站,往往也存在对高并发写请求的需求。 2、Huge Storage - 对海量数据的高效率存储和访问的需求 对于大型的SNS网站,每天用户产生海量的用户动态,以国外的Friendfeed为例,一个月就达到了2.5亿条用户动态,对于关系数据库来说,在一张2.5亿条记录的表里面进行SQL查询,效率是极其低下乃至不可忍受的。再例如大型web网站的用户登录系统,例如腾讯,盛大,动辄数以亿计的帐号,关系数据库也很难应付。 3、High Scalability && High Availability- 对数据库的高可扩展性和高可用性的需求 在基于web的架构当中,数据库是最难进行横向扩展的,当一个应用系统的用户量和访问量与日俱增的时候,你的数据库却没有办法像web server和app server那样简单的通过添加更多的硬件和服务节点来扩展性能和负载能力。对于很多需要提供24小时不间断服务的网站来说,对数据库系统进行升级和扩展是非常痛苦的事情,往往需要停机维护和数据迁移,为什么数据库不能通过不断的添加服务器节点来实现扩展呢? 在上面提到的“三高”需求面前,关系数据库遇到了难以克服的障碍,而对于web2.0网站来说,关系数据库的很多主要特性却往往无用武之地,例如: 1、数据库事务一致性需求 很多web实时系统并不要求严格的数据库事务,对读一致性的要求很低,有些场合对写一致性要求也不高。因此数据库事务管理成了数据库高负载下一个沉重的负担。 2、数据库的写实时性和读实时性需求 对关系数据库来说,插入一条数据之后立刻查询,是肯定可以读出来这条数据的,但是对于很多web应用来说,并不要求这么高的实时性。 3、对复杂的SQL查询,特别是多表关联查询的需求 任何大数据量的web系统,都非常忌讳多个大表的关联查询,以及复杂的数据分析类型的复杂SQL报表查询,特别是SNS类型的网站,从需求以及产品设计角度,就避免了这种情况的产生。往往更多的只是单表的主键查询,以及单表的简单条件分页查询,SQL的功能被极大的弱化了。 因此,关系数据库在这些越来越多的应用场景下显得不那么合适了,为了解决这类问题的非关系数据库应运而生。 NoSQL 是非关系型数据存储的广义定义。它打破了长久以来关系型数据库与ACID理论大一统的局面。NoSQL 数据存储不需要固定的表结构,通常也不存在连接操作。在大数据存取上具备关系型数据库无法比拟的性能优势。该术语在 2009 年初得到了广泛认同。 当今的应用体系结构需要数据存储在横向伸缩性上能够满足需求。而 NoSQL 存储就是为了实现这个需求。Google 的BigTable与Amazon的Dynamo是非常成功的商业 NoSQL 实现。一些开源的 NoSQL 体系,如Facebook 的Cassandra, Apache 的HBase,也得到了广泛认同。从这些NoSQL项目的名字上看不出什么相同之处:Hadoop、Voldemort、Dynomite,还有其它很多。 NoSQL与关系型数据库设计理念比较 关系型数据库中的表都是存储一些格式化的数据结构,每个元组字段的组成都一样,即使不是每个元组都需要所有的字段,但数据库会为每个元组分配所有的字段,这样的结构可以便于表与表之间进行连接等操作,但从另一个角度来说它也是关系型数据库性能瓶颈的一个因素。而非关系型数据库以键值对存储,它的结构不固定,每一个元组可以有不一样的字段,每个元组可以根据需要增加一些自己的键值对,这样就不会局限于固定的结构,可以减少一些时间和空间的开销。 特点 它们可以处理超大量的数据。 它们运行在便宜的PC服务器集群上。 PC集群扩充起来非常方便并且成本很低,避免了“sharding”操作的复杂性和成本。 它们击碎了性能瓶颈。 NoSQL的支持者称,通过NoSQL架构可以省去将Web或Java应用和数据转换成SQL友好格式的时间,执行速度变得更快。 “SQL并非适用于所有的程序代码,” 对于那些繁重的重复操作的数据,SQL值得花钱。但是当数据库结构非常简单时,SQL可能没有太大用处。 没有过多的操作。 虽然NoSQL的支持者也承认关系数据库提供了无可比拟的功能集合,而且在数据完整性上也发挥绝对稳定,他们同时也表示,企业的具体需求可能没有那么多。 Bootstrap支持 因为NoSQL项目都是开源的,因此它们缺乏供应商提供的正式支持。这一点它们与大多数开源项目一样,不得不从社区中寻求支持。 缺点 但是一些人承认,没有正式的官方支持,万一出了差错会是可怕的,至少很多管理人员是这样看。 “我们确实需要做一些说服工作,但基本在他们看到我们的第一个原型运行良好之后,我们就能够说服他们,这是条正确的道路。” 此外,nosql并未形成一定标准,各种产品层出不穷,内部混乱,各种项目还需时间来检验。 NoSQL数据库开源软件 Membase Membase 是 NoSQL 家族的一个新的重量级的成员。Membase是开源项目,源代码采用了Apache2.0的使用许可。该项目托管在GitHub.Source tarballs上,目前可以 下载beta版本的Linux二进制包。该产品主要是由North Scale的memcached核心团队成员开发完成,其中还包括Zynga和NHN这两个主要贡献者的工程师,这两个组织都是很大的在线游戏和社区网络空间的供应商。 Membase容易安装、操作,可以从单节点方便的扩展到集群,而且为memcached(有线协议的兼容性)实现了即插即用功能,在应用方面为开 发者和经营者提供了一个比较低的门槛。做为缓存解决方案,Memcached已经在不同类型的领域(特别是大容量的Web应用)有了广泛的使用,其中 Memcached的部分基础代码被直接应用到了Membase服务器的前端。 通过兼容多种编程语言和框架,Membase具备了很好的复用性。在安装和配置方面,Membase提供了有效的图形化界面和编程接口,包括可配置 的告警信息。 Membase的目标是提供对外的线性扩展能力,包括为了增加集群容量,可以针对统一的节点进行复制。 另外,对存储的数据进行再分配仍然是必要的。 这方面的一个有趣的特性是NoSQL解决方案所承诺的可预测的性能,类准确性的延迟和吞吐量。通过如下方式可以获得上面提到的特性: ◆ 自动将在线数据迁移到低延迟的存储介质的技术(内存,固态硬盘,磁盘) ◆ 可选的写操作一一异步,同步(基于复制,持久化) ◆ 反向通道再平衡[未来考虑支持] ◆ 多线程低锁争用 ◆ 尽可能使用异步处理 ◆ 自动实现重复数据删除 ◆ 动态再平衡现有集群 ◆ 通过把数据复制到多个集群单元和支持快速失败转移来提供系统的高可用性。 MongoDB MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。他支持的数据结构非常松散,是类似json的bjson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。它的特点是高性能、易部署、易使用,存储数据非常方便。 主要功能特性: ◆ 面向集合存储,易存储对象类型的数据 “面向集合”(Collenction-Orented),意思是数据被分组存储在数据集中,被称为一个集合(Collenction)。每个 集合在数据库中都有一个唯一的标识名,并且可以包含无限数目的文档。集合的概念类似关系型数据库(RDBMS)里的表(table),不同的是它不需要定 义任何模式(schema)。 ◆ 模式自由 模式自由(schema-free),意味着对于存储在mongodb数据库中的文件,我们不需要知道它的任何结构定义。如果需要的话,你完全可以把不同结构的文件存储在同一个数据库里。 ◆支持动态查询 ◆支持完全索引,包含内部对象 ◆支持查询 ◆支持复制和故障恢复 ◆使用高效的二进制数据存储,包括大型对象(如视频等) ◆自动处理碎片,以支持云计算层次的扩展性 ◆支持RUBY,PYTHON,JAVA,C++,PHP等多种语言 ◆文件存储格式为BSON(一种JSON的扩展) BSON(Binary Serialized document Format)存储形式是指:存储在集合中的文档,被存储为键-值对的形式。键用于唯一标识一个文档,为字符串类型,而值则可以是各中复杂的文件类型。 ◆可通过网络访问 MongoDB服务端可运行在Linux、Windows或OS X平台,支持32位和64位应用,默认端口为27017。推荐运行在64位平台,因为MongoDB在32位模式运行时支持的最大文件尺寸为2GB。 MongoDB把数据存储在文件中(默认路径为:/data/db),为提高效率使用内存映射文件进行管理。 Hypertable Hypertable是一个开源、高性能、可伸缩的数据库,它采用与Google的Bigtable相似的模型。在过去数年中,Google为在PC集群 上运行的可伸缩计算基础设施设计建造了三个关键部分。第一个关键的基础设施是Google File System(GFS),这是一个高可用的文件系统,提供了一个全局的命名空间。它通过跨机器(和跨机架)的文件数据复制来达到高可用性,并因此免受传统 文件存储系统无法避免的许多失败的影响,比如电源、内存和网络端口等失败。第二个基础设施是名为Map-Reduce的计算框架,它与GFS紧密协作,帮 助处理收集到的海量数据。第三个基础设施是Bigtable,它是传统数据库的替代。Bigtable让你可以通过一些主键来组织海量数据,并实现高效的 查询。Hypertable是Bigtable的一个开源实现,并且根据我们的想法进行了一些改进。 Apache Cassandra Apache Cassandra是一套开源分布式Key-Value存储系统。它最初由Facebook开发,用于储存特别大的数据。Facebook目前在使用此系统。 主要特性: ◆ 分布式 ◆ 基于column的结构化 ◆ 高伸展性 Cassandra的主要特点就是它不是一个数据库,而是由一堆数据库节点共同构成的一个分布式网络服务,对Cassandra 的一个写操作,会被复制到其他节点上去,对Cassandra的读操作,也会被路由到某个节点上面去读取。对于一个Cassandra群集来说,扩展性能 是比较简单的事情,只管在群集里面添加节点就可以了。 Cassandra是一个混合型的非关系的数据库,类似于Google的BigTable。其主要功能比 Dynomite(分布式的Key-Value存 储系统)更丰富,但支持度却不如文档存储MongoDB(介于关系数据库和非关系数据库之间的开源产品,是非关系数据库当中功能最丰富,最像关系数据库 的。支持的数据结构非常松散,是类似json的bjson格式,因此可以存储比较复杂的数据类型。)Cassandra最初由Facebook开发,后转变成了开源项目。它是一个网络社交云计算方面理想的数据库。以Amazon专有的完全分布式的Dynamo为基础,结合了Google BigTable基于列族(Column Family)的数据模型。P2P去中心化的存储。很多方面都可以称之为Dynamo 2.0。 和其他数据库比较,其突出特点是: ◆ 模式灵活 :使用Cassandra,像文档存储,你不必提前解决记录中的字段。你可以在系统运行时随意的添加或移除字段。这是一个惊人的效率提升,特别是在大型部 署上。 ◆ 真正的可扩展性 :Cassandra是纯粹意义上的水平扩展。为给集群添加更多容量,可以指向另一台电脑。你不必重启任何进程,改变应用查询,或手动迁移任何数据。 ◆ 多数据中心识别 :你可以调整你的节点布局来避免某一个数据中心起火,一个备用的数据中心将至少有每条记录的完全复制。 ◆ 范围查询 :如果你不喜欢全部的键值查询,则可以设置键的范围来查询。 ◆ 列表数据结构 :在混合模式可以将超级列添加到5维。对于每个用户的索引,这是非常方便的。 ◆ 分布式写操作 :有可以在任何地方任何时间集中读或写任何数据。并且不会有任何单点失败。
2023-08-05 19:29:321

某科学的超电磁炮英语介绍(要有故事情节)

每集都要的话用百度翻译不就好了- -
2023-08-05 19:29:542

redis 时间复杂度是什么意思

首先指出 时间复杂度的表示是大写的 欧 而不是 零 , 也就是说是O 不是0;其次理解的话,可以简单从字面层次理解为 运算该redis函数所需要的时间来表示该函数的复杂程度 。 具体理解的话 你可以看 RESTORE 函数 RESTORE key ttl serialized-value!
2023-08-05 19:30:031

如何获取HttpServletResponse里面的内容

如何获取HttpServletResponse里面的内容背景:在SPRING 框架之中, 有一个服务端需要提供多种形态的服务,这里的多种形态只是返回值得展示形式(其实 数据内在逻辑完全一样), 比如:形式1: JSONP({“key1”: value1, "key2":value2, "key3":value3, ....})形式2: {“key1”: value1, "key2":value2, "key3":value3, ....}为了使得后台业务处理代码一样(不做任何区分),现在理由过滤器,对返回接口进行处理,根据需要加上 :JSONP(...) 主要实现步骤如下:1. 在web.xml 中配置过滤器<filter><filter-name>RewriteResponse</filter-name><filter-class>com.robin.filter.RewriteResponse</filter-class></filter><filter-mapping><filter-name>RewriteResponse</filter-name><servlet-name>/*</servlet-name></filter-mapping>// 斜杠星代表匹配任何请求2. 重点在于RewriteResponse 过滤器public class RewriteResponseFilter extends Filter {public String description() {// TODO Auto-generated method stubreturn null;}public void doFilter(ServletRequest request, ServletResponse response,FilterChain chain) throws IOException {// TODO Auto-generated method stubResponseWrapper responseWrapper = new ResponseWrapper((HttpServletResponse) response);try {chain.doFilter(request, responseWrapper);} catch (ServletException e) {// TODO Auto-generated catch blocke.printStackTrace();}String responseContent = new String(responseWrapper.getDataStream());RestResponse fullResponse = new RestResponse(205, "OK-MESSAGE",responseContent);byte[] responseToSend = restResponseBytes(fullResponse);response.getOutputStream().write(responseToSend);}private byte[] restResponseBytes(RestResponse response) throws IOException {String serialized = new ObjectMapper().writeValueAsString(response);return serialized.getBytes("UTF-8");}}3. 通用业务类(用于返回)public class RestResponse implements Serializable {private int status;private String message;private Object data;public RestResponse(int status, String message, Object data) {this.status = status;this.message = message;this.data = data;}public int getStatus() {return status;}public void setStatus(int status) {this.status = status;}public String getMessage() {return message;}public void setMessage(String message) {this.message = message;}public Object getData() {return data;}public void setData(Object data) {this.data = data;}}4. 实现ServletOutputStream 指定的扩展public class FilterServletOutputStream extends ServletOutputStream {DataOutputStream output;public FilterServletOutputStream(OutputStream output) {this.output = new DataOutputStream(output);}@Overridepublic void write(int arg0) throws IOException {output.write(arg0);}@Overridepublic void write(byte[] arg0, int arg1, int arg2) throws IOException {output.write(arg0, arg1, arg2);}@Overridepublic void write(byte[] arg0) throws IOException {output.write(arg0);}}5. 替换原来的输出public class ResponseWrapper extends HttpServletResponseWrapper {ByteArrayOutputStream output;FilterServletOutputStream filterOutput;HttpResponseStatus status = HttpResponseStatus.OK;public ResponseWrapper(HttpServletResponse response) {super(response);output = new ByteArrayOutputStream();}@Overridepublic ServletOutputStream getOutputStream() throws IOException {if (filterOutput == null) {filterOutput = new FilterServletOutputStream(output);}return filterOutput;}public byte[] getDataStream() {return output.toByteArray();}}
2023-08-05 19:30:121

如果json对象中的key是中文,该如何解析

用Gson 这个类库,将json转成对象在你的实体类中,对应的字段里使用注解的方法,给key取别名用法: @SerializedName("申请人");private String name;
2023-08-05 19:30:211

redis分好库之后怎么才能看每个库的大小

redis 貌似没有提供一个可靠的方法获得每个 db 的实际占用,这主要是因为 redis 本身就没有 db 文件概念,所有 db 都是混在一个 rdb 文件里面的。 要想估算 db 的大小,需要通过 keys * 遍历 db 里所有的 key,然后用 debug object <key> 来获得 key 的内存占用,serializedlength 就是占用内存的字段长度。 根据 RDB 格式文档,可以估算出每个 key 的实际占用为: key_size = strlen(key) + serializedlength + 7 不过这个估算极不靠谱,因为 redis 可能将 key 做压缩,此时估算出来的值可能偏大。 下面的命令可以查看 db0 的大小(key 个数),其他的以此类推。 select 0 dbsize 或者使用 info keyspace 同时得到所有 db 信息。
2023-08-05 19:30:301

一进STEAM就弹出错误框,求解!!!!!!!!!!!

把steamapp文件夹剪切到外面(千万要弄出来),然后重新安装steam,再把steamapp覆盖到安装好的steam文件夹下。
2023-08-05 19:30:491

求Edgar Allan Poe 及其作品的资料

主要作品 [诗歌类] 诗 Poetry 哦,时代!哦,风尚! O, Tempora! O, Mores! 致玛格丽特 To Margaret “致奥克塔维娅” To Octavia 帖木儿 Tamerlane 歌 Song 梦 Dreams 亡灵 Spirits of the Dead 模仿 Imitation “诗节”Stanzas" 一个梦 A Dream “最快乐的日子” The Happiest Day 湖——致—— The Lake — To —— 十四行诗——致科学 To Science 阿尔阿拉夫 Al Aaraaf 传奇 Romance 致河—— To The River —— 仙境 Fairy-Land “孤独” "Alone" “致艾萨克·利” To Isaac Lea 伊丽莎白 Elizabeth 一首离合诗 An Acrostic “咏乔·洛克” Lines on Joe Locke 致海伦 To Helen 以色拉费 Israfel 睡美人 The Sleeper 不安的山谷 The Valley of Unrest 海中之城 The City in the Sea 丽诺尔 Lenore 致乐园中的一位 To One in Paradise 赞歌 Latin Hymn//Hymn 谜 Enigma 小夜曲 Serenade 罗马大圆形竞技场 The Coliseum 新婚小调 Bridal Ballad 十四行诗——致桑特岛 闹鬼的宫殿 The Haunted Palace 十四行诗——静 Silence, a Sonnet 征服者爬虫 The Conqueror Worm 梦境 Dream-Land 尤拉丽——歌 Eulalie 乌鸦 The Raven 赠——的情人节礼物 A Valentine “深眠黄土” Deep in Earth 致路易丝·奥利维亚·亨特小姐 To Miss Louise Olivia Hunter 致M.L.S—— To M. L. S 尤娜路姆——一首歌谣 Ulalume — A Ballad 一个谜 An Enigma 钟 The Bells 致海伦 To Helen 梦中之梦 A Dream Within A Dream 献给安妮 For Annie 黄金国 Eldorado 致我的母亲 To My Mother 安娜贝尔·李 Annabel Lee [戏剧类] 《波利希安》选场(一至五场未完) Scenes From "Politian" [小说类] 梅岑格施泰因 Metzengerstein 德洛梅勒特公爵 The Duc De L"Omelette 耶路撒冷的故事 A Tale of Jerusalem 失去呼吸 Loss of Breath 甭甭 Bon-Bon 四不象 Four Beasts in One - The Homo-Cameleopard 瓶中手稿 MS. Found in a Bottle 幽会 The Assignation 捧为名流 Lionizing 死荫——寓言一则 Shadow - A Parable 静——寓言一则 Silence - A Fable 贝蕾妮丝 Berenice 莫雷娜 Morella 瘟疫王 King Pest 故弄玄虚 Mystification 丽姬娅 Ligeia 如何写布莱克伍德式文章 How to Write a Blackwood Article 绝境 A Predicament 钟楼魔影 The Devil in the Belfry 被用光的人 The Man That Was Used Up 厄舍府的倒塌 The Fall of the House of Usher 威廉·威尔逊 William Wilson 埃洛斯与沙米翁的对话 The Conversation of Eiros and Charmion 为什么那小个子法国佬的手悬在吊腕带里 Why the Little Frenchman Wears His Hand in a Sling 生意人 The Business Man 人群中的人 The Man of the Crowd 莫格街谋杀案 The Murders in the Rue Morgue 莫斯肯漩涡沉浮记 A Descent into the Maelstr02m 莫诺斯与尤拉的对话 The Colloquy of Monos and Una 千万别和魔鬼赌你的脑袋 Never Bet the Devil Your Head 埃莱奥诺拉 Eleonora 一星期中的三个星期天 Three Sundays in a Week 椭圆形画像 The Oval Portrait 红死病的假面具 The Masque of the Red Death 陷坑与钟摆 The Pit and the Pendulum 玛丽·罗热疑案 The Mystery of Marie Roget 泄密的心 The Tell-Tale Heart 金甲虫 The Gold-Bug 黑猫 The Black Cat 欺骗是一门精密的科学 Diddling 眼镜 The Spectacles 长方形箱子 The Oblong Box 凹凸山的故事 A Tale of the Ragged Mountains 过早埋葬 The Premature Burial 被窃之信 The Purloined Letter 塔尔博士和费瑟尔教授的疗法 The System of Doctor Tarr and Professor Fether 催眠启示录 Mesmeric Revelation “你就是那人” "Thou Art the Man" 气球骗局 The Balloon-Hoax 奇怪天使 The Angel of the Odd 森格姆·鲍勃先生的文学生涯 The Literary Life of Thingum Bob, Esq. 山鲁佐德的第一千零二个故事 The Thousand-and-Second Tale of Scheherazade 与一具木乃伊的谈话 Some Words with a Mummy 言语的力量 The Power of Words 反常之魔 The Imp of the Perverse 瓦尔德马先生病例之真相 The Facts in the Case of M. Valdemar 斯芬克斯 The Sphinx 一桶蒙特亚白葡萄酒 The Cask of Amontillado 阿恩海姆乐园 The Domain of Arnheim 未来之事 Mellonta Tauta 兰多的小屋 Landor"s Cottage 跳蛙 Hop-Frog 冯·肯佩伦和他的发现 Von Kempelen and His Discovery 用X代替O的时候 X-ing a Paragrab 灯塔(残稿) The Light-House 汉斯·普法尔历险记(长篇)The Unparalleled Adventure of One Hans Pfaall 阿·戈·皮姆的故事(长篇) The Narrative of Arthur Gordon Pym of Nantucket 罗德曼日记(长篇未完) The Journal of Julius Rodman (unfinished serialized novel.)
2023-08-05 19:31:001

The Red Badge of Courage 内容英语简介

希望这是你要的:The Red Badge of Courage is a war novel by American author Stephen Crane (1871–1900). Taking place during the American Civil War, the story is about a young private of the Union Army, Henry Fleming, who flees from the field of battle. Overcome with shame, he longs for a wound—a "red badge of courage"—to counteract his cowardice. When his regiment once again faces the enemy, Henry acts as standard-bearer.Although Crane was born after the war, and had not at the time experienced battle firsthand, the novel is known for its realism. He began writing what would become his second novel in 1893, using various contemporary and written accounts (such as those published previously by Century Magazine) as inspiration. It is believed that he based the fictional battle on that of Chancellorsville; he may also have interviewed veterans of the 124th New York Volunteer Infantry Regiment, commonly known as the Orange Blossoms. Initially shortened and serialized in newspapers in December 1894, the novel was published in full in October 1895. A longer version of the work, based on Crane"s original manuscript, was published in 1982.The novel is known for its distinctive style, which includes realistic battle sequences as well as the repeated use of color imagery, and ironic tone. Separating itself from a traditional war narrative, Crane"s story reflects the inner experience of its protagonist—a soldier fleeing from combat—rather than the external world around him. Also notable for its use of what Crane called a "psychological portrayal of fear",[1] the novel"s allegorical and symbolic qualities are often debated by critics. Several of the themes that the story explores are maturation, heroism, cowardice, and the indifference of nature. The Red Badge of Courage garnered widespread acclaim—what Joseph Conrad called "an orgy of praise"[2]—shortly after its publication, making Crane an instant celebrity at the age of twenty-four. The novel and its author did have its initial detractors, however, including author and veteran Ambrose Bierce. Adapted several times for the screen, the novel became a bestseller. It has never been out of print, and is now thought to be Crane"s most important work and a major American text.
2023-08-05 19:32:591

逃离乌托邦歌词英语翻译

Escape from utopiaI seem to fall into the storyAll around him like a fictionEveryone in the playEven stranger is to cooperate with meI like a book inHave their own emotionsHey ~ hey ~Be invisible pen holding awayHow I live is not trueHey ~ hey ~I live in a worldWhat a fantasyWhat a boringHow ridiculousWant to fly out of this chapterBack to groundrewriteNew II hate this empty gorgeous dreamNo matter how beautiful the cover bindingDon"t want to trapped by several hundred pages of everythingEven if the seller is serialized into seriesI like a book inHave their own emotionsHey ~ hey ~Be invisible pen holding awayHow I live is not trueHey ~ hey ~I live in a worldWhat a fantasyWhat a boringHow ridiculousWant to fly out of this chapterBack to groundrewriteNew IEven if the story line uncertainI already feel exhaustion of body and mindDon"t go to deliberately understatementAs to save some suspense tomorrowI live in a worldWhat a fantasyWhat a boringHow ridiculousWant to fly out of this chapterBack to groundrewriteNew I
2023-08-05 19:33:181

关于Unity中SerializedProperty.DeleteArrayElementAtIndex的问题

unity3d中的material再更换数次shader后,property的信息会残留,这会导致material select depedency的时候,发现其引用了根本没用到的texture(原因是曾经用过的shader中的property没有被去掉),这里提供了一个MaterialCleaner,解决这个问题。
2023-08-05 19:33:341

JAVA 版本号作用,private static final long serialVersionUID = 6092916278939819373L;??

写了这个的话,反序列化的时候会快
2023-08-05 19:33:424

Q: Consider increasing spark.rpc.message.maxSize or using broadcast variables for large values.

问题: 在yarn集群上训练Word2Vec模型数据保存在hadfs上的报错: ERROR datasources.FileFormatWriter: Aborting job null.org.apache.spark.SparkException: Job aborted due to stage failure: Serialized task 5829:0 was 354127887 bytes, which exceeds max allowed: spark.rpc.message.maxSize (134217728 bytes). Consider increasing spark.rpc.message.maxSize or using broadcast variables for large values. 在小数据量上没有出错, slone模式下也没问题,参考问题: http://stackoverflow.com/questions/40842736/spark-word2vecmodel-exceeds-max-rpc-size-for-saving spark rpc传输序列化数据应该是有大小的限制,此错误消息意味着将一些较大的对象从driver端发送到executors。 尝试增大partition数目没有奏效 考虑修改spark.rpc.message.maxSize的值 spark.rpc.message.maxSize 默认值是128, 也就是131072K, 134217728 bytes 修改spark.rpc.message.maxSize 值为512, 并尽量增大partiton数
2023-08-05 19:33:501

RabbitMQ笔记十:MessageConverter详解

org.springframework.amqp.support.converter.MessageConverter Message toMessage(Object object, MessageProperties messageProperties); 将java对象和属性对象转换成Message对象。 Object fromMessage(Message message) throws MessageConversionException; 将消息对象转换成java对象。 定义Config类 MessageListenerAdapter中定义的消息转换器,消费端接收的消息就从Message类型转换成了String类型 消费者处理消息的Handler 启动类 启动应用类,发送消息到 zhihao.miao.order 队列,控制台打印: 从控制台打印我们知道了在消费者处理消息之前会进行消息类型转换,调用 TestMessageConverter 的 fromMessage 方法,然后执行消息处理器的 onMessage 方法,方法参数就是 String 类型。 自定义一个MyBody类型,将消息从Message转换成MyBody类型 然后修改 TestMessageConverter 的 fromMessage 方法,返回了 MyBody 类型,那么消息处理器的消费方法也是MyBody参数的消费方法 此时的消息处理器,处理器中的方法的入参就是MyBody类型了, 此时控制台打印: 我们还测试如下如果不使用自定义的 Converter ,那么当消息的属性中含有属性content_type的值为text,那么默认的转换成的java类型就是String类型,如果不指定那么默认的转换类型就是byte[] 我们跟进去 MessageListenerAdapte r的 setMessageConverter 方法, 我们发现默认的 MessageConverter 是 SimpleMessageConverter ,我们进入 SimpleMessageConverter 类中看其默认的转换逻辑 源码分析总结: 1. MessageConverter 可以把 java 对象转换成 Message 对象,也可以把 Message 对象转换成 java 对象 2. MessageListenerAdapter 内部通过 MessageConverter 把 Message 转换成java对象,然后找到相应的处理方法,参数为转换成的java对象。 3. SimpleMessageConverter 处理逻辑: 如果 content_type 是以text开头,则把消息转换成 String 类型 如果 content_type的 值是 application/x-java-serialized-object 则把消息序列化为java对象,否则,把消息转换成字节数组。
2023-08-05 19:33:581

c# 读取json的问题,JObject不能强转成JArray

用dynamic将JArray ja = (JArray)JsonConvert.DeserializeObject(reader[1].ToString());换成dynamic ja = JsonConvert.DeserializeObject(reader[1].ToString());
2023-08-05 19:34:201

《双城记》英语简介

最低0.27元/天开通百度文库会员,可在文库查看完整内容>原发布者:夏志蕾In1757,youngdoctorManettewassuddenlyforcedtovisitapatientbyMarquisSt.Evremondebrotherswhenhewaswalking.IntheMarquismansion,hewitnessedthedeathsofacrazypeasantwomanandateenager.AndhewasinformedtheinsidestorythatforamomentofhappinessMarquisBrotherskilledthefamily.Herefusedthebriberyandwrotealettertothecourttoaccusethem.Unexpectedly,thedefendantgottheletterandDr.ManettewassenttotheBastille---oneofthemostterribleprisonsintheworld,bythenobleMarquisSt.Evremonde.Twoyearslater,hiswifediedofsadnessandhisdaughterLouciewasreceivedbyhisfriendinLondon.18yearslater,hewasreleasedandLuciecametopickhimuptoLondontolive.Andontheway,theyencounteredyouthCharlesDarnayandgothisattentivecare.CharlesDarnaywasthenephewoftheMarquisSt.Evremonde,whoabandonedthenobledegreetolivebyhimself.Intheprocessofgettingalong,hefellinlovewithLuciesincerely.Forhisdaughter"e69da5e6ba907a6431333433623761shappiness,Marnettedecidedtoletthepastbepastandagreetotheirmarriage.In1789,therevolutionofFrancebroke,andnoblesweresenttodeath.Inordertorescueh
2023-08-05 19:34:292

json数据解析出错应该怎么办?

密集恐惧症。。1、先检查json格式是否符合标准,各种转义的地方容易出问题。2、检查编码是否统一。3、json的包有没导错。排除了,就是函数调用的问题了- -!看样子传入的是array数据,应该用jsonArray解析。JSONArray jsonArray = new JSONArray(jsonContent.toString());然后可以逐一读取里面的数据:JSONObject itemObj = jsonArray.getJSONObject(i);
2023-08-05 19:34:477

钢之炼金术士 英文简介

Fullmetal Alchemist (钢の錬金术师, Hagane no Renkinjutsushi?) is a manga series created by Hiromu Arakawa and serialized in Monthly Shonen Gangan. It has also been adapted into an anime series and a movie, as well as several spin-off novels and videogames. The manga currently spans 12 volumes and 56 chapters, and is still running. The anime consists of 51 episodes and a full-length movie.The Japanese name "Hagane no Renkinjutsushi" is translated literally into Alchemist of Steel. Fullmetal Alchemist is commonly abbreviated "FMA" or "Hagaren".Fullmetal Alchemist is set in the early 20th century, in an alternate earth with technology dating from the era around 1900 in Europe. In this alternate world, the science of alchemy is heavily used, but alchemy in the series takes on a fantasy element. Alchemists tried to transmute gold from lesser metals, in Full Metal Alchemist, alchemy becomes the science of transmuting matter into different matter through transmutation circles; a scientific, yet seemingly an equally magical practice that is not too rare, yet with seemingly infinite uses. Talented alchemists can become the military"s State Alchemists. Against this backdrop, the series portrays the quest of the young Edward Elric, the Fullmetal Alchemist, and his brother Alphonse, for the legendary Philosopher"s Stone. Their adventures lead them to discover the truth about their past and the very world they live in.The animation studio BONES adapted the manga into a 51-episode anime series, which ran on Japanese television from October 4 2003 to October 2 2004. A one-hour OVA, Fullmetal Alchemist: Reflections Special OVA, was released in 2005. A movie, Fullmetal Alchemist: Conqueror of Shambala was made by the same studio, and theatrically released in Japan on July 23 2005.
2023-08-05 19:36:531

出差申请报告

出差申请单日期: 年 月 日 NO.: 申 请 人员 工 编 号部 门 出差事由: □公务 □培训 □休假 □其它 出差时间: 自 年 月 日 时 至 年 月 日 时 共计 日 时出差地点:申请人填 写机/车票交通费住宿费餐费其它合计 票 务确 认 会 计填 写费用归属预支差旅费公司帐号RMBUSD直属主管 会 计 财务主管 总裁室预支款签收:今收到上项预支款无误,本人承诺将于出差返回三个工作日内结清此预支款。 申请人: 日期: 本申请单一式三联:申请人、人事部、财务部各执一联------------你需要给领导知道上面表上的数据。我每次回来都得写: 出差报告时间:2月15号至2月26日地点:济南任务:济南**项目设备安装配合 “内容 ……………… ” 然后最后可以加几个附件:如 附件1:**问题 附件2:交流情况 附件3:图片内容
2023-08-05 19:29:281