线程安全

java设计模式一些问题

匿名 (未验证) 提交于 2019-12-02 21:45:52
1.设计模式的原则有哪些? 总原则是开闭原则,就是对扩展开放,对修改关闭。在程序需要进行拓展的时候,不能去修改原有的代码。 还有其他六个原则都是围绕这个原则展开的:单一职责原则(每个类应该实现单一的职责),里氏替换原则(任何基类可以出现的地方,子类一定可以出现),依赖倒转原则(面向接口编程,依赖于抽象而不依赖于具体), 接口隔离原则( 每个接口中不存在子类用不到却必须实现的方法,如果不然,就要将接口拆分 ), 最少知道原则( 一个类对自己依赖的类知道的越少越好, 将逻辑封装在方法的内部 ), 合成复用原则( 尽量首先使用合成/聚合的方式,而不是使用继承 )。 2.请列举出在JDK中几个常用的设计模式? 像Runtime和Calendar就是用单例模式设计的。 还有工厂模式比如说: -JDBC中Connection对象的获取。 - Hibernate中SessionFactory创建Session。 - Spring 中IOC容器创建管理bean对象。 - XML解析时的DocumentBuilderFactory创建解析器对象。 - 反射中Class对象的newInstance()。 观察者模式被用于swing和很多的时间监听中。 3.说一下什么是单例模式,并描述一下怎么设计出一个线程安全的单例模式。 什么是单例模式可以从它的三个特点来描述:第一是这类只能有一个实例

redis(5)-java集成一

匿名 (未验证) 提交于 2019-12-02 21:45:52
Redis官方对Java语言的封装框架推荐有十多种,主要有:Jedis、Lettuce、Redisson。 1几个框架的对比 三个框架都是在Java中对Redis操作的封装。 1.1 Jedis github: https://github.com/xetorthio/jedis Jedis是Redis的Java实现的客户端,其API提供了比较全面的Redis命令的支持。支持基本的数据类型如:String、Hash、List、Set、Sorted Set。 优点 :比较全面的提供了Redis的操作特性,相比于其他Redis 封装框架更加原生。 编程模型 : 使用阻塞的I/O,方法调用同步,程序流需要等到socket处理完I/O才能执行,不支持异步操作。Jedis客户端实例不是线程安全的,所以需要通过连接池来使用Jedis。 1.2 Lettuce 官网: https://lettuce.io/ github: https://github.com/lettuce-io/lettuce-core 高级Redis客户端,用于线程安全同步,异步和响应使用,支持集群,Sentinel,管道和编码器。 优点 :适合分布式缓存框架。 编程模型 :基于Netty框架的事件驱动的通信层,其方法调用是异步的。Lettuce的API是线程安全的,所以可以操作单个Lettuce连接来完成各种操作。 1

面对对象第二单元总结 - 电梯(java多线程)

匿名 (未验证) 提交于 2019-12-02 21:35:18
概述 刚刚过去的oo第二单元主要是来训练我们java多线程设计。 借助电梯这个载体,逐步深入,线程的信息交互,控制也随之复杂。 尽管,我本单元成绩不是很好看,但是,确实学到了不少东西。 下面,我就借助分析三次作业,来谈下我的收获。 作业分析 第一次作业 任务分析: 本次作业需要模拟一个多线程实时电梯系统,从标准输入中输入请求信息,程序进行接收和处理,模拟电梯运行,将必要的运行信息通过输出接口进行输出。 本次作业电梯系统具有的功能为:上下行,开关门,每运行一层的时间为固定值,开关门的时间也为固定值。 电梯系统可以采用任意的调度策略,即上行还是下行,是否在某层开关门,都可自定义,只要保证在 系统限制时间内 将所有的乘客送至目的地即可。 电梯系统在某一层开关门时间内可以上下乘客, 开关门的边界时间都可以上下乘客 。 至于调度算法-简单FAFS(傻瓜调度即可) 设计策略: 请求模拟器作为一个线程,负责接受在线请求并负责将请求放入请求队列中。 电梯作为一个线程,从请求队列get到所需请求并模拟电梯行为 请求队列是请求模拟器和电梯线程的共享对象,负责完成线程通信,控制。 其实,第一次作业比较简单,只需要考虑以下几个问题 问题1 电梯如何完成请求 先接到请求发出者,然后完成该请求。在第一次作业中,我们无需判断电梯运动方向,所以这个问题就比较简单了,只需要sleep盲目模拟即可 问题2

Java开发面试题汇总整理

匿名 (未验证) 提交于 2019-12-02 21:35:18
又是金三银四的时候,我希望这份面试题能够祝你一臂之力! 自我和项目相关 1、自我介绍 2、你觉得自己的优点是?你觉得自己有啥缺点? 3、你有哪些 offer? 4、你为什么要离开上家公司?你上家公司在xxx,我们公司在xxx,离这么远为什么要选择我们这里? 5、上家公司的同事和领导是怎么评价你的? 6、介绍下你的上家公司是做哪块的吧 7、在上家公司你做了哪些项目? 8、你在项目中是什么角色? 9、这个项目的数据量和并发量多大? 10、这个项目用的什么技术? 11、项目过程中有遇到什么很印象深刻的问题吗? 12、是怎么解决的这些问题? 13、项目有没有还可以继续优化的地方? 14、该怎么优化?有什么思路没? 15、叫你设计一个并发xxx,数据存储量xxx 量级的系统,你该如何设计?从你知道的点尽可能的多说出些? Java 基础 1、Object 对象的方法有哪些?分别有什么作用?该什么场景用? 2、Integer 的常量缓存池 3、Java 特性?什么是多态?举个例子 4、重载重写的区别? 5、画下 HashMap 的结构图?HashMap 、 HashTable 和 ConcurrentHashMap 的区别?使用场景分别是? 6、HashMap 中怎么解决冲突的? 7、ConcurrentHashMap 和 HashTable 中线程安全的区别?为啥建议用

windows PHP连接oracle 部署 php oci配置

做~自己de王妃 提交于 2019-12-02 21:32:57
最近同事调试项目需要windows本地搭建php连接oracle数据库,以前一直想写,但是忘记了或者没时间,这次有时间就把部署过程记录下来,留给自己或者不了解的人参考一下 instantclient部署 1.首先我们要下载oracle连接客户端支持 instantclient 下载链接 https://www.ora cle.com/database/technologies/instant-client/downloads.html 此处根据自己的电脑位数 选择对应的版本 2.然后选择适合自己的版本,此处我选择的是12.2版本 3.下载完了以后解压,然后将解压的文件夹放到自己指定的目录,如下 4.然后   a.在D:\oracle\instantclient_12_2下新建tnsnames.ora配置文件,内容如下: orcl = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.11)(PORT = 1521)) ) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = orcl.being.com) ) )   右击计算机 ->属性->高级系统设置->环境变量    b.将D:\oracle\instantclient_12

面试之java集合

一笑奈何 提交于 2019-12-02 19:52:17
java集合 java集合分类:(普通集合、同步集合、并发集合) 普通集合 Connection接口 List 有序,可重复 ArrayList 优点: 底层数据结构是数组,查询快,增删慢。 缺点: 线程不安全,效率高 LinkedList 优点: 底层数据结构是双向链表,查询慢,增删快。 缺点: 线程不安全,效率高 Vector 优点: 底层数据结构是数组,查询快,增删慢。 缺点: 线程安全,效率低 Set 无序,唯一 HashSet 底层数据结构是哈希表。(无序,唯一) 如何来保证元素唯一性? 1.依赖两个方法:hashCode()和equals() LinkedHashSet 底层数据结构是链表和哈希表。(FIFO插入有序,唯一) 1.由链表保证元素有序 2.由哈希表保证元素唯一 TreeSet 底层数据结构是红黑树。(唯一,有序) Map接口(key-value 的键值对,key 不允许重复,value 可重复,重复时会覆盖前一个key) Map中的key:无序的、不可重复的,value:无序的、可重复的 HashMap:无序的,效率高,但不是线程安全的,key和value都允许为null。 TreeMap:有序的,底层使用红黑树,保证按照添加的key-value对进行排序,实现排序遍历。此时考虑key的自然排序或定制排序。 LinkedHashMap

java线程安全之Executor框架及自定义线程池(十五)

☆樱花仙子☆ 提交于 2019-12-02 19:40:55
Executor框架及自定义线程池 Executor框架 概念理解 为了更好的控制多线程,JDK提供了一套线程框架Executor,帮助开发人员有效地进行线程控制。它们都在Java.util.concurrent包中,是JDK并发包的核心。其中有一个比较重要的类:Executors,他扮演这线程工厂的角色,我们通过Executors可以创建特定功能的线程池。Executors创建线程池方法: newFixedThreadPool()方法,该方法返回一个固定数量的线程池,该方法的线程数始终不变,当有一个任务提交时,若线程池中空闲,则立即执行,若没有,则会被暫缓在一个任务队列中等待有空闲的线程去执行· 具体源码如下: public static ExecutorService newFixedThreadPool ( int nThreads) { return new ThreadPoolExecutor(nThreads, nThreads, //初始化多少个线程 / 最大线程 0 L, TimeUnit.MILLISECONDS, //这两个参数一起用的等待的时间 这里为 0 new LinkedBlockingQueue<Runnable>()); //无界队列 如果这个任务没有空闲线程就会 缓存到这个线程中 } newSingleThreadExecutor()方法

Java线程安全

此生再无相见时 提交于 2019-12-02 17:05:53
线程安全 多线程编程中的三个核心概念 原子性:锁(lock)和同步(synchronized)、CAS(compare and swap) 可见性:volatile(乐观锁) 顺序性:happens-before原则 参考 当我们说线程安全时,到底在说什么 一图带你了解java线程安全 来源: https://www.cnblogs.com/shengulong/p/11756310.html

java 面试题(转)

孤街浪徒 提交于 2019-12-02 16:16:44
Java 面试随着时间的改变而改变。在过去的日子里,当你知道 String 和 StringBuilder 的区别就能让你直接进入第二轮面试,但是现在问题变得越来越高级,面试官问的问题也更深入。 在我初入职场的时候,类似于 Vector 与 Array 的区别、HashMap 与 Hashtable 的区别是最流行的问题,只需要记住它们,就能在面试中获得更好的机会,但这种情形已经不复存在。如今,你将会被问到许多 Java 程序员 都没有看过的领域,如 NIO,设计模式,成熟的单元测试,或者那些很难掌握的知识,如并发、算法、数据结构及编码。 由于我喜欢研究 面试题 ,因此我已经收集了许多的面试问题,包括许多许多不同的主题。我已经为这众多的问题准备一段时间了,现在我将它们分享给你们。这里面不但包含经典的面试问题,如线程、集合、equals 和 hashcode、socket,而且还包含了 NIO、数组、字符串、Java 8 等主题。 该列表包含了入门级 Java 程序员和多年经验的高级开发者的问题。无论你是 1、2、3、4、5、6、7、8、9 还是 10 年经验的开发者,你都能在其中找到一些有趣的问题。这里包含了一些超级容易回答的问题,同时包含经验丰富的 Java 程序员也会棘手的问题。 当然你们也是非常幸运的,当今有许多好的书来帮助你准备 Java 面试

Redis的三个框架:Jedis,Redisson,Lettuce

拟墨画扇 提交于 2019-12-02 15:34:38
Jedis api 在线网址:http://tool.oschina.net/uploads/apidocs/redis/clients/jedis/Jedis.html redisson 官网地址:https://redisson.org/ redisson git项目地址:https://github.com/redisson/redisson lettuce 官网地址:https://lettuce.io/ lettuce git项目地址:https://github.com/lettuce-io/lettuce-core 概念:   Jedis:是Redis的Java实现客户端,提供了比较全面的Redis命令的支持,   Redisson:实现了分布式和可扩展的Java数据结构。   Lettuce:高级Redis客户端,用于线程安全同步,异步和响应使用,支持集群,Sentinel,管道和编码器。 优点:   Jedis:比较全面的提供了Redis的操作特性   Redisson:促使使用者对Redis的关注分离,提供很多分布式相关操作服务,例如,分布式锁,分布式集合,可通过Redis支持延迟队列   Lettuce:主要在一些分布式缓存框架上使用比较多 可伸缩: Jedis:使用阻塞的I/O,且其方法调用都是同步的,程序流需要等到sockets处理完I/O才能执行