- 博客(32)
- 收藏
- 关注
原创 记一次MYSQL的查询优化(主要集中在建立索引消除USING filesort )
回顾一下最近做的一个查询优化 ,该sql是一个页面查询,历史遗留问题就不多说。。当我接手的时候(去掉搜索条件)的sql为MYSQL 5.7.23original版本select a.*, m.fitment_contract_amount from (select t.id, t.task_no, t.apply_time...
2019-08-13 16:31:10 382
原创 ffmpeg java 实时视频流转码(ffmpeg-cli-wrapper)
开源地址https://github.com/bramp/ffmpeg-cli-wrapper由于java部分关于ffmpeg的代码处理较少,本来是开子线程通过模拟命令行环境输入命令来实时视频流转码及视频流截取保存文件,由于无法在保存文件之后关闭线程,后使用该开源组件重构(虽然也是模拟命令行的方式,但是在线程的处理上会比自己手写更加精细),开贴记录下使用过程pom导入及window...
2019-04-23 17:51:43 9847 4
原创 Intant.now()存储数据库时间offset
不熟悉hibernate,偶然发现mysql数据库中的插入时间和预想的有出入在bean中 时间是Instant格式 默认是 Instant.now()默认是UTC时制,(夏令制)而在夏令制里和GMT+8有时差最后将配置文件中的UTC改为GMT+8properties: hibernate.jdbc.time_zone: GMT+8jdbc数据源的UTC改为GM...
2019-03-28 15:56:36 332
原创 JVM之垃圾收集和内存分配
程序计数器,虚拟机栈,本地方法栈3个区域随线程而生,随线程而灭;栈中的栈帧随着方法的进入和退出而有条不紊地执行着出栈和入栈操作我们只有在程序处于运行期间时才能知道会创建哪些对象,java堆和方法区的内存的分配和回收都是动态的,垃圾收集器所关注的是这部分内存3.2.1引用计数算法(python) 计数算法:给对象中添加一个引用计数器,每当有一个地方引用,计数器值就加1;当...
2018-08-29 14:58:37 214
原创 JVM之内存和对象创建过程
1.5.3多核并行Lambda支持会极大改善目前Java语言不适合函数式编程的现状.函数式编程的一个重要优点就是天然适合并行运行. 2.2.1程序计数器(每条线程独立私有) 程序计数器是一块较小的内存空间,它可以看做是当前线程所执行的字节码的行号指示器字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令,分支 循环 跳转 异常处理 线...
2018-08-29 14:32:10 10833
原创 Socket(三) NIO
NIO主要包括两个部分:java.nio.channels包介绍了Selector和Channel抽象,java.nio包介绍了Buffer抽象5.1为什么需要NIO(单线程实现Socket多线程的效果)考虑一个在客户端之间传递消息的即时消息服务器(Instant Messaging)。客户端必须不停地连接服务器以接收即时消息,因此线程池的大小限制了系统可以同时服务的客户端总数。如...
2018-08-28 16:09:01 329
原创 Socket(二)
4.1多任务处理当一个客户端向一个已经被其他客户端占用的服务器发送连接请求时,虽然其在连接建立后即可向服务器端发送数据,服务器端在处理完已有客户端的请求前,却不会对新的客户端作出响应,。这种类型的服务器称为"迭代服务器(iterative server)"。(顺序处理请求)本节我们将介绍两种实现并行服务器(concurrent servers)的编程方法,分别为:一客户一线程(thread...
2018-08-28 15:59:46 238
原创 Socket(一)
2.0什么是套接字Sokcet(套接字)是一种抽象层,应用程序通过它来发送和接收数据,就像应用程序打开一个文件句柄,将数据读写到稳定的存储器上一样. 一个socket允许应用程序添加到网络中,并与处于同一个网络中的其他应用程序进行通信。一台计算机上的应用程序向socket写入的信息能够被另一台计算机上的另一个应用程序读取,反之亦然Applications:应用程序 TCP socket...
2018-08-28 15:53:06 337
原创 设计模式之职责链模式(chain of responsibility)
职责链模式(chain of responsibility):使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系.将这个对象连成一条链,并沿着这条链传递该请求,知道有一个对象处理它为止(有点想链表结构 每个对象和下一个对象相关联)1、链表方式:比如请假审批(要一级一级的审批)2、非链表方式:通过集合,数组生成责任链更加实用,将链表上的各个对象都添加到集合中,然后通过反射给...
2018-08-28 15:02:41 1139
原创 设计模式之命令模式(Command)
将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作经典的命令模式包括4个角色:Command:定义命令的统一接口ConcreteCommand:Command接口的实现者,用来执行具体的命令,某些情况下可以直接用来充当Receiver。Receiver:命令的实际执行者Invoker:命令的请求者,是命令模式中最重要的角色。这个...
2018-08-28 14:53:30 166
原创 设计模式之桥接模式(Bridge)
合成/聚合复用原则:尽量使用合成/聚合,尽量不要使用类继承合成(Composition)和聚合(Aggregation)都是关联的特殊种类.聚合表示一种弱的"拥有"关系,体现的是A对象可以包含B对象,但B对象不是A对象的一部分;合成则是一种强的"拥有"关系,体现了严格的部分和整体的关系,部分和整体的生命周期一样将抽象部分与它的实现部分分离,使它们都可以独立地变化.抽象与实现分离:不是让抽...
2018-08-28 13:31:35 236
原创 设计模式之单例模式(Singleton)(枚举待完善)
构造器私有保证一个类仅有一个实例,并提供一个访问它的全局访问点通常我们可以让一个全局变量使得一个对象被访问,但它不能防止你实例化多个对象.一个最好的方法就是,让类自身负责保存它的唯一实例.这个类可以保证没有其他实例可以被创建,并且它可以提供一个访问该实例的方法懒汉式单例(在第一次调用的时候实例化自己)饿汉式单例(在类初始化时,已经自行实例化) 在类创建的同时就已经创建好一个静态的对象供系...
2018-08-28 11:25:52 173
原创 设计模式之组合模式(Composite)
将对象组合成树形结构以表示'部分-整体'的层次结构.组合模式使得用户对单个对象和组合对象的使用具有一致性 在以下情况下可以考虑使用组合模式: (1) 在具有整体和部分的层次结构中,希望通过一种方式忽略整体与部分的差异,客户端可以一致地对待它们。 (2) 在一个使用面向对象语言开发的系统中需要处理一个树形结构。 (3) 在一个系统中能够分离出叶子对象和容器对象,而且它们的类型不固定,需要增加一...
2018-08-28 10:52:23 162
原创 设计模式之备忘录模式(Memento)
备忘录:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态.这样以后就可将该对象恢复到原先保存的状态.Originator(发起人):负责创建一个备忘录Memento,用以记录当前时刻它的内部状态,并可使用备忘录恢复内部状态.Originator可根据需要决定Memento存储Originator的哪些内部状态.Memento(备忘录):负责存储Originator对...
2018-08-28 10:13:36 151
原创 设计模式之适配器模式(Adapter)
适配器模式将某个类的接口转换成客户端期望的另一个接口表示,主的目的是兼容性,让原本因接口不匹配不能一起工作的两个类可以协同工作。其别名为包装器(Wrapper)。需要被适配的类、接口、对象(我们有的),简称 src(source),最终需要的输出(我们想要的),简称 dst (destination,即Target) 适配器称之为 Adapter 。src->Adapter->ds...
2018-08-28 09:36:31 171
原创 设计模式之状态模式(State)
状态模式:当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类状态模式主要解决的是当控制一个对象状态转换的条件表达式过于复杂时的情况.把状态的判断逻辑转移到表示不同状态的一系列类当中,可以把复杂的判断逻辑简化.状态模式的好处是将与特定状态相关的行为局部化,并且将不同状态的行为分割开来State类,抽象状态类:定义一个接口以封装与Context的一个特定状态相关的行为Con...
2018-08-27 17:40:16 164
原创 设计模式之观察者模式(发布/订阅模式:publish/subscribe)
定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象.这个主题对象在状态发生变化时,会通知所有观察者对象,使它们能够自动更新自己观察者模式的关键对象是主题Subject和观察者Observer.一个Subject可以有任意数目依赖它的Observer,一旦Subject的状态发生了改变,所有的Observer都可以得到通知.Subject发出通知的时候并不需要知道谁是它的Ob...
2018-08-27 16:46:22 1793
原创 设计模式之建造者模式(builder)
将一个复杂对象的构建与他的表示分离,使得同样的构建过程可以创建不同的表示,当我们使用Builder模式,用户只需要指定需要构造的类型就可以得到它们,而具体建造的过程和细节不需要知道.通常包括以下角色:1.builder(抽象建造者):给出一个抽象结论,以规范产品对象的各个组成成分的建造.这个接口规定要实现复杂对象的那些部分的创建,并不涉及具体的对象部件的创建.2.ConcreteBuilde...
2018-08-27 16:07:07 141
原创 设计模式之门面模式(facade)
为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用Facade 外观类:知道哪些子系统类负责处理请求,将客户的请求代理给适当的子系统对象.熟悉子系统的功能。内部根据客户角色的需求预定了几种功能的组合。SubSystem:子系统类集合 实现子系统的功能,处理Facade对象指派的任务.注意子类中没有Facade的任何信息,即没有对Facde...
2018-08-27 15:33:40 441
原创 设计模式之模板方法模式
定义一个操作中的算法的骨架,而将一些步骤延迟到子类中.模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤 既然用了继承,并且肯定这个继承有意义,就应该要成为子类的模板,所有重复的代码都应该要上升到父类去,而不是让每个子类都去重复当我们要完成在某一细节层次一致的一个过程或一系列步骤,但其个别步骤在更详细的层次上的实现可能不同时,我们通常考虑用模板方法模式来处理.Ab...
2018-08-27 14:52:58 121
原创 设计模式之工厂方法模式
工厂方法模式:定义一个用于创建对象的接口,让子类决定实例化哪一个类.工厂方法使一个类的实例化延迟到其子类 对比简单工厂 简单工厂模式的最大优点是 工厂类中包含了必要的逻辑判断,根据客户端的选择条件动态实例化相关的类,对于客户端来说,去除了与具体产品的依赖工厂方法模式实现时,客户端需要决定实例化哪一个工厂来实现运算类,工厂方法把简单工厂的内部逻辑判断移到了客户端代码来进行,你想要...
2018-08-27 13:30:51 142
原创 设计模式之动态代理(dynamicProxy)
与静态代理不同的是动态代理的代理类在程序运行时创建代理类不需要继承具体的接口 只需要实现InvocationHandler 通过反射进行动态代理动态代理的优势在于可以很方便的对代理类的函数进行统一的处理,而不用修改每个代理类中的方法.是因为所有被代理执行的方法,都是通过在InvocationHandler中的invoke方法调用的,所以我们只要在invoke方法中统一处理,就可以对所有被代理...
2018-08-27 10:31:13 211
原创 设计模式之静态代理(staticproxy)
静态代理模式(Proxy):代理类是自己定义好的,在程序运行之前就已经编译完成. 为其他对象提供一种代理以控制对这个对象的访问 核心是一个公共接口,一个委托类,一个代理类,代理类和委托类具有同样的接口,代理类持有委托类的实例,代为执行具体类的实例方法 Subject类:定义了RealSubject和Proxy的功用接口.这样就在任何使用RealSubject的地方都可以使用Proxy ...
2018-08-27 10:19:13 849
原创 设计模式之装饰模式(Decorator)
装饰模式是为已有功能动态地添加更多功能的一种方式.把类中的装饰功能从类中搬移去除,可以简化原有的类动态的给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更为灵活当系统需要新功能的时候,是向旧的类中添加新的代码.这些新加的代码通常装饰了原有类的核心职责或主要行为,它们在主类中加入了新的字段,新的方法和新的逻辑,从而增加了主类的复杂度.而这些新加入的东西仅仅是为了满足一些只在某...
2018-08-27 09:59:59 135
原创 设计模式之六大设计原则
1.单一职责原则(一个类只放一种复杂的功能实现)单个类而言,应该仅有一个引起它变化的原因. 如果一个类承担的职责过多,就等于把这些职责耦合在一起,一个职责的变化可能会削弱或者抑制这个类完成其他职责的能力. 这种耦合会导致脆弱的设计,当变化发生时,设计会遭受到意想不到的破坏 软件设计真正要做的许多内容,就是发现职责并把那些职责相互分离.其实要去判断是否应该分离出类来,也不难,那就是如果...
2018-08-23 17:59:31 101
原创 设计模式之策略模式(Strategy)
策略模式: 定义了算法家族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化,不会影响到使用算法的客户只要在分析过程中听到需要在不同时间应用不同的业务规则,就可以考虑使用策略模式处理这种变化的可能性 涉及三个角色: 环境(Context) 角色:持有一个Strategy的引用,通过条件来分配具体策略 抽象策略(Strategy)角色:这是一个抽象角色,通常...
2018-08-23 16:35:21 123
原创 阿里开发手册之并发处理(Threadlocal已完善,JDK1.8Date类待完善)
世间没有绝对的真理,掌握事物的本质,针对不同的场景进行实践验证才是最可靠有效的方法。获取单例对象需要保证线程安全,其中的方法也要保证线程安全.(单例模式的实现如何选择)创建线程或线程池请指定有意义的线程名称线程资源必须通过线程池提供,不允许在应用中自行显式创建线程线程池的好处是减少在创建和销毁线程上所消耗的时间以及系统资源的开销,解决资源不足的问题.如果不使用线程池有可能造成...
2018-08-23 14:13:01 1227 1
原创 阿里开发手册之集合处理
hashCode和equals1.只要重写equals,就必须重写hashCode2.因为Set存储的是不重复的对象(根据hashCode和equals判断),所以Set储存的对象必须重写这两个方法3.如果自定义对象作为Map的Key,必须重写hashCode和equalsArrayList的subList结果不可强转成ArrayList,否则会抛出ClassCastException异...
2018-08-23 14:03:00 403
原创 阿里开发手册之面向对象规约(序列化原理待完善)
避免通过一个类的对象引用访问此类的静态变量或静态方法,无谓增加编译器解析成本,直接用类名来访问即可所有的覆写方法,必须加@override注解相同参数类型,相同业务含义,才可以使用java的可变参数,避免使用object接口过时必须加@Depercated注解,并清晰地说明采用的新接口或者新服务是什么不能使用过时的类或方法所有相同类型的包装类对象之间值得比较,全部使用equal...
2018-08-23 11:03:44 777
原创 阿里开发手册之命名风格(Domain待完善)
回顾2018年初看的阿里开发手册一.命名风格 常量命名全部大写,单词间用下划线隔开,力求语义表达完整清除 抽象类命名用Abstract或Base开头;异常类命名使用Exception结尾;测试类命名以要测试的类的名称开始,以Test结尾 包名统一使用小写,点分隔符之间有且仅有一个自然语义的英文单词.包统一用单数形式.类名如果有复数含义,类名可以用复数形式 杜绝完...
2018-08-23 10:32:10 1205
原创 阿里开发手册之代码格式
常量定义1.不允许任务魔法值(即未经预先定义的常量)直接出现在代码中(如String s = new String("hello")>>String s = new String(xxxUtils.HELLO))2.在long或者long赋值时,数值后使用大写的L,不可以用小写l;(原因是l很容易和1混淆,可读性差)3.不要使用一个常量类维护所有常量,要按常量功能进行归类,分开...
2018-08-23 10:31:29 1098
原创 PYE-Demo
一共两个星期把这个东西一塌糊涂的搞完了。今天以外搞完了还玩了一会结果跑起来全是bug(迷之尴尬)后来看大佬帮忙的时候发现了好几个严重问题1.字符集的问题一开始写的时候没注意这些,默认gbk写的。后来改的很麻烦,这虽然是一个不怎么能注意到的 但是感觉自己好low,最后一个bug是字符流的东西,也是因为没有设定reader的字符集,引以为戒,保持良好的编码习惯2.逻辑代码太复杂在关于url转json的...
2018-03-21 22:05:24 122
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人