try

Serializable:明明就一个空接口!为什么还要实现它?

谁都会走 提交于 2020-02-28 03:01:04
目录 01、先来点理论 02、再来点实战 03、再来点注意事项 04、再来点干货 05、再来点甜点 06、再来点总结 对于 Java 的序列化,我一直停留在最浅显的认知上——把那个要序列化的类实现 Serializbale 接口就可以了。我不愿意做更深入的研究,因为会用就行了嘛。 但随着时间的推移,见到 Serializbale 的次数越来越多,我便对它产生了浓厚的兴趣。是时候花点时间研究研究了。 01、先来点理论 Java 序列化是 JDK 1.1 时引入的一组开创性的特性,用于将 Java 对象转换为字节数组,便于存储或传输。此后,仍然可以将字节数组转换回 Java 对象原有的状态。 序列化的思想是“冻结”对象状态,然后写到磁盘或者在网络中传输;反序列化的思想是“解冻”对象状态,重新获得可用的 Java 对象。 再来看看序列化 Serializbale 接口的定义: public interface Serializable { } 明明就一个空的接口嘛,竟然能够保证实现了它的“类的对象”被序列化和反序列化? 02、再来点实战 在回答上述问题之前,我们先来创建一个类(只有两个字段,和对应的 getter/setter ),用于序列化和反序列化。 class Wanger { private String name; private int age; public String

python-异常处理

让人想犯罪 __ 提交于 2020-02-27 20:57:16
异常和错误 part1:程序中难免出现错误,而错误分成两种 1.语法错误(这种错误,根本过不了python解释器的语法检测,必须在程序执行前就改正) 2.逻辑错误(逻辑错误) #用户输入不完整(比如输入为空)或者输入非法(输入不是数字) num=input(">>: ") int(num) #无法完成计算 res1=1/0 res2=1+'str' 逻辑错误 part2:什么是异常 异常就是程序运行时发生错误的信号,在python中,错误触发的异常如下 part3:python中的异常种类 在python中不同的异常可以用不同的类型(python中统一了类与类型,类型即类)去标识,不同的类对象标识不同的异常,一个异常标识一种错误 错误举例 # 触发IndexError l=['egon','aa'] l[3] # 触发KeyError dic={'name':'egon'} dic['age'] #触发ValueError s='hello' int(s) 常用异常 AttributeError 试图访问一个对象没有的树形,比如foo.x,但是foo没有属性x IOError 输入/输出异常;基本上是无法打开文件 ImportError 无法引入模块或包;基本上是路径问题或名称错误 IndentationError 语法错误(的子类) ;代码没有正确对齐 IndexError

Java中的文件和流相关知识

主宰稳场 提交于 2020-02-27 18:57:42
1. File File类可以使用文件路径字符串来创建File实例,该文件路径可以是绝对路径或相对路径 File类的list()方法中可以接收一个FilenameFilter参数,通过该参数可以只列出符合条件的文件 public class FileNameFilterTest { public void main(String[] args) { File file = new File("."); String[] nameList = file.list(((dir, name) -> name.endsWith(".java") || new File(name).isDirectory())); for (String name : nameList) { System.out.println(name); } } } 1 2 3 4 5 6 7 8 9 10 2. 流(Stream) Stream是从起源(source)到接收(sink)的有序数据 按照流向分可以分为输入流和输出流 输入流:只能从中读取数据,不能写入数据(基类是InputStream和Reader) 输出流:只能向其中写入数据,不能读取数据(基类是OutputStream和Writer) 按照操作的数据单元分为字节流和字符流 字节流:操作的数据单元是8位的字节

异常处理

*爱你&永不变心* 提交于 2020-02-27 10:14:23
阅读目录 一 错误和异常 二 异常处理 2.1 什么是异常处理? 2.2 为何要进行异常处理? 2.3 如何进行异常处理? 三 什么时候用异常处理 回到顶部 异常和错误 part1:程序中难免出现错误,而错误分成两种 1.语法错误(这种错误,根本过不了python解释器的语法检测,必须在程序执行前就改正) #语法错误示范一 if #语法错误示范二 def test: pass #语法错误示范三 print(haha 语法错误 2.逻辑错误(逻辑错误) #用户输入不完整(比如输入为空)或者输入非法(输入不是数字) num=input(">>: ") int(num) #无法完成计算 res1=1/0 res2=1+'str' 逻辑错误 part2:什么是异常 异常就是程序运行时发生错误的信号,在python中,错误触发的异常如下 part3:python中的异常种类 在python中不同的异常可以用不同的类型(python中统一了类与类型,类型即类)去标识,不同的类对象标识不同的异常,一个异常标识一种错误 l=['egon','aa'] l[3] 触发IndexError dic={'name':'egon'} dic['age'] 触发KeyError s='hello' int(s) 触发ValueError AttributeError 试图访问一个对象没有的树形,比如foo

架构师内功心法,经典高频面试的单例模式详解

回眸只為那壹抹淺笑 提交于 2020-02-27 08:15:51
一、单例模式应用场景 单例模式(Single Pattern)是指 确保一个类在任何情况下绝对只是一个实例,并提供一个全局的访问点。 单例模式在现实生活中的应用也很广泛。例如国家总统、公司CEO、部门经理等。在java标准中,ServletContext、ServletContextConfig等;在Spring框架中ApplicationCotext;数据库对应的连接池也都是单例形势的。 二、单例模式分类 2.1 饿汉式单例 饿汉式单例是在类加载的时候就立即初始化了,并且创建了单例对象。绝对的线程安全,在线程还没出现以前就实例化了,不可能存在访问安全问题。 优点:没有加任何的锁,执行效率高,在用户体验上,比懒汉式更好。 缺点:类加载的时候就初始化了,不管用与不用都占空间,浪费了内存,有可能占着茅坑不拉屎。 Spring中的IOC容器ApplicationContext 本身就是典型的饿汉式单例。案例代码: public class HungrySingleton { /** * 先静态后动态 * 先属性后方法 * 先上后下 */ private static final HungrySingleton hungrySingleton = new HungrySingleton(); private HungrySingleton() { } public static

序列化与反序列化的单例模式实现

ε祈祈猫儿з 提交于 2020-02-27 05:40:43
静态内置类可以达到线程安全的问题,但如果遇到序列化对象时,使用默认的方式运行得到的结果还是多例的。 import java.io.Serializable; public class MyObject implements Serializable { private static final long serialVersionUID = 888L; private static class MyObjectHandler{ private static final MyObject myObject = new MyObject(); } public MyObject() { } public static MyObject getInstance(){ return MyObjectHandler.myObject; } protected Object readResolve(){ System.out.println("调用了readResolve方法!"); return MyObjectHandler.myObject; } } import java.io.*; public class SaveAndRead { public static void main(String[] args) { try { MyObject myObject = MyObject

源码分析Dubbo集群容错策略

最后都变了- 提交于 2020-02-27 04:30:48
前面的文章,已经单独对服务发现(Directory、RegistryDirectory)、路由机制(Router)、负载均衡机制( LoadBalance ),本节将重点分析集群容错机制 ( AbstractClusterInvoker), AbstractClusterInvoker 就是将上述机制融合在一起,整个集群容错中,上述组件扮演的角色见下图所示,本文将重点分析 AbstractClusterInvoker 是如何融合这些组件的。 AbstractClusterInvoker#invoke @Override public Result invoke(final Invocation invocation) throws RpcException { checkWhetherDestroyed(); LoadBalance loadbalance = null; List<invoker<t>> invokers = list(invocation); // @1 if (invokers != null && !invokers.isEmpty()) { loadbalance = ExtensionLoader.getExtensionLoader(LoadBalance.class).getExtension(invokers.get(0).getUrl()

两种JavaScript异常处理的方式

牧云@^-^@ 提交于 2020-02-27 03:03:15
一、浏览器抛出异常 1、标准格式 try{ //可能发生异常的代码 }catch(error){ //发生错误执行的代码 } 2、finally语句 try{ //可能发生异常的代码 }catch(error){ //发生错误执行的代码 }finally{ // 不管 try 中的语句有没有错误,都会执行的语句 } 即:try 中语句不发生错误执行完毕后会执行 finally 中的语句,try 中的语句发生错误,则执行 catch中的语句,catch 中的语句执行完毕后也会执行 finally 中的语句。 3、错误类型 •Error 基类型,即其他的错误类型都是从 Error 继承来的 •EvalError 使用 eval() 函数发生异常时被抛出。 •RangeError 数值超出规定范围时被抛出 •ReferenceError 找不到对象时,会抛出 •SyntaxError 语法错误时 •TypeError 变量中保存着意外的类型,或者访问不存在的方式时 •URIError 使用 encodeURI() 或者 decodeURI() 时,URI 的格式不正确 二、throw主动抛出异常 1、JS内置错误类型对象 throw new Error("主动抛出的错误,后面代码不执行"); 2、自定义错误类型对象 继承任何一个自定义错误类型都可以。一般直接继承Error即可 来源:

聊聊SkyWalkingAgent

独自空忆成欢 提交于 2020-02-27 01:13:46
序 本文主要研究一下SkyWalkingAgent SkyWalkingAgent skywalking-6.6.0/apm-sniffer/apm-agent/src/main/java/org/apache/skywalking/apm/agent/SkyWalkingAgent.java public class SkyWalkingAgent { private static final ILog logger = LogManager.getLogger(SkyWalkingAgent.class); /** * Main entrance. Use byte-buddy transform to enhance all classes, which define in plugins. * * @param agentArgs * @param instrumentation * @throws PluginException */ public static void premain(String agentArgs, Instrumentation instrumentation) throws PluginException, IOException { final PluginFinder pluginFinder; try {

获取本机IP地址

孤者浪人 提交于 2020-02-26 23:43:31
using System.Net; using System.Net.Sockets; /// <summary> /// 获取本机IP地址 /// </summary> /// <returns>本机IP地址</returns> public static string GetLocalIP() { try { string HostName = Dns.GetHostName(); //得到主机名 IPHostEntry IpEntry = Dns.GetHostEntry(HostName); for (int i = 0; i < IpEntry.AddressList.Length; i++) { //从IP地址列表中筛选出IPv4类型的IP地址 //AddressFamily.InterNetwork表示此IP为IPv4, //AddressFamily.InterNetworkV6表示此地址为IPv6类型 if (IpEntry.AddressList[i].AddressFamily == AddressFamily.InterNetwork) { return IpEntry.AddressList[i].ToString(); } } return ""; } catch (Exception ex) { return ex.Message; } } 来源: