文档章节

总结

BobwithB
 BobwithB
发布于 10/17 00:20
字数 2077
阅读 19
收藏 0


一、设计模式
简单工厂:一个简单而且比较杂的工厂,可以创建任何对象给你
复杂工厂:先创建一种基础类型的工厂接口,然后各自集成实现这个接口,但是每个工厂都是这个基础类的扩展分类,spring的Factoy
单例模式:懒汉和饿汉模式,spring的bean
代理模式:动态代理:RPC远程调用,使用的就是远程代理;dubbo、Feign
模板模式:runnable(关注线程的创建) 和 thread (关注线程的管理)的关系
适配模式:旧的接口不适合,重新在旧的接口之上进行装修再利用,
组合模式:DOM树形接口,部分-整体的关系,把所有零散的关系通过树结构进行组合在一起
观察者模式:一对多。线程之间通信,或者MVC,发布/订阅(分布式 zookeeper、ereuka)
中介模式:多对多:MVVM
迭代器模式:集合中使用迭代器的方式进行遍历
桥接模式:jdbc可以适配不同的数据源
fut

二、spring
1、springMVC的流程:DispatcherServlet-> HandlerMapping-> HandlerAdapter(controller)->ModelAndView(视图解析层)
不过现在大部分都是直接RESTful编程模式了
2、spring的bean的生命周期:由容器创建并实例—》注入——》一直等待被使用,直到容器被销毁它就销毁,另外也可以调用bean自身的

三、springCloud
1、Ribbon(客户端负载均衡)
2、Feign RPC(远程调用同本地一样调用,开发者可以无感HTTP 的过程)
3、Zuul网关
4、Erueka(注册服务中心)
5、springBoot(便捷模式)
6、Nginx  服务器端负载均衡,反向代理模式
7、springConfig   统一配置中心

四、多线程
1、状态:NEW/RUNNABLE/RUNNING/BLOCKED/TEMINATE
2、JMM:原子性、可见性、有序性
3、Future(FutureTask)和Callable获取返回值+execute.submit 一个 callable实现类,然后通过future接收!
4、如何创建线程:反射、实现runnable接口,继承Thread类、callable
5、wait和sleep都进入blocked状态,但是Wait是Object的方法,sleep是Thread类的方法,yield进入RUNNABLE状态,interrupt也是中断线程进入BLOCKED的状态
6、notify也是object的方法,是唤醒wait该对象的BLOCKED线程进入RUNNABLE状态
7、阻塞的线程被interrupt的话会进入runnable状态,阻塞的操作完成了会自动进入RUNNABLE状态。被notify唤醒的BLOCKED线程
8、线程包:https://www.cnblogs.com/aheizi/p/6851416.html
8、Future是一个接口,FutureTask是一个具体实现类。这里先通过两个场景看看其处理方式及优点。

8、线程返回值:实现calleble接口,然后使用线程池ExecutorService来submit
 public static void main(String[] args) {
        ExecutorService exec = Executors.newCachedThreadPool();//工头
        ArrayList<Future<String>> results = new ArrayList<Future<String>>();//
        for(int i = 0 ; i < 10 ;i++){
            results.add(exec.submit(new TaskCallable(i)));//submit返回一个Future,代表了即将要返回的结果
        }
        
        System.out.println("size1: "+results.size());
        int count1 = 0;
        int count2 = 0;
        for(Future<String> future: results){
            System.out.println("isDone: "+future.isDone());
            if(future.isDone())count2 ++;
            try {
                System.out.println("get: "+future.get());
                count1 ++;
            } catch (Exception ex) {
                ex.printStackTrace();
            }
        }
        System.out.println("count1: "+count1);
        System.out.println("count2: "+count2);
    }


当线程池的任务缓存队列已满并且线程池中的线程数目达到maximumPoolSize,如果还有任务到来就会采取任务拒绝策略,通常有以下四种策略:
ThreadPoolExecutor.AbortPolicy:丢弃任务并抛出RejectedExecutionException异常。
ThreadPoolExecutor.DiscardPolicy:也是丢弃任务,但是不抛出异常。
ThreadPoolExecutor.DiscardOldestPolicy:丢弃队列最前面的任务,然后重新尝试执行任务(重复此过程)
ThreadPoolExecutor.CallerRunsPolicy:由调用线程处理该任务

五、集合
1、https://www.cnblogs.com/dengcl/p/8046739.html
1、equels和==的问题:原本相等,但是要equals值表面相等那就需要重写咯
2、重写equels时候为什么要重写hashcode。那是因为hashset的原因!
3、hashtable的链表。原因是jvm在计算hashcode的时候不靠谱,导致不同的对象可以产生相同的hashcode,这就会在hashtable中会产生链表,当用这个hashcode找到节点时候,再用equels方法查找到特定的对象。所以得出,equels为true的(这里是等同于==),hashcode一定相同,相同对象嘛。hashcode相同的不一定equals相同的不同对象!
1、改写equels可以让两个值相等对象实现值相等逻辑。对于开发者来说是相同的
2、两个equals为true的对象,但是引用地址放入到hashset中,又成功?因为hashset是对对象进行计算hashcode。所以产生不同的hashcode。
3、所以为了避免hashcode的“表面”重复,这里的hashcode也要计算得到相同的hashcode!
4、set是唯一/map是key-value也是需要唯一不可重复key。但是hashset计算的是对象的hashcode。hashmap计算的是key字符的hashcode。
5、hashtable线程安全/hashmap不安全
6、arraylist和linkList。link插入和删除容易,遍历难因为不连接,arraylist遍历容易,插入删除难
7、hash是最快查询的方法。不需要遍历
8、array数组长度不可变,list可变!
9、当hashtable上链表过长时候,就会影响查询遍历,这时候回自动变成红黑二叉树
10、Vector比arraylist 线程安全


六、数据结构



队列

数组
树:二叉树、红黑二叉树、B-tree


七、JVM
1、内存模型:计数器、堆、栈、方法区、本地方法区、常量池
2、JVM的GC
1)标记-清理法
2)标记-整理法
3)复制法
4)新生代(清理法)-老年代(复制)
3、JVM的类加载过程:加载-连接(验证-准备-解析)-初始化-使用-卸载
4、JMM的模型:可见性、原子性、有序性
5、内存泄漏和内存溢出

八、java基础
1、java的八个数据类型:short/int/char/boolean/byte/float/double/long
2、包装类型转成基础类型为拆装,反过来为装箱
3、内部类与静态内部类的区别?:在静态内部类中无法直接访问外部类中变量
4、StringBuffer,Stringbuilder有什么区别:stringbuffer 是线程安全
5、String str=”aaa”,与String str=new String(“aaa”)一样吗?不一样,一个事常量字面量,一个是字符对象!
6、String s = "a" + "b";只创建了一个对象,就是ab,存于常量池中。
7、new String("abc")为什么又能被看成"abc"和new String()
8、String a="abc";  String b="abc";   那这里呢?  一个!
9、String a="ab"+"cd";   再看看这里呢?三个!
10、String a = “abc”;String b = “abc”;String c = new String(“abc”);两个!
12、字符串反转:Stringbuilder或者stringbuffer的reverse方法
13、float型float f=3.4是否正确?不正确——》float f=(float)3.4 或float f = 3.4f  ——》double d=4.0,
14、Math.round(11.5) 等于多少? Math.round(-11.5)等于多少?
答:Math.round(11.5)的返回值是12,Math.round(-11.5)的返回值是-11。四舍五入的原理是在参数上加0.5然后进行下取整。
15、swtich 是否能作用在byte(可以) 上,是否能作用在long 上(不可以),是否能作用在String上(可以)?
16、抽象类(abstract class)和接口(interface)有什么异同?
答:抽象类和接口都不能够实例化,但可以定义抽象类和接口类型的引用。一个类如果继承了某个抽象类或者实现了某个接口都需要对其中的抽象方法全部进行实现,否则该类仍然需要被声明为抽象类。接口比抽象类更加抽象,因为抽象类中可以定义构造器,可以有抽象方法和具体方法,而接口中不能定义构造器而且其中的方法全部都是抽象方法。抽象类中的成员可以是private、默认、protected、public的,而接口中的成员全都是public的。抽象类中可以定义成员变量,而接口中定义的成员变量实际上都是常量。有抽象方法的类必须被声明为抽象类,而抽象类未必要有抽象方法。
17、

八、mysql
https://my.oschina.net/u/3697586/blog/3113322

© 著作权归作者所有

上一篇: 有趣的闭包
下一篇: 多线程开发
BobwithB
粉丝 1
博文 126
码字总数 78627
作品 0
深圳
私信 提问
《Yaf零基础学习总结》系列技术文章整理收藏

《Yaf零基础学习总结》系列技术文章整理收藏 1关于Yaf的一些说明[转Yaf作者] 2Yaf零基础学习总结1-Yaf框架简介 3Yaf零基础学习总结2-Yaf框架的安装 4Yaf零基础学习总结3-Hello Yaf 5Yaf零基础...

开元中国2015
2015/05/30
266
1
成为Java GC专家系列

成为Java GC专家(1):深入浅出Java垃圾回收机制 成为Java GC专家(2):如何监控Java垃圾回收机制 成为Java GC专家(3):如何优化Java垃圾回收机制 成为Java GC专家(4):Apache的MaxClients参数...

HenrySun
2016/06/21
226
0
常见Shell命令用法总结

常见命令用法总结 ----- 目录: --- 关于grep的总结 关于egrep的总结 关于tr的总结 关于sort的总结 关于uniq的总结 关于cut的总结 关于tee的总结 关于split的总结 关于type的使用 关于find的...

小骏骏
2016/02/19
73
0
写好月度工作总结的两个关键点!

第一,有米下锅。 这一方面来自于你确实工作努力有成绩,另一方面也要靠你平日就有记录的习惯。 月度总结,不是临时抱佛脚的事,稀里糊涂干了一个月,最后装模作样有的没的往上瞎写,这玩意儿...

明哥聊求职
2018/10/09
0
0
PHP正则分段问题求救

用正则分段 字符串: 一、个人总结 个人总结: 1.学习 学习。。。 2.工作 工作。。。 二、生活总结 生活目录: 1.情感1 情感内容。。。 2.情感2 情感2。。。 如题上面字符串,想把他分段存入...

xixilvlv
2014/04/17
180
2

没有更多内容

加载失败,请刷新页面

加载更多

前端的一些雕虫小技,从100%和滚动条说起

1、100%和滚动条 当我们在css中把html和body同时设为100%时,会出现滚动条 html, body { width: 100%; height: 100%; } 原因是html和b...

wphmoon
今天
6
0
电力区块链应用案例【2019】

随着区块链技术的日益普及,出现了大量创业企业尝试使用区块链技术来解决能源与电力行业中存在的问题。在本文中,我们将介绍其中的三个能源区块链项目。 能源行业以价格不透明著称:消费者很...

汇智网教程
今天
8
0
聊聊rocketmq的adjustThreadPoolNumsThreshold

序 本文主要研究一下rocketmq的adjustThreadPoolNumsThreshold DefaultMQPushConsumer rocketmq-client-4.5.2-sources.jar!/org/apache/rocketmq/client/consumer/DefaultMQPushConsumer.ja......

go4it
今天
10
0
关于早起

早起是非常好的事情,但是像如果前一天睡得晚,或者第二天早上是非常冷的时候,那就不是很美好了。 但是本身早起是一件非常棒的事情,我记得我每次早起 如果不觉得困的话,世界是那么安静,脑...

T型人才追梦者
今天
7
0
Java输入输出

JDK中的InputStream/OutputStream构成了IO输入输出继承层次的基础。它们都是面向字节序列的,每次可以从序列中读入或者写出一个字节或者指定大小的字节数组。但是面向字节流的输入输出不便于...

ytuan996
今天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部