barriers / 阅读 / 详情

分库的数据用java怎么并行查询

2023-07-15 12:34:21
TAG: ava ja java
共2条回复
陶小凡

如果使用java多线程查询,必须使用CyclicBarrier,等待所有结果都查询完成合并结果集,或者使用dblink,然后HINT方式使用并行Parallell,利用数据的并行技术进行查询

可乐
* 回复内容中包含的链接未经审核,可能存在风险,暂不予完整展示!
一般涉及分表,不会按照编号来分,对于不同的业务场景,有些仅仅是数据分析,可以按照时间或者其他进行水平分,如果是用户可能需要的数据,量大的话,会比如取用户IDhash来分,一般这种情况,不会查询多个用户数据
参考
http://tieba.b***.com/p/2615753812

相关推荐

cyclicbarrier 怎么读

sai k li c bai ri er赛克利克百瑞尔
2023-07-15 07:39:141

战争机器4异步计算要开吗

要开。异步计算通过异步获取计算结果,也可以实现类似闭锁CountDownLatch、栅栏CyclicBarrier的功能。它使用Callable来代表一个任务,提交到Executor框架后,可以异步的通过Future来获取任务执行结果。可以通过CompletionService来提交一组任务到一个阻塞队列,再异步获取到这组任务的执行结果。
2023-07-15 07:39:311

java的多线程不异步怎么办

可使用同步组件CountDownLatch、CyclicBarrier等使异程同步。Java异步会导致代码出现诸多不可控因素,这时可可使用同步组件CountDownLatch、CyclicBarrier等进行修复。多线程并发时,多个线程同时请求同一个资源,必然导致此资源的数据不安全,A线程修改了B线程的处理的数据,而B线程又修改了A线程处理的数理。显然这是由于全局资源造成的,有时为了解决此问题,优先考虑使用局部变量,退而求其次使用同步代码块,出于这样的安全考虑就必须牺牲系统处理性能,加在多线程并发时资源挣夺最激烈的地方,这就实现了线程的同步机制。
2023-07-15 07:39:391

java中怎样实现多线程执行的结果相加

定义一个成员变量,在线程里加到成员变量里就好了。
2023-07-15 07:39:482

我的百度面经(共8次面试)

百度智能云 数据库部门 一面: 1 数据库的事务,四个性质说一下,分别有什么用,怎么实现的。一致性没讲好。 2 讲到了redo和undo日志,问我分别有什么用,说redo日志说错了。 3 数据库的隔离性如何保证,使用悲观锁和乐观锁有何区别。MVCC的设计目的是什么,怎么使用版本号判断数据的可见性。 4 问了一道算法,1到N的所有数字,按照字典序打印,怎么做。 说了用数组排序,问复杂度,扯了半天。 怎么优化,按照数字特征顺序打印,问这个东西和什么结构比较像。提示是树,然后说了个多叉树,问我怎么实现,最后其实使用dfs遍历树的每个分支。 5 多线程并发的同步实现,有两个方法,每个方法里有a部分代码和b部分代码,我要让两个线程分别执行两个方法,并且让他们运行完a部分代码再一起向下执行,如何实现。 6 我说了用cyclicbarrier实现,互相等待await。 然后他问我怎么用信号量实现,并且提示可以再用一个线程。 然后我说了个方案。 7 问了项目 8 如何把优化递归的代码 改成尾递归或者循环。 面试官说不是,引导说用栈实现递归。 问我栈中需要压入哪些数据。他说应该是方法参数,返回值,以及返回地址。 二面: 1 自我介绍,项目 10分钟过去 2 服务器如何负载均衡,有哪些算法,哪个比较好,一致性哈希原理,怎么避免DDOS攻击请求打到少数机器。 3 TCP连接中的三次握手和四次挥手,四次挥手的最后一个ack的作用是什么,为什么要time wait,为什么是2msl。 4 数据库的备份和恢复怎么实现的,主从复制怎么做的,什么时候会出现数据不一致,如何解决。 5 今天面试太多了,记不清了。。。 6 开源的技术看过用过么,分布式存储的了解么。 7 想做什么方向的开发。 8 Linux查看cpu占用率高的进程 9 查看占用某端口的进程和某进程监听的端口 10 如何查询日志文件中的所有ip,正则表达式 三面(8.3号更新): 数据库部门真的很严格,问题都挺难的。 1 讲一下项目 2 平时了解什么操作系统 Linux,说一下Linux排查问题常用的命令,ps,top,netstat,free,du等等 3 Linux的内存管理算法,问了一下是不是页面置换算法,他说是。 说了lru和fifo,问我lru有什么缺点,没答上来。 4 Linux的文件系统了解么,讲了一下inode节点,文件和目录的原理。他问我了不了解具体的文件系统ext2,ext3,答不会。。 5 进程通信方式有哪些,问我分别怎么使用,管道有哪些类型,各有什么优缺点。 6 问我服务器硬件了解么。。一脸懵逼,问了我懂不懂Raid,瞎扯了几句就说不懂了。 7 shell了解么,没怎么写过。 8 听说你会Java,说一下JVM内存模型把,有哪些区,分别干什么的 9 说一下gc算法,分代回收说下。 10 设计模式了解么,说了7种,问我分别怎么用,实际应用过吗,稍微扯了一下。 11 MySQL的引擎讲一下,有什么区别,使用场景呢。 12 查询最新的10条数据,想了好一会,order by id desc limit 10 13 MySQL的union all和union有什么区别,我瞎掰了一下,应该不对。 14 MySQL有哪几种join方式,底层原理是什么,答不会,只知道表现形式。 15 Redis了解哪些啊,数据结构和基本原理把。 问我Redis怎么做集群,答了主从哨兵和cluster。 Redis的持久化怎么做,aof和rdb,有什么区别,有什么优缺点。 16 Redis使用哨兵部署会有什么问题,我说需要扩容的话还是得集群部署。 17 分布式系统了解么,说一下Hadoop了解啥。 我说基本组件稍微了解过,简单搭过环境。 18 MapReduce的combiner干啥的,我说是合并结果的,问我啥时候会用到,答不知道。 19 Hadoop分发任务时,有个job失败了,hadoop会怎么处理,我答不知道,猜是会继续执行。。 20 hadoop分发任务,如果有一个节点特别慢拉慢了整体速度怎么办。我猜测是通过yarn分配相同的资源给每个任务,可以避免这种情况,他好像不太满意。 21 hadoop答得很烂。问了我两个10g文件比较,2g内存,重复率很高,筛选出不同的内容。我说拆成十份hash,每份两两比较hash的结果集,貌似他说OK。 22 排序算法了解哪些,巴拉巴拉。 23 用队列计算一个树的高度,我说用层次遍历记录节点高度。 24 一个黑名单集合,数据量很大,快速查询一个值是否在集合里,怎么设计,我说布隆过滤器。 25 还是上一题,说这个黑名单可能需要动态地增删改,如何设计才能避免访问响应太慢。我没思路,瞎扯了一下加硬件,用内存存,都被驳回了。然后他说算了。 26 上一题的黑名单做成分布式,怎么做。说了分片的方案,根据地址的hash值确定分片所在节点。 27 分布式数据库了解么,我不太明白他问的是啥,说不了解,感觉应该是问数据库的分布式方案。 28 有什么想问的,据他所说还有2-3轮面试,惊了。 全程50分钟,可以说是迄今为止难度最大的一个? 百度智能云 账号和消息部门 一面: 1 项目 2 讲一下AOP吧 3 动态***和静态***有什么区别 4 TCP和IP报文是否会分片,分别在什么情况下会分片。 TCP分包之后是否还会进行ip分片 5 做个题 无限长轨道。两辆车同方向开,车会滴水,怎么让他们相遇。这题简直像脑筋急转弯。 6 写一个斐波那契数列 递归式,要求改进 dp方式,要求优化空间 用三个变量代替数组进行dp,要求改进 我说数学公式,OK。 7 讲一下Linux的内存结构,我说只会JVM的,他让我说一下。 两者的内存如何映射,是什么关系,不会。 8 没了 二面 : 1 项目讲一下,10多分钟去了。 2 排序算法,复杂度,比较。快排的空间复杂度是logn 3 讲一下OSI七层模型,我说了5层模型,然后他让我再补充一下,问了每层的作用,问了wifi属于哪一层。 4 线程间的同步用什么方式,说了object方法。 问我使用hashmap时重写哪两个方法,为什么要重写,巴拉巴拉,什么场景下重写。 5 平时用过什么数据结构,list用哪些有啥区别。 6 Spring中的ioc和aop。ioc的注解有哪些。 autowired和resource有什么区别,作用域有哪些。 autowired如何配置两个类中的一个吗 7 写一个单例模式,有点忘却了,巴拉巴拉搞出一个双重检测的,中间改了多次。 8 Java会有内存泄漏吗,三个区分别什么情况下会产生内存泄漏 百度智能云 好像是基础研发工程师的岗位 一面 1 项目 2 队列和栈区别 3 两个栈实现队列,两个栈实现最小值栈 4 数据库的事务性质,如何实现这些性质 5 事务隔离级别有哪些,默认是什么级别。 6 已提交读有什么问题,用于什么场景 7 二叉树了解么,平衡二叉树呢,有什么场景会用到呢。 8 僵尸进程和孤儿进程是什么,分别有什么危害。 9 主从复制怎么实现。 10 Redis你用来做什么,为什么不用mq做异步队列 11 分布式文件系统了解么,HDFS讲一下原理 12 Java中一般用什么类型表示价格。 13 Java如何把byte类型转换成字符串 14 Java的string类型为什么是不可变的 15 有什么问题 百度核心搜索 一面: 1 自我介绍 2 docker和k8s了解多少 3 研究生学了哪些课程 4 操作系统了解么,讲一下进程和线程 5 死锁和处理方式 6 内存,虚拟内存和页面置换 7 网络了解么,讲一下三次握手和四次挥手 8 数据库了解多少,mysql索引,事务,锁讲了一些 9 Redis呢,讲了一下数据结构,持久化方式,使用场景 10 分布式了解哪些,负载均衡有哪些方式,说了dns,nginx,lvs和硬件,一致性问题怎么解决,说了2pc,3pc,raft和paxos,zab 10 mysql大表数据查询,怎么优化,分表,分库。 11单链表判环 使用快慢指针解决 12 完全二叉树判断: 二面: 1 项目 2 docker和kubenetes的原理和了解程度 3 docker的cgroup了解么 4 kubenetes的架构,扩容是怎么完成的。 5 Java的四种引用 6 Java的线程通信方式 7 Linux的进程通信方式 8 Java的线程池 9 算法 1 - N + 1这些数中取出N个,问剩下的是哪个。。 我说加起来相减,面试官说取巧了,不能这样。 我说比较数组下标,他还是说取巧。 于是我让他提示我一下,他说了排序再找。。额 然后想了两个空间换时间的办法,一个是用hashmap遍历两个数组。一个是合并数组后统计数字出现次数,也是hashmap 10 给定一串数字,找出所有可能的IP地址组合,比如192168111,组合是192.168.1.11,192.168.11.1。 应该LeetCode的题。之前自己没写完整,现场憋出来了。 这个代码应该没错。面试官看了二十分钟才说ok。 然后我们就这样沉默了20分钟,中间他就说了几句话。 最后面试官说他们部门一共两轮面试。 咱们下期见!答案获取方式:已赞 已评 已关~ 原文出处:https://www.nowcoder.com/discuss/90112?type=post&order=jing&pos=&page=2&ncTraceId=&channel=-1&source_id=search_post_nctrack&gio_id=FD441016D0B12571A898266FE8D1C8C6-1657195040955
2023-07-15 07:40:171

有没有关于java深入一点的书推荐?

学习的最好途径就是看书“,这是我自己学习并且小有了一定的积累之后的第一体会。个人认为看书有两点好处:1.能出版出来的书一定是经过反复的思考、雕琢和审核的,因此从专业性的角度来说,一本好书的价值远超其他资料。2.对着书上的代码自己敲的时候方便。“看完书之后再次提升自我的最好途径是看一些相关的好博文“,我个人认为这是学习的第二步,因为一本书往往有好几百页,好的博文是自己看书学习之后的一些总结和提炼,对于梳理学习的内容很有好处,当然这里不是说自己的学习方法,就不再扯下去了。很多程序员们往往有看书的冲动,但不知道看哪些书,下面我就给各位Java程序猿们推荐一些好书(每本书的作者会加粗标红),其中绝大多数都是我自己平时在看的书,也算是我对于平时读的书做一个小总结和读后感吧。首先推荐的不是一本书,而是一个博客,也是我们博客园另外一位博友java_my_life。目前市面上讲解设计模式的书很多,虽然我前面讲了看书是最好的,但是对设计模式感兴趣的朋友们,我推荐的是这个博客。这位博友的设计模式讲得非常非常好,我认为90%的内容都是没有问题且很值得学习的,其讲解设计模式的大体路线是:随便开篇点明该设计模式的定义图文并茂讲解该设计模式中的结构以详细的代码形式写一下该种设计模式的实现补充内容讲解该设计模式的优缺点对于一个设计模式我们关注、学习的知识点,不就是上面这些吗?不过我要重点提醒一下网友们,同一种设计模式的写法有多种,并不是说只有按某种写法来写才是这种设计模式。比方说适配器模式,我们关注适配器模式一定要关注的是什么是适配器模式不是怎么写适配器模式,不要认为某段代码不是按照适配器模式的写法写下来的它就不是适配器模式了,记住这一点,你在学习设计模式的时候一定会对代码中用到的设计模式有更深入的理解。1、深入理解Java虚拟机:JVM高级特性与最佳实践如果你不满足于做一个只会写ifelse的Java程序员,而是希望更进一步,我随便举几个例子吧:了解Java代码的底层运行机制定位性能问题对整个系统进行性能调优解决各种奇奇怪怪的线上线下问题更加高级别的,为自己的项目量身定做一款适合自己项目的虚拟机那么Java虚拟机是你必学的一门技术。《深入理解Java虚拟机:JVM高级特性与最佳实践》作者是周志明,这本书可以说是国内写得最好的有关Java虚拟机的书籍,近半年,前前后后这本书我起码看了有5遍。国内写虚拟机的书除了这本,其实还有一些其他的,我也买过,不过粗略看下来,很多内容也是《深入理解Java虚拟机:JVM高级特性与最佳实践》此书里面的。另外值得一提的是,《深入理解Java虚拟机:JVM高级特性与最佳实践》这本书,有电子版的,网上搜一下就能下载到了。不过建议有兴趣的朋友还是去买书看,电子版本下载到的一般是比较老的版本,相比最新修订版的《深入理解Java虚拟机:JVM高级特性与最佳实践》,有很多作者新补充的知识点是没有的。2、HotSpot实战所有的Java虚拟机都是遵循着Java虚拟机规范来的,市面上的Java虚拟机几十款,《深入理解Java虚拟机:JVM高级特性与最佳实践》一书里面讲的虚拟机并不针对某种特定的虚拟机,而是从Java虚拟机规范的角度来讲解Java虚拟机。我们平时使用的乃至商用的大多数Java虚拟机都是Sun公司的HotSpot,大家cmd进入命令行,使用”java-version”命令就可以看到了。如果希望在Java虚拟机规范的基础上更加深入地去理解虚拟机的一些细节是怎么实现的,就可以看一下《HotSpot实战》一书,作者是陈涛。不过由于HotSpot的源码都是C/C++写的,所以要求读者有非常好的C/C++基础,如果对这两门语言不是很熟悉的朋友,看这本书可能对你帮助不是很大。最后提一句,如果有兴趣的朋友,不妨先去网上下载一个openJDK,HotSpot的源码就在里面。3、Java并发编程实战这本书常常被列入Java程序员必读十大书籍排行榜前几位,不过个人不是很推荐这本书。《Java并发编程实战》作者是BrianGoetz,怎么说呢,这本书前前后后我也看了两遍左右,个人感受是:文字多代码少讲解多实践少我觉得这可能就是老外写书的特点吧,因为Java是北美国家(加拿大、美国)开发和维护的,所以老外对Java方方面面的理论知识体系都掌握得是非常清楚和透彻的。翻开这本书看,多线程什么用、什么是死锁、什么是竞争、什么是线程安全等等,方方面面的知识点都用大量的文字篇幅讲解,不免让人感觉十分枯燥,也难让读者有实质性的进步。我这本书看了两遍也属于一目十行意思,有兴趣的地方就重点看一下。无论如何,作为一本常常位于Jva程序员必读十大书籍排行榜前几名的书,还是一定要推荐给大家的。4、java多线程编程核心技术《Java多线程编程核心技术》作者高洪岩。想要学习多线程的朋友,这本书是我大力推荐的,我的个人博客里面二十多篇的多线程博文都是基于此书,并且在这本书的基础上进行提炼和总结而写出来的。此书和《Java并发编程实战》相反,这本书的特点是大篇幅的代码+小篇幅的精讲解,可能这和中国人写的书比较偏向实用主义的风格有关。本书关于线程安全、synchronized、Reentrant、Timer等等都用详细的代码进行了讲解,而且每个大知识点下的多个小知识点都会详细讲解到,非常有实践价值。有兴趣的朋友们,我相信只要你们跟着这本书里面的代码敲、运行、思考,三步走,对于多线程的使用与理解一定会进几大步。不过这本书的缺点就是对于Java并发包下的一些类像CountDownLatch、Semphore、CyclicBarrier、Future、Callable等都没有讲到,重点的CAS和AQS也没有触及,重点类的实现原理也没有提。当然,这很深入了,在学习了这本书之后如果能再去对这些知识进行一些学习、研究的话,你一定会慢慢成长为一个很厉害的多线程高手。5、EffectiveJava中文版这是唯一一本我没有买的书。初识这本书,是在我的博文Java代码优化(长期更新)里面,底下评论的时候有朋友提到了这本书,当时我说要去买,不过这两个月一直都没时间去逛书店,甚是遗憾,之后肯定会找时间去买这本书的。《EffectiveJava中文版》的作者是JoshuaBloch,这个人就很厉害了,他是谷歌的首席架构师,属于超级技术大牛级别了吧,呵呵。由于没有看过这本书,所以我不好发表评论,但是从这本书的知名度以及其作者的来头来看(多提一句,这本书也是Java之父JamesGosling博士推崇的一本书),我相信这一定是一本值得一看的好书。好的代码是每个Java程序员都应该去追求的,不是说我今天写一段好代码相比写一段烂代码对性能会有多大的提升,更多的应该是提升了代码的可读性以及可以规避许多潜在的、未知的问题,避免代码上线之后出问题而花时间去维护—-无论从时间成本、人力成本还是风险成本来说,这都是非常高的。6、深入分析JavaWeb技术内幕《深入分析JavaWeb技术内幕》,作者许令波,淘宝工程师。这本书我用一个字概括就是:全。真的非常全,HTTP、DNS、CDN、静态化、Jetty、Tomcat、Servlet、Spring、MyBatis等等,什么都有,涉及知识面非常广,但又不像专门精讲某个知识点的书籍一样讲得非常深入,感觉这本书就是尽量去用短的篇幅讲清楚一些JavaWeb使用到的技术的内幕,让读者对这些知识点的技术内幕有一个理性的认识。不过,尽管每个知识点的篇幅都不多,但是重点都基本讲到了,是一本让人真正有收获的书。如果想进一步了解这些技术的技术内幕,就要自己去买相关书籍或者自己上网查资料了,有种抛砖引玉,或者说师傅领进门、修行在个人的感觉。7、大型网站技术架构核心原理与案例分析一个字评价这本书,_;两个字评价这本书,很_;三个字评价这本书,非常_。呵呵,好了,再说下去可能别人以为我是水军了。《大型网站技术架构核心原理与案例分析》的作者是李智慧,原阿里巴巴技术专家。Java的大多数应用都是用在Web上的,现在只要稍微大型一点的Web应用,都一定是一个分布式系统,那么一个分布式系统用到了哪些技术?一个大型网站是如何从一个小型网站成长起来的?如何保证你的网站安全?分布式系统使用到了缓存,有哪些缓存?缓存的使用有哪些值得注意的事项?关于分布式的知识点,都在这本书里面有体现,只有你想不到,没有他写不到,而且写得非常易懂,基本属于看一两遍,再记一些笔记就知道是怎么一回事儿了。多看几遍,对分布式的理解一定会加深不少。而且里面不仅仅是分布式的知识,还非常接地气地写了如何做一个好的架构师,其实我认为这不仅仅是写给想做架构师的读者看的,就是给读者一些建议,如何更好地提出意见、如何更让别人关注你的声音、如何看到他人的优点,入木三分,让人获益匪浅。8、大型网站系统与Java中间件实践《大型网站系统与Java中间件实践》作者曾宪杰,是淘宝的技术总监,算起来应该在阿里有至少P8的级别了吧。这本书的部分内容和上面一本李智慧的《大型网站技术架构核心原理与案例分析》有所重合,像分布式系统的演化、CDN、CAP理论和BASE理论等等,这也更说明这些都是分布式系统或者说是一个大型网站重点关注的内容,当作一次再学习也不错。本书要突出的重点是中间件三个字,中间件是分布式系统中一个非常重要的东西,其最重要的作用应该就是解耦,降低模块与模块之间的强依赖,不同的模块之间的依赖度降低,便可以各自独立地开发自己的功能,这也可以说是软件工程发展的目标和驱动力。因此,本书有一部分的内容就是基于中间件,详细讲解了中间件与JMS的各种知识,适合对分布式系统比较熟悉并且想要往中间件方面有一定研究的读者。9、从Paxos到ZooKeeper分布式一致性原理与实践《从Paxos到ZooKeeper分布式一致性原理与实践》,作者倪超,阿里巴巴工程师。这本书是我最近在研读的一本书,和上面的《大型网站系统与Java中间件实践》一样,属于分布式组件的范畴,属于有些深入的内容,当然也是我自己的个人兴趣。当然,如果有志向做一个出色的大型网站架构师、公司的技术总监之类,这些知识当然是必须掌握的。本书从分布式系统基本理论开始讲起,讲到Paxos算法,最后慢慢引入到Zookeeper,循序渐进。当然,更多的我目前还不方便发表什么看法,因为这本书的第二张Paxos算法我都还没有弄懂(Paxos算法确实有些难以理解和不太易懂),接下来的章节还没有看下去。如果网友们所在的公司在使用Zookeeper,并且你又对Zookeeper感兴趣想要研究一下它的原理的,这本书将是不二之选。10、MySQL5.6从零开始学《MySQL5.6从零开始学》,作者刘增杰和李坤。作为一名Java程序员,我认为我们千万不要觉得数据库是DBA的事情,数据库对一个Java程序员来说也是必须掌握的一门知识,丰富的数据库性能优化经验是一个顶尖程序员必备技能。目前主流的数据库有Oracle和MySQL,当然推荐大家的是MySQL,主要原因我认为有两点:1、MySQL相比Oracle更轻量级、更小、安装和卸载更方便,SQL其实都是差不多的,如果想学数据库,学MySQL就可以了,在家里面可以自己方便地研究,如果你的公司使用Oracle,只要再用对比学习法,关注一下Oracle和MySQL的差别即可2、随着2009年阿里巴巴去IOE的运动的进行,目前国内的很多互联网公司都会选择MySQL作为它们使用的数据库,因为MySQL免费,所以既省钱又不需要出了问题就依赖甲骨文公司MySQL学习我推荐的是这本我自己学习看的《MySQL5.6从零开始学》,我是觉得挺好的这本书,书里面的知识点很细致、很全面,读者选择书籍的标准大多不就是这两点吗?11、Spring源码深度解析《Spring源码深度解析》,作者郝佳。Spring这个框架做得太好了,功能太强大了,以至于很多开发者都只知Spring,不知什么是工厂、什么是单例、什么是代理(我面试别人的真实体会)。这种功能强大的框架内部一定是很复杂的实现,这就导致一旦你的程序使用Spring,出了问题,可能是Error、可能是Exception、可能是程序运行结果不是你的预期的,出现诸如此类问题的时候,将会让你感到困惑,除了上网查资料或者问别人似乎没有更好的解决办法。研读Spring的源代码不失为一种很好的学习方法,我个人认为这有很多好处:理解框架内部的实现之后,可以主动去解决问题,而不需要依赖别人Spring框架内部实现用到了很多设计模式,很好的代码设计思路,这将会对你写代码、对你理解设计模式有很大的提高研究Spring框架将会大大增强你读代码的能力,我相信只要你能研究清楚Spring内部是如何实现的,其他任何一个框架的源代码都难不倒你总而言之,我认为读代码的能力是一个普通的程序员和一个好的程序员之间最大的差别之一,前者只会把别人写好的东西拿来用,后者不仅能用好,还清楚知道别人写好的东西底层是如何实现的,在出现问题的时候可以轻松解决。Spring源代码,个人推荐《Spring源码深度解析》一书,真要研究透并且写清楚Spring源代码,恐怕三四本书都不够,作者在近400页的篇幅中尽量去讲解Spring源代码是如何实现的,殊为不易,尽管无法讲得完全,但是相信作者的讲解配合上读者自己的研究,一定可以对Spring的实现有更深度的理解。以上就是我对Java高级部分应该看的书籍的推荐,希望可以对你有所帮助。说一点我的建议,我们学Java技术更重要的还是看视频教程,我们只有看更多的视频教程,不断的练习,在脑海当中产生深刻的记忆。我永远坚信我的一句话:书籍能诠释的东西毕竟有限。最后在这里推荐大家关注一下我的微信公众号:Java新手学习,给你准备了一套最新的Java基础精讲视频教程和Java系统学习路线,关注即可观看。
2023-07-15 07:40:351

一个程序会产生哪几个文件夹?

一个程序产生的文件夹如下:一、程序的组成部分Linux下程序大都是由以下几部分组成:二进制文件:也就是可以运行的程序文件库文件:就是通常我们见到的lib目录下的文件配置文件:帮助文档:通常是我们在Linux下用man命令查看的命令的文档二、Linux下程序的存放目录Linux程序的存放目录大致有三个地方:/etc, /bin, /sbin, /lib :系统启动就需要用到的程序,这些目录不能挂载额外的分区,必须在根文件系统的分区上/usr/bin,/usr/sbin,/usr/lib:操作系统核心功能,可以单独分区/usr/local/bin,/usr/local/sbin:/usr/local/lib:/usr/local/etc:/usr/local/man:这几个目录用于安装第三方程序,分别对应了二进制文件、库文件、配置文件、帮助文档的目录通常来说源码安装程序时,就安装在 /usr/local目录下原文地址:https://www.cnblogs.com/4545945a/p/11529744.html推荐文章ubuntu16.04环境下fatal error: lua.h: No such file or directoryDB2数据库建表报错MySQL、Oracle与DB2数据库差异jQueryrocketjQueryrocketjs文件替换PHP源文件编码与变量编码的判断PHP判断字符串所属编码:ASCII、GB2312、GBK、UTF-8、ISO-8859-1PHP的URL编码解码与原理、自定义实现Odoo13_前端图标按钮实例Odoo13_向导应用之软删除macOS一条命令查看当前wifi密码编译redis-5.0.8报错/usr/bin/ld: cannot find -latomic解决方法频繁调用ConcurrentLinkedQueue类的offer和remove方法会内存泄露记一次排查问题用到工具【jvisualvm】堆查器使用的内存不足开发规范各种http报错的报错的状态码的分析Springboot整合ElasticsearchWang u2764ufe0f Free Fast Stable Best Just try it_v2....md5表空间create_index非额度合同和额度合同如何在linux中查找python安装包的路径Golang中的SingleFlight与CyclicBarrierlinux安装protocprotobuf 的优缺点Xshell 连接 VirtualBox限制 input 输入框只能输入纯数字
2023-07-15 07:40:421

并发编程解惑之线程

主要内容: 进程是资源分配的最小单位,每个进程都有独立的代码和数据空间,一个进程包含 1 到 n 个线程。线程是 CPU 调度的最小单位,每个线程有独立的运行栈和程序计数器,线程切换开销小。 Java 程序总是从主类的 main 方法开始执行,main 方法就是 Java 程序默认的主线程,而在 main 方法中再创建的线程就是其他线程。在 Java 中,每次程序启动至少启动 2 个线程。一个是 main 线程,一个是垃圾收集线程。每次使用 Java 命令启动一个 Java 程序,就相当于启动一个 JVM 实例,而每个 JVM 实例就是在操作系统中启动的一个进程。 多线程可以通过继承或实现接口的方式创建。 Thread 类是 JDK 中定义的用于控制线程对象的类,该类中封装了线程执行体 run() 方法。需要强调的一点是,线程执行先后与创建顺序无关。 通过 Runnable 方式创建线程相比通过继承 Thread 类创建线程的优势是避免了单继承的局限性。若一个 boy 类继承了 person 类,boy 类就无法通过继承 Thread 类的方式来实现多线程。 使用 Runnable 接口创建线程的过程:先是创建对象实例 MyRunnable,然后将对象 My Runnable 作为 Thread 构造方法的入参,来构造出线程。对于 new Thread(Runnable target) 创建的使用同一入参目标对象的线程,可以共享该入参目标对象 MyRunnable 的成员变量和方法,但 run() 方法中的局部变量相互独立,互不干扰。 上面代码是 new 了三个不同的 My Runnable 对象,如果只想使用同一个对象,可以只 new 一个 MyRunnable 对象给三个 new Thread 使用。 实现 Runnable 接口比继承 Thread 类所具有的优势: 线程有新建、可运行、阻塞、等待、定时等待、死亡 6 种状态。一个具有生命的线程,总是处于这 6 种状态之一。 每个线程可以独立于其他线程运行,也可和其他线程协同运行。线程被创建后,调用 start() 方法启动线程,该线程便从新建态进入就绪状态。 NEW 状态(新建状态) 实例化一个线程之后,并且这个线程没有开始执行,这个时候的状态就是 NEW 状态: RUNNABLE 状态(就绪状态): 阻塞状态有 3 种: 如果一个线程调用了一个对象的 wait 方法, 那么这个线程就会处于等待状态(waiting 状态)直到另外一个线程调用这个对象的 notify 或者 notifyAll 方法后才会解除这个状态。 run() 里的代码执行完毕后,线程进入终结状态(TERMINATED 状态)。 线程状态有 6 种:新建、可运行、阻塞、等待、定时等待、死亡。 我们看下 join 方法的使用: 运行结果: 我们来看下 yield 方法的使用: 运行结果: 线程与线程之间是无法直接通信的,A 线程无法直接通知 B 线程,Java 中线程之间交换信息是通过共享的内存来实现的,控制共享资源的读写的访问,使得多个线程轮流执行对共享数据的操作,线程之间通信是通过对共享资源上锁或释放锁来实现的。线程排队轮流执行共享资源,这称为线程的同步。 Java 提供了很多同步操作(也就是线程间的通信方式),同步可使用 synchronized 关键字、Object 类的 wait/notifyAll 方法、ReentrantLock 锁、无锁同步 CAS 等方式来实现。 ReentrantLock 是 JDK 内置的一个锁对象,用于线程同步(线程通信),需要用户手动释放锁。 运行结果: 这表明同一时间段只能有 1 个线程执行 work 方法,因为 work 方法里的代码需要获取到锁才能执行,这就实现了多个线程间的通信,线程 0 获取锁,先执行,线程 1 等待,线程 0 释放锁,线程 1 继续执行。 synchronized 是一种语法级别的同步方式,称为内置锁。该锁会在代码执行完毕后由 JVM 释放。 输出结果跟 ReentrantLock 一样。 Java 中的 Object 类默认是所有类的父类,该类拥有 wait、 notify、notifyAll 方法,其他对象会自动继承 Object 类,可调用 Object 类的这些方法实现线程间的通信。 除了可以通过锁的方式来实现通信,还可通过无锁的方式来实现,无锁同 CAS(Compare-and-Swap,比较和交换)的实现,需要有 3 个操作数:内存地址 V,旧的预期值 A,即将要更新的目标值 B,当且仅当内存地址 V 的值与预期值 A 相等时,将内存地址 V 的值修改为目标值 B,否则就什么都不做。 我们通过计算器的案例来演示无锁同步 CAS 的实现方式,非线程安全的计数方式如下: 线程安全的计数方式如下: 运行结果: 线程安全累加的结果才是正确的,非线程安全会出现少计算值的情况。JDK 1.5 开始,并发包里提供了原子操作的类,AtomicBoolean 用原子方式更新的 boolean 值,AtomicInteger 用原子方式更新 int 值,AtomicLong 用原子方式更新 long 值。 AtomicInteger 和 AtomicLong 还提供了用原子方式将当前值自增 1 或自减 1 的方法,在多线程程序中,诸如 ++i 或 i++ 等运算不具有原子性,是不安全的线程操作之一。 通常我们使用 synchronized 将该操作变成一个原子操作,但 JVM 为此种操作提供了原子操作的同步类 Atomic,使用 AtomicInteger 做自增运算的性能是 ReentantLock 的好几倍。 上面我们都是使用底层的方式实现线程间的通信的,但在实际的开发中,我们应该尽量远离底层结构,使用封装好的 API,例如 J.U.C 包(java.util.concurrent,又称并发包)下的工具类 CountDownLath、CyclicBarrier、Semaphore,来实现线程通信,协调线程执行。 CountDownLatch 能够实现线程之间的等待,CountDownLatch 用于某一个线程等待若干个其他线程执行完任务之后,它才开始执行。 CountDownLatch 类只提供了一个构造器: CountDownLatch 类中常用的 3 个方法: 运行结果: CyclicBarrier 字面意思循环栅栏,通过它可以让一组线程等待至某个状态之后再全部同时执行。当所有等待线程都被释放以后,CyclicBarrier 可以被重复使用,所以有循环之意。 相比 CountDownLatch,CyclicBarrier 可以被循环使用,而且如果遇到线程中断等情况时,可以利用 reset() 方法,重置计数器,CyclicBarrier 会比 CountDownLatch 更加灵活。 CyclicBarrier 提供 2 个构造器: 上面的方法中,参数 parties 指让多少个线程或者任务等待至 barrier 状态;参数 barrierAction 为当这些线程都达到 barrier 状态时会执行的内容。 CyclicBarrier 中最重要的方法 await 方法,它有 2 个重载版本。下面方法用来挂起当前线程,直至所有线程都到达 barrier 状态再同时执行后续任务。 而下面的方法则是让这些线程等待至一定的时间,如果还有线程没有到达 barrier 状态就直接让到达 barrier 的线程执行任务。 运行结果: CyclicBarrier 用于一组线程互相等待至某个状态,然后这一组线程再同时执行,CountDownLatch 是不能重用的,而 CyclicBarrier 可以重用。 Semaphore 类是一个计数信号量,它可以设定一个阈值,多个线程竞争获取许可信号,执行完任务后归还,超过阈值后,线程申请许可信号时将会被阻塞。Semaphore 可以用来 构建对象池,资源池,比如数据库连接池。 假如在服务器上运行着若干个客户端请求的线程。这些线程需要连接到同一数据库,但任一时刻只能获得一定数目的数据库连接。要怎样才能够有效地将这些固定数目的数据库连接分配给大量的线程呢? 给方法加同步锁,保证同一时刻只能有一个线程去调用此方法,其他所有线程排队等待,但若有 10 个数据库连接,也只有一个能被使用,效率太低。另外一种方法,使用信号量,让信号量许可与数据库可用连接数为相同数量,10 个数据库连接都能被使用,大大提高性能。 上面三个工具类是 J.U.C 包的核心类,J.U.C 包的全景图就比较复杂了: J.U.C 包(java.util.concurrent)中的高层类(Lock、同步器、阻塞队列、Executor、并发容器)依赖基础类(AQS、非阻塞数据结构、原子变量类),而基础类是通过 CAS 和 volatile 来实现的。我们尽量使用顶层的类,避免使用基础类 CAS 和 volatile 来协调线程的执行。J.U.C 包其他的内容,在其他的篇章会有相应的讲解。 Future 是一种异步执行的设计模式,类似 ajax 异步请求,不需要同步等待返回结果,可继续执行代码。使 Runnable(无返回值不支持上报异常)或 Callable(有返回值支持上报异常)均可开启线程执行任务。但是如果需要异步获取线程的返回结果,就需要通过 Future 来实现了。 Future 是位于 java.util.concurrent 包下的一个接口,Future 接口封装了取消任务,获取任务结果的方法。 在 Java 中,一般是通过继承 Thread 类或者实现 Runnable 接口来创建多线程, Runnable 接口不能返回结果,JDK 1.5 之后,Java 提供了 Callable 接口来封装子任务,Callable 接口可以获取返回结果。我们使用线程池提交 Callable 接口任务,将返回 Future 接口添加进 ArrayList 数组,最后遍历 FutureList,实现异步获取返回值。 运行结果: 上面就是异步线程执行的调用过程,实际开发中用得更多的是使用现成的异步框架来实现异步编程,如 RxJava,有兴趣的可以继续去了解,通常异步框架都是结合远程 HTTP 调用 Retrofit 框架来使用的,两者结合起来用,可以避免调用远程接口时,花费过多的时间在等待接口返回上。 线程封闭是通过本地线程 ThreadLocal 来实现的,ThreadLocal 是线程局部变量(local vari able),它为每个线程都提供一个变量值的副本,每个线程对该变量副本的修改相互不影响。 在 JVM 虚拟机中,堆内存用于存储共享的数据(实例对象),也就是主内存。Thread Local .set()、ThreadLocal.get() 方法直接在本地内存(工作内存)中写和读共享变量的副本,而不需要同步数据,不用像 synchronized 那样保证数据可见性,修改主内存数据后还要同步更新到工作内存。 Myabatis、hibernate 是通过 threadlocal 来存储 session 的,每一个线程都维护着一个 session,对线程独享的资源操作很方便,也避免了线程阻塞。 ThreadLocal 类位于 Thread 线程类内部,我们分析下它的源码: ThreadLocal 和 Synchonized 都用于解决多线程并发访问的问题,访问多线程共享的资源时,Synchronized 同步机制采用了以时间换空间的方式,提供一份变量让多个线程排队访问,而 ThreadLocal 采用了以空间换时间的方式,提供每个线程一个变量,实现数据隔离。 ThreadLocal 可用于数据库连接 Connection 对象的隔离,使得每个请求线程都可以复用连接而又相互不影响。 在 Java 里面,存在强引用、弱引用、软引用、虚引用。我们主要来了解下强引用和弱引用: 上面 a、b 对实例 A、B 都是强引用 而上面这种情况就不一样了,即使 b 被置为 null,但是 c 仍然持有对 C 对象实例的引用,而间接的保持着对 b 的强引用,所以 GC 不会回收分配给 b 的空间,导致 b 无法回收也没有被使用,造成了内存泄漏。这时可以通过 c = null; 来使得 c 被回收,但也可以通过弱引用来达到同样目的: 从源码中可以看出 Entry 里的 key 对 ThreadLocal 实例是弱引用: Entry 里的 key 对 ThreadLocal 实例是弱引用,将 key 值置为 null,堆中的 ThreadLocal 实例是可以被垃圾收集器(GC)回收的。但是 value 却存在一条从 Current Thread 过来的强引用链,只有当当前线程 Current Thread 销毁时,value 才能被回收。在 threadLocal 被设为 null 以及线程结束之前,Entry 的键值对都不会被回收,出现内存泄漏。为了避免泄漏,在 ThreadLocalMap 中的 set/get Entry 方法里,会对 key 为 null 的情况进行判断,如果为 null 的话,就会对 value 置为 null。也可以通过 ThreadLocal 的 remove 方法(类似加锁和解锁,最后 remove 一下,解锁对象的引用)直接清除,释放内存空间。 总结来说,利用 ThreadLocal 来访问共享数据时,JVM 通过设置 ThreadLocalMap 的 Key 为弱引用,来避免内存泄露,同时通过调用 remove、get、set 方法的时候,回收弱引用(Key 为 null 的 Entry)。当使用 static ThreadLocal 的时候(如上面的 Spring 多数据源),static 变量在类未加载的时候,它就已经加载,当线程结束的时候,static 变量不一定会被回收,比起普通成员变量使用的时候才加载,static 的生命周期变长了,若没有及时回收,容易产生内存泄漏。 使用线程池,可以重用存在的线程,减少对象创建、消亡的开销,可控制最大并发线程数,避免资源竞争过度,还能实现线程定时执行、单线程执行、固定线程数执行等功能。 Java 把线程的调用封装成了一个 Executor 接口,Executor 接口中定义了一个 execute 方法,用来提交线程的执行。Executor 接口的子接口是 ExecutorService,负责管理线程的执行。通过 Executors 类的静态方法可以初始化 ExecutorService 线程池。Executors 类的静态方法可创建不同类型的线程池: 但是,不建议使用 Executors 去创建线程池,而是通过 ThreadPoolExecutor 的方式,明确给出线程池的参数去创建,规避资源耗尽的风险。 如果使用 Executors 去创建线程池: 最佳的实践是通过 ThreadPoolExecutor 手动地去创建线程池,选取合适的队列存储任务,并指定线程池线程大小。通过线程池实现类 ThreadPoolExecutor 可构造出线程池的,构造函数有下面几个重要的参数: 参数 1:corePoolSize 线程池核心线程数。 参数 2:workQueue 阻塞队列,用于保存执行任务的线程,有 4 种阻塞队列可选: 参数 3:maximunPoolSize 线程池最大线程数。如果阻塞队列满了(有界的阻塞队列),来了一个新的任务,若线程池当前线程数小于最大线程数,则创建新的线程执行任务,否则交给饱和策略处理。如果是无界队列就不存在这种情况,任务都在无界队列里存储着。 参数 4:RejectedExecutionHandler 拒绝策略,当队列满了,而且线程达到了最大线程数后,对新任务采取的处理策略。 有 4 种策略可选: 最后,还可以自定义处理策略。 参数 5:ThreadFactory 创建线程的工厂。 参数 6:keeyAliveTime 线程没有任务执行时最多保持多久时间终止。当线程池中的线程数大于 corePoolSize 时,线程池中所有线程中的某一个线程的空闲时间若达到 keepAliveTime,则会终止,直到线程池中的线程数不超过 corePoolSize。但如果调用了 allowCoreThread TimeOut(boolean value) 方法,线程池中的线程数就算不超过 corePoolSize,keepAlive Time 参数也会起作用,直到线程池中的线程数量变为 0。 参数 7:TimeUnit 配合第 6 个参数使用,表示存活时间的时间单位最佳的实践是通过 ThreadPoolExecutor 手动地去创建线程池,选取合适的队列存储任务,并指定线程池线程大小。 运行结果: 线程池创建线程时,会将线程封装成工作线程 Worker,Worker 在执行完任务后,还会不断的去获取队列里的任务来执行。Worker 的加锁解锁机制是继承 AQS 实现的。 我们来看下 Worker 线程的运行过程: 总结来说,如果当前运行的线程数小于 corePoolSize 线程数,则获取全局锁,然后创建新的线程来执行任务如果运行的线程数大于等于 corePoolSize 线程数,则将任务加入阻塞队列 BlockingQueue 如果阻塞队列已满,无法将任务加入 BlockingQueue,则获取全局所,再创建新的线程来执行任务 如果新创建线程后使得线程数超过了 maximumPoolSize 线程数,则调用 Rejected ExecutionHandler.rejectedExecution() 方法根据对应的拒绝策略处理任务。 CPU 密集型任务,线程执行任务占用 CPU 时间会比较长,应该配置相对少的线程数,避免过度争抢资源,可配置 N 个 CPU+1 个线程的线程池;但 IO 密集型任务则由于需要等待 IO 操作,线程经常处于等待状态,应该配置相对多的线程如 2*N 个 CPU 个线程,A 线程阻塞后,B 线程能马上执行,线程多竞争激烈,能饱和的执行任务。线程提交 SQL 后等待数据库返回结果时间较长的情况,CPU 空闲会较多,线程数应设置大些,让更多线程争取 CPU 的调度。
2023-07-15 07:40:491

Java获取字符串中字母出现的个数

这个有什么难度呢?
2023-07-15 07:40:574

如何得到线程执行完之后返回的结果

主线程抛出一个子线程异步处理一些东西,这时主线程要等待子线程运行完成再完成(其实我是为了统计运行时间的)。这里抛出的子线程可能递归的调用自己,就是再抛一个他的子线程出来,但是到底一共抛多少,事先是不知道的。应用场景:1)多线程扫描文件夹内的文件,遇到文件夹内有子文件夹,要递归调用扫描线程的,等到全部扫描完成后,返回结果,显示;2)多线程快速排序,第一次肯定是单线程的,第一次排序完成后,会分两半,这两半多线程排,递归调用了这个排序线程,这两半很有可能,极大有可能再各分两半,也就是会有4个子线程的子线程再排序。我试过网上的那个CountDownLatch,但是他只能实现定义好子线程的数量,但是在以上两种情景下,事先你是不知道会有多少个子线程的!PS:在某种需求中,比如一个大型的任务,常常需要分配好多子任务去执行,只有当所有子任务都执行完成时候,才能执行主任务,这时候,就可以选择CyclicBarrier了。这个貌似也要在开始的时候设定总线程数:CyclicBarrier(intparties)这个和countDownLatch就差不多了呢!你觉得呢问题补充:niuzai写道亲,CyclicBarrier可能是你想要的。PS:在某种需求中,比如一个大型的任务,常常需要分配好多子任务去执行,只有当所有子任务都执行完成时候,才能执行主任务,这时候,就可以选择CyclicBarrier了。我再来看看~~试试看!问题补充:niuzai写道亲,CyclicBarrier这个东东是可以动态重置个数的,而countDownLatch是一次性的。只不过大多数例子CyclicBarrier初始化了个数罢了,实质上它是可以动态改变的~嗯我试了下,多线程快排,小数据量还好,顺利执行了,但是数多了后,会建N多线程等待,会outofmemory,呵呵!不过证明这个方法是可以的!问题补充:niuzai写道亲,那你就结合线程池操作,设置线程数目上限。不要每个任务就产生一个线程咯~产生新的线程是很耗内存的,线程太多当然就内存溢出咯~嗯你说的很对!要结合线程池的!
2023-07-15 07:41:051

java并发框架有哪些

Java并发框架java.util.concurrent是JDK5中引入到标准库中的(采用的是Doug Lea的并发库)。该包下的类可以分为这么块:Executors1)接口:Executor(例子涉及):用来执行提交的Runnable任务的对象。是一个简单的标准化接口,用来定义包括线程池、异步IO、轻量级任务框架等等。任务可以由一个新创建的线程、一个已有任务执行线程、或是线程直接调用execute()来执行,可以串行也可并行执行,取决于使用的是哪个Executor具体类。ExecutorService(例子涉及):Executor的子接口,提供了一个更加具体的异步任务执行框架:提供了管理结束的方法,以及能够产生Future以跟踪异步任务进程的方法。一个ExcutorService管理着任务队列和任务调度。ScheduledExecutorService(例子涉及):ExecutorService的子接口,增加了对延迟和定期任务执行的支持。Callable(例子涉及):一个返回结果或抛出异常的任务,实现类需要实现其中一个没有参数的叫做call的方法。Callabe类似于Runnable,但是Runnable不返回结果且不能抛出checked exception。ExecutorService提供了安排Callable异步执行的方法。Future(例子涉及):代表一个异步计算的结果(由于是并发执行,结果可以在一段时间后才计算完成,其名字可能也就是代表这个意思吧),提供了可判断执行是否完成以及取消执行的方法。2)实现:ThreadPoolExecutor和ScheduledThreadPoolExecutor:可配置线程池(后者具备延迟或定期调度功能)。Executors(例子涉及):提供Executor、ExecutorService、ScheduledExecutorService、ThreadFactory以及Callable的工厂方法及工具方法。FutureTask:对Future的实现ExecutorCompletionService(例子涉及):帮助协调若干(成组)异步任务的处理。Queues非阻塞队列:ConcurrentLinkedQueue类提供了一个高效可伸缩线程安全非阻塞FIFO队列。阻塞队列:BlockingQueue接口,有五个实现类:LinkedBlockingQueue(例子涉及)、ArrayBlockingQueue、SynchronousQueue、PriorityBlockingQueue和DelayQueue。他们对应了不同的应用环境:生产者/消费者、消息发送、并发任务、以及相关并发设计。TimingTimeUnit类(例子涉及):提供了多种时间粒度(包括纳秒)用以表述和控制基于超时的操作。Synchronizers 提供特定用途同步语境Semaphore(例子涉及):计数信号量,这是一种经典的并发工具。CountDownLatch(例子涉及):简单的倒计数同步工具,可以让一个或多个线程等待直到另外一些线程中的一组操作处理完成。CyclicBarrier(例子涉及):可重置的多路同步工具,可重复使用(CountDownLatch是不能重复使用的)。Exchanger:允许两个线程在汇合点交换对象,在一些pipeline设计中非常有用。Concurrent Collections除队列外,该包还提供了一些为多线程上下文设计的集合实现:ConcurrentHashMap、CopyOnWriteArrayList及CopyOnWriteArraySet。注意:"Concurrent"前缀的类有别于"synchronized"前缀的类。“concurrent”集合是线程安全的,不需要由单排斥锁控制的(无锁的)。以ConcurrentHashMap为例,允许任何数量的并发读及可调数量的并发写。“Synchronized”类则一般通过一个单锁来防止对集合的所有访问,开销大且伸缩性差。
2023-07-15 07:41:141

如何判断线程池里的线程全部执行完毕

------解决方案--------------------------------------------------------主线程做个while true循环判断所有的子线程!isAlive()------解决方案--------------------------------------------------------不知道你的线程池的实现是自写还是使用JDK提供的java.util.concurrent.ThreadPoolExecutor。如果是JDK提供的线程池。可以去判断getPoolSize()是否等于或者小于池的核心线程数量corePoolSize。当然这种情况下也存在陷阱,一就是核心线程数量无法确定是否在空闲状态,只有将corePoolSize设置为0,才能正确判断。二就是线程池对空闲线程的销毁存在一个keepAliveTime,只有要将keepAliveTime减小到你getPoolSize的频率时,可能才能正确判断。并且如果使用ThreadPoolExecutor,对于池中的线程,你无法针对某一个线程进行操作。我的感觉,你现在的需求不符合使用线程池的需求,你需要的是一个线程管理类而不是池。------解决方案--------------------------------------------------------java.util.concurrent.CyclicBarrier一个同步辅助类,它允许一组线程互相等待,直到到达某个公共屏障点 (common barrier point)。在涉及一组固定大小的线程的程序中,这些线程必须不时地互相等待,此时 CyclicBarrier 很有用。因为该 barrier 在释放等待线程后可以重用。牢记一点:当要解决任何线程问题时,优先考虑api提供的工具。------解决方案--------------------------------------------------------顶四楼。不清楚主线程是不是可以挂起,如果可以,可以在子线程可行的位置将主线程挂起,当子线程逻辑结束后,再将主线程唤醒。仅做猜测,不可定论。这好办啊
2023-07-15 07:42:021

java并发包源码怎么读

下个jdk啊,都是带源码的
2023-07-15 07:42:111

java要学到什么程度才能胜任工作

Java作为面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用的两个特征。也正是由于其简单性、可移植性、安全性、动态性等特点,Java成为了服务器端的顶梁柱,保护着网站的一方安全。既然Java语言这么优秀,那么,如果想要以java去找工作,一个Java初学者要学多少Java知识,才能找到第一份Java工作呢?首先我们先要了解一下在工作过程中需要用到的java基础知识有哪些:1、synchronizedstatic修饰类和方法有什么区别?2、HashMap的原理,底层数据结构,rehash的过程,指针碰撞问题?3、HashMap的线程安全问题,为什么会产生这样的线程安全问题?3、ConcurrentHashMap的数据结构,底层原理,put和get是否线程安全?5、JavaIO的一些内容,包括NIO,BIO等?如果以上的基础知识大家能够运用自如,也就是说工作过程中做一些基本的事情还是可以的,但是是远远不过的,如果想要在工作过程中有自己的一席之地还是要学会以下几点,才能够勉强进入企业工作。一、Java线程池的构造方法,里面参数的含义,以及原理:1、volatile和ThreadLocal解决了什么问题2、CAS在Java中的具体实现3、Java虚拟机的构成,以及一个Java对象的生命周期,还有堆栈和方法区中存储的内容4、JVM的GC过程,包括一些实际问题的分析,比如说明一个现象,让你分析可能是什么原因会导致这样的问题,应该如何对JVM参数进行调优5、synchronized和Lock的区别,以及底层实现原理6、FullGC和MinorGC触发的条件7、GCRoots的选择8、jmap,jstat,jstack等的使用场景,MAT等9、ClassLoader的加载过程10、CountDownLatch、CyclicBarrier和Semaphore等11、Java8的新特性等二、数据库:这里的数据库包含两种,一种一般是MySQL,另外是NoSql数据库,包括Redis、MongoDB等。一般会问的问题有:1、innerjoin和leftjoin等的区别2、SQL调优,explain,profile等3、InnoDB和Myisam的区别4、ACID5、数据库的事务隔离级别,以及他们分别能解决什么问题6、Redis的几种数据结构7、Redis是单线程还是多线程8、Redis的持久化9、悲观锁和乐观锁的含义10最左前缀索引,索引的数据结构,聚簇索引等(这块还没搞明白)三、框架因为spring是我们常用的框架,所以这块的内容会问的比较多,也会比较细。1、Spring的两大特性(IoC和AOP)2、Spring的bean的生命周期3、Spring是如何解决Bean的循环引用问题的4、AOP的两种实现方式,以及两者的区别(这里其实使用了动态代理,具体动态代理分为两种,一种是JDK的动态代理,主要使用的是JDK的反射,还有一种是CGLib,两者区别可以自己搜索,文章比较多)5、AOP一般的使用场景6、Spring的事务原理MyBatis:这块问到的比较简单些:1、$和#的区别2、MyBatis和Hibernate的区别3、源码,一般问的比较少Dubbo:因为平时自己用到了Dubbo,所以这块会有问到:1、RPC的原理2、Dubbo是如何完成远程调用的3、Dubbo如何进行调优4、Dubbo的通信协议5、Dubbo是如何实现负载均衡的ZooKeeper:1、ZK的使用场景2、ZK的选举机制3、ZK的节点类型4、一致性Hash原理数据结构和算法:这块的内容是基础,如果面试官怀疑你的能力,一般一会问到这部分内容,比如树的遍历、快速排序等。linux:一般会问一些命令的使用,然后会举一个实际的场景,让你用命令去排查问题,这块自己不是很熟,需要尽快加强。随着java的普及,懂Java的人越来越多,企业也会对求职者提出更高的要求,他们更希望招聘一些马上能上手工作的,所以倾向于招聘一些有项目开发经验的,这也是为什么那么多的大学计算机专业毕业的大学生找不到工作的原因,所以越来越多的大学生才会选择毕业前后参加一些专业的Java培训班来增加实战经验。只有增加自我实力才能出于不败之地。
2023-07-15 07:42:351

java 7的新特性

Oracle在其官方网站上公布了《Java SE 7 Features and Enhancements 》,其中详细介绍了Java SE 7 中所有主要的新特性和功能增强,具体内容如下: 1.二进制形式的字面值表示2.在数值类型的字面值中使用下划线分隔符联接3.创建泛型实例时自动类型推断4.switch-case语句支持字符串类型 5.新增try-with-resources语句 6.单个catch子句同时捕获多种异常类型 7.改进使用带泛型可变参数的方法时的编译器警告和错误提示机制 1.新增javax.swing.JLayer类,一个灵活而且功能强大的Swing组件修饰器。它使你能够直接利用组件和组件的事件响应而无需修改底层组件。你可以点击查看如何使用JLayer修饰组件。2.NimbusLook&Feel(L&F)从包com.sun.java.swing移动到标准的API包javax.swing;详细信息请查看javax.swing.plaf.nimbus。尽管它不是默认的L&F,但是现在你可以非常方便地使用它了。你可以查看Java教程中NimbusLookandFeel部分的详细信息,也可以在你的程序中运行三个使用Nimbus的简单方法的代码示例。3.在以前的版本中,在同一个容器中混合使用重量级的AWT组件和轻量级的Swing组件可能会引发某些问题。不过,现在你可以在JavaSE7完美地混合使用它们了。你可以点击这里查看相关文章。4.JavaSE7支持以指定的透明度或非矩形的方式来显示窗体,你可以点击这里查看Java教程中关于如何创建带有指定透明度和非矩形的窗体的部分内容。5.类javax.swing.JColorChooser中新增了对以HSV方式来表现RGB色彩模型的支持。HSV和HSL是两种最常见的用于表示RGB色彩模型的表示方式。它们均表示色调、饱和度、亮度三个参数,不过取值形式不同。HSL的三个参数的取值范围均为0-255,HSV的三个参数的取值范围分别为0°-360°、0.0-1.0、0.0-1.0。 1.包java.nio.file以及相关联的包java.nio.file.attribute提供对文件IO以及访问文件系统更全面的支持。JDK7也支持zip压缩格式的文件系统。你可以参考以下资源获得更多信息:a)你可以点击查看Java教程中关于文件I/O(NIO2.0特性)的部分内容;nio表示非阻塞式的IO(non-blockingI/O)。b)开发一个自定义的文件系统提供者 。c)zip压缩格式的文件系统提供者 。d)目录%JAVA_HOME%/sample/nio/chatserver/下含有包括java.nio.file包在内的新API的演示示例。e)目录%JAVA_HOME%/demo/nio/zipfs/下含有NIO2.0网络文件系统的演示示例。 1.新增ECDSA/ECDH等基于ECC加密算法的支持,详情查看Java加密体系结构中供应商SunEC提供支持的算法的部分内容。2.禁用了MD2等一些弱加密算法,JavaSE7提供一种机制,用于在处理证书路径或与TLS交互时拒绝使用指定的加密算法。详情查看Java公共密钥程序员指南中的附录D:禁用指定的加密算法和Java安全套接字扩展中的禁用加密算法。3.对Java安全套接字扩展(JavaSecureSocketExtension)中的SSL/TLS进行了一系列增强和完善。 1.基于类java.util.concurrent.ForkJoinPool的fork/join框架,作为接口java.util.concurrent.Executor的一个实现,它被用来高效地运行工作线程池中的大量任务。其中还使用了一种名为work-stealing的技术,它可以充分利用多处理器来保证所有的工作线程一直正常工作。详情查看Java教程中的Fork/Join部分。目录%JAVA_HOME%/sample/forkjoin/中包含fork/join的演示示例。2.新增java.util.concurrent.ThreadLocalRandom类,它消除了使用伪随机数的线程之间的竞争。在多线程并发访问的情况下,使用ThreadLocalRandom比使用Math.random()可以减少并发线程之间的竞争,从而获得更好的性能。例如:a) intr=ThreadLocalRandom.current().nextInt(4,77);b) //将返回一个4-77之间的随机整数(不包含77)。3.新增java.util.concurrent.Phaser类,它是一个新的类似于java.util.concurrent.CyclicBarrier的线程同步障碍辅助工具类(它允许一组线程互相等待,直到到达某个公共屏障点)。 1.一个新的基于XRender的渲染管道能够提供改进的图形运行性能,以支持现在的基于DirectX11的桌面应用。默认情况下,这个渲染管道并未启用,不过你可以使用命令行设置属性-Dsun.java2d.xrender=true来启用它。2.现在JDK可以通过诸如GraphicsEnvironment.getAvailableFontFamilyNames等方法来枚举并显示系统中已安装的OpenType/CFF字体了,并且这些字体都可以被方法Font.createFont识别。你可以查看Java教程选择指定的字体。3.类java.awt.font.TextLayout现在可以支持西藏文字的脚本了。4.在Windows和Solaris操作系统中,文件fontconfig.properties中静态指定了JDK可以使用的逻辑字体。不过,在多数Linux系统的实现中,并没有保证在特定的语言环境下对特定字体表现的支持。在JavaSE7中,libfontconfig可选择在「未识别」的Linux平台上使用的逻辑字体。更多信息可以查看Fontconfig。 1.JavaSE7现在已经更新JavaAPIforXMLProcessing(JAXP)至1.4.5版本,与以前的版本相比,该版本修复了许多bug,并且做了许多的改进,尤其是在一致性、安全性和性能方面。虽然JAXP仍然处于1.4版本,不过StAX已经升级到了1.2版本。更多信息你可以查看JAXP1.4.5发行说明以及JAXP1.4.5更新日志。2.JavaSE7更新JavaArchitectureforXMLBinding(JAXB)至2.2.3版本,详情查看2.2以上版本的JAXB更新日志。3.JavaSE7更新JavaAPIforXMLWebServices(JAX-WS)至2.2.4版本。详情查看2.2以上版本的JAX-WS更新日志。 1.java虚拟机支持非Java语言2.G1(Garbage-First)垃圾收集器3.JavaHotSpot虚拟机性能增强 1.支持使用try-with-resources语句进行自动的资源释放,包括连接、语句和结果集2.支持RowSet1.1
2023-07-15 07:42:541

Java编程题:三线程接力

只是简单控制的话,用不到线程啊
2023-07-15 07:43:105

如何设置当子任务全部完成后,主任务自动下一步

主线程抛出一个子线程异步处理一些东西,这时主线程要等待子线程运行完成再完成(其实我是为了统计运行时间的)。这里抛出的子线程可能递归的调用自己,就是再抛一个他的子线程出来,但是到底一共抛多少,事先是不知道的。应用场景:1)多线程扫描文件夹内的文件,遇到文件夹内有子文件夹,要递归调用扫描线程的,等到全部扫描完成后,返回结果,显示;2)多线程快速排序,第一次肯定是单线程的,第一次排序完成后,会分两半,这两半多线程排,递归调用了这个排序线程,这两半很有可能,极大有可能再各分两半,也就是会有4个子线程的子线程再排序。我试过网上的那个 CountDownLatch ,但是他只能实现定义好子线程的数量,但是在以上两种情景下,事先你是不知道会有多少个子线程的!PS:在某种需求中,比如一个大型的任务,常常需要分配好多子任务去执行,只有当所有子任务都执行完成时候,才能执行主任务,这时候,就可以选择CyclicBarrier了。这个貌似也要在开始的时候设定总线程数:CyclicBarrier(int parties)这个和countDownLatch就差不多了呢!你觉得呢 问题补充:niuzai 写道亲,CyclicBarrier可能是你想要的。PS:在某种需求中,比如一个大型的任务,常常需要分配好多子任务去执行,只有当所有子任务都执行完成时候,才能执行主任务,这时候,就可以选择CyclicBarrier了。我再来看看~~试试看! 问题补充:niuzai 写道亲,CyclicBarrier这个东东是可以动态重置个数的,而countDownLatch是一次性的。只不过大多数例子CyclicBarrier初始化了个数罢了,实质上它是可以动态改变的~ 嗯 我试了下,多线程快排,小数据量还好,顺利执行了,但是数多了后,会建N多线程等待,会outofmemory,呵呵!不过证明这个方法是可以的! 问题补充:niuzai 写道亲,那你就结合线程池操作,设置线程数目上限。不要每个任务就产生一个线程咯~ 产生新的线程是很耗内存的,线程太多当然就内存溢出咯~嗯 你说的很对!要结合线程池的!
2023-07-15 07:43:481

有没有关于java深入一点的书推荐?

学习的最好途径就是看书“,这是我自己学习并且小有了一定的积累之后的第一体会。个人认为看书有两点好处:1.能出版出来的书一定是经过反复的思考、雕琢和审核的,因此从专业性的角度来说,一本好书的价值远超其他资料。2.对着书上的代码自己敲的时候方便。“看完书之后再次提升自我的最好途径是看一些相关的好博文“,我个人认为这是学习的第二步,因为一本书往往有好几百页,好的博文是自己看书学习之后的一些总结和提炼,对于梳理学习的内容很有好处,当然这里不是说自己的学习方法,就不再扯下去了。很多程序员们往往有看书的冲动,但不知道看哪些书,下面我就给各位Java程序猿们推荐一些好书(每本书的作者会加粗标红),其中绝大多数都是我自己平时在看的书,也算是我对于平时读的书做一个小总结和读后感吧。首先推荐的不是一本书,而是一个博客,也是我们博客园另外一位博友java_my_life。目前市面上讲解设计模式的书很多,虽然我前面讲了看书是最好的,但是对设计模式感兴趣的朋友们,我推荐的是这个博客。这位博友的设计模式讲得非常非常好,我认为90%的内容都是没有问题且很值得学习的,其讲解设计模式的大体路线是:随便开篇点明该设计模式的定义图文并茂讲解该设计模式中的结构以详细的代码形式写一下该种设计模式的实现补充内容讲解该设计模式的优缺点对于一个设计模式我们关注、学习的知识点,不就是上面这些吗?不过我要重点提醒一下网友们,同一种设计模式的写法有多种,并不是说只有按某种写法来写才是这种设计模式。比方说适配器模式,我们关注适配器模式一定要关注的是什么是适配器模式不是怎么写适配器模式,不要认为某段代码不是按照适配器模式的写法写下来的它就不是适配器模式了,记住这一点,你在学习设计模式的时候一定会对代码中用到的设计模式有更深入的理解。1、深入理解Java虚拟机:JVM高级特性与最佳实践如果你不满足于做一个只会写ifelse的Java程序员,而是希望更进一步,我随便举几个例子吧:了解Java代码的底层运行机制定位性能问题对整个系统进行性能调优解决各种奇奇怪怪的线上线下问题更加高级别的,为自己的项目量身定做一款适合自己项目的虚拟机那么Java虚拟机是你必学的一门技术。《深入理解Java虚拟机:JVM高级特性与最佳实践》作者是周志明,这本书可以说是国内写得最好的有关Java虚拟机的书籍,近半年,前前后后这本书我起码看了有5遍。国内写虚拟机的书除了这本,其实还有一些其他的,我也买过,不过粗略看下来,很多内容也是《深入理解Java虚拟机:JVM高级特性与最佳实践》此书里面的。另外值得一提的是,《深入理解Java虚拟机:JVM高级特性与最佳实践》这本书,有电子版的,网上搜一下就能下载到了。不过建议有兴趣的朋友还是去买书看,电子版本下载到的一般是比较老的版本,相比最新修订版的《深入理解Java虚拟机:JVM高级特性与最佳实践》,有很多作者新补充的知识点是没有的。2、HotSpot实战所有的Java虚拟机都是遵循着Java虚拟机规范来的,市面上的Java虚拟机几十款,《深入理解Java虚拟机:JVM高级特性与最佳实践》一书里面讲的虚拟机并不针对某种特定的虚拟机,而是从Java虚拟机规范的角度来讲解Java虚拟机。我们平时使用的乃至商用的大多数Java虚拟机都是Sun公司的HotSpot,大家cmd进入命令行,使用”java-version”命令就可以看到了。如果希望在Java虚拟机规范的基础上更加深入地去理解虚拟机的一些细节是怎么实现的,就可以看一下《HotSpot实战》一书,作者是陈涛。不过由于HotSpot的源码都是C/C++写的,所以要求读者有非常好的C/C++基础,如果对这两门语言不是很熟悉的朋友,看这本书可能对你帮助不是很大。最后提一句,如果有兴趣的朋友,不妨先去网上下载一个openJDK,HotSpot的源码就在里面。3、Java并发编程实战这本书常常被列入Java程序员必读十大书籍排行榜前几位,不过个人不是很推荐这本书。《Java并发编程实战》作者是BrianGoetz,怎么说呢,这本书前前后后我也看了两遍左右,个人感受是:文字多代码少讲解多实践少我觉得这可能就是老外写书的特点吧,因为Java是北美国家(加拿大、美国)开发和维护的,所以老外对Java方方面面的理论知识体系都掌握得是非常清楚和透彻的。翻开这本书看,多线程什么用、什么是死锁、什么是竞争、什么是线程安全等等,方方面面的知识点都用大量的文字篇幅讲解,不免让人感觉十分枯燥,也难让读者有实质性的进步。我这本书看了两遍也属于一目十行意思,有兴趣的地方就重点看一下。无论如何,作为一本常常位于Jva程序员必读十大书籍排行榜前几名的书,还是一定要推荐给大家的。4、java多线程编程核心技术《Java多线程编程核心技术》作者高洪岩。想要学习多线程的朋友,这本书是我大力推荐的,我的个人博客里面二十多篇的多线程博文都是基于此书,并且在这本书的基础上进行提炼和总结而写出来的。此书和《Java并发编程实战》相反,这本书的特点是大篇幅的代码+小篇幅的精讲解,可能这和中国人写的书比较偏向实用主义的风格有关。本书关于线程安全、synchronized、Reentrant、Timer等等都用详细的代码进行了讲解,而且每个大知识点下的多个小知识点都会详细讲解到,非常有实践价值。有兴趣的朋友们,我相信只要你们跟着这本书里面的代码敲、运行、思考,三步走,对于多线程的使用与理解一定会进几大步。不过这本书的缺点就是对于Java并发包下的一些类像CountDownLatch、Semphore、CyclicBarrier、Future、Callable等都没有讲到,重点的CAS和AQS也没有触及,重点类的实现原理也没有提。当然,这很深入了,在学习了这本书之后如果能再去对这些知识进行一些学习、研究的话,你一定会慢慢成长为一个很厉害的多线程高手。5、EffectiveJava中文版这是唯一一本我没有买的书。初识这本书,是在我的博文Java代码优化(长期更新)里面,底下评论的时候有朋友提到了这本书,当时我说要去买,不过这两个月一直都没时间去逛书店,甚是遗憾,之后肯定会找时间去买这本书的。《EffectiveJava中文版》的作者是JoshuaBloch,这个人就很厉害了,他是谷歌的首席架构师,属于超级技术大牛级别了吧,呵呵。由于没有看过这本书,所以我不好发表评论,但是从这本书的知名度以及其作者的来头来看(多提一句,这本书也是Java之父JamesGosling博士推崇的一本书),我相信这一定是一本值得一看的好书。好的代码是每个Java程序员都应该去追求的,不是说我今天写一段好代码相比写一段烂代码对性能会有多大的提升,更多的应该是提升了代码的可读性以及可以规避许多潜在的、未知的问题,避免代码上线之后出问题而花时间去维护—-无论从时间成本、人力成本还是风险成本来说,这都是非常高的。6、深入分析JavaWeb技术内幕《深入分析JavaWeb技术内幕》,作者许令波,淘宝工程师。这本书我用一个字概括就是:全。真的非常全,HTTP、DNS、CDN、静态化、Jetty、Tomcat、Servlet、Spring、MyBatis等等,什么都有,涉及知识面非常广,但又不像专门精讲某个知识点的书籍一样讲得非常深入,感觉这本书就是尽量去用短的篇幅讲清楚一些JavaWeb使用到的技术的内幕,让读者对这些知识点的技术内幕有一个理性的认识。不过,尽管每个知识点的篇幅都不多,但是重点都基本讲到了,是一本让人真正有收获的书。如果想进一步了解这些技术的技术内幕,就要自己去买相关书籍或者自己上网查资料了,有种抛砖引玉,或者说师傅领进门、修行在个人的感觉。7、大型网站技术架构核心原理与案例分析一个字评价这本书,_;两个字评价这本书,很_;三个字评价这本书,非常_。呵呵,好了,再说下去可能别人以为我是水军了。《大型网站技术架构核心原理与案例分析》的作者是李智慧,原阿里巴巴技术专家。Java的大多数应用都是用在Web上的,现在只要稍微大型一点的Web应用,都一定是一个分布式系统,那么一个分布式系统用到了哪些技术?一个大型网站是如何从一个小型网站成长起来的?如何保证你的网站安全?分布式系统使用到了缓存,有哪些缓存?缓存的使用有哪些值得注意的事项?关于分布式的知识点,都在这本书里面有体现,只有你想不到,没有他写不到,而且写得非常易懂,基本属于看一两遍,再记一些笔记就知道是怎么一回事儿了。多看几遍,对分布式的理解一定会加深不少。而且里面不仅仅是分布式的知识,还非常接地气地写了如何做一个好的架构师,其实我认为这不仅仅是写给想做架构师的读者看的,就是给读者一些建议,如何更好地提出意见、如何更让别人关注你的声音、如何看到他人的优点,入木三分,让人获益匪浅。8、大型网站系统与Java中间件实践《大型网站系统与Java中间件实践》作者曾宪杰,是淘宝的技术总监,算起来应该在阿里有至少P8的级别了吧。这本书的部分内容和上面一本李智慧的《大型网站技术架构核心原理与案例分析》有所重合,像分布式系统的演化、CDN、CAP理论和BASE理论等等,这也更说明这些都是分布式系统或者说是一个大型网站重点关注的内容,当作一次再学习也不错。本书要突出的重点是中间件三个字,中间件是分布式系统中一个非常重要的东西,其最重要的作用应该就是解耦,降低模块与模块之间的强依赖,不同的模块之间的依赖度降低,便可以各自独立地开发自己的功能,这也可以说是软件工程发展的目标和驱动力。因此,本书有一部分的内容就是基于中间件,详细讲解了中间件与JMS的各种知识,适合对分布式系统比较熟悉并且想要往中间件方面有一定研究的读者。9、从Paxos到ZooKeeper分布式一致性原理与实践《从Paxos到ZooKeeper分布式一致性原理与实践》,作者倪超,阿里巴巴工程师。这本书是我最近在研读的一本书,和上面的《大型网站系统与Java中间件实践》一样,属于分布式组件的范畴,属于有些深入的内容,当然也是我自己的个人兴趣。当然,如果有志向做一个出色的大型网站架构师、公司的技术总监之类,这些知识当然是必须掌握的。本书从分布式系统基本理论开始讲起,讲到Paxos算法,最后慢慢引入到Zookeeper,循序渐进。当然,更多的我目前还不方便发表什么看法,因为这本书的第二张Paxos算法我都还没有弄懂(Paxos算法确实有些难以理解和不太易懂),接下来的章节还没有看下去。如果网友们所在的公司在使用Zookeeper,并且你又对Zookeeper感兴趣想要研究一下它的原理的,这本书将是不二之选。10、MySQL5.6从零开始学《MySQL5.6从零开始学》,作者刘增杰和李坤。作为一名Java程序员,我认为我们千万不要觉得数据库是DBA的事情,数据库对一个Java程序员来说也是必须掌握的一门知识,丰富的数据库性能优化经验是一个顶尖程序员必备技能。目前主流的数据库有Oracle和MySQL,当然推荐大家的是MySQL,主要原因我认为有两点:1、MySQL相比Oracle更轻量级、更小、安装和卸载更方便,SQL其实都是差不多的,如果想学数据库,学MySQL就可以了,在家里面可以自己方便地研究,如果你的公司使用Oracle,只要再用对比学习法,关注一下Oracle和MySQL的差别即可2、随着2009年阿里巴巴去IOE的运动的进行,目前国内的很多互联网公司都会选择MySQL作为它们使用的数据库,因为MySQL免费,所以既省钱又不需要出了问题就依赖甲骨文公司MySQL学习我推荐的是这本我自己学习看的《MySQL5.6从零开始学》,我是觉得挺好的这本书,书里面的知识点很细致、很全面,读者选择书籍的标准大多不就是这两点吗?11、Spring源码深度解析《Spring源码深度解析》,作者郝佳。Spring这个框架做得太好了,功能太强大了,以至于很多开发者都只知Spring,不知什么是工厂、什么是单例、什么是代理(我面试别人的真实体会)。这种功能强大的框架内部一定是很复杂的实现,这就导致一旦你的程序使用Spring,出了问题,可能是Error、可能是Exception、可能是程序运行结果不是你的预期的,出现诸如此类问题的时候,将会让你感到困惑,除了上网查资料或者问别人似乎没有更好的解决办法。研读Spring的源代码不失为一种很好的学习方法,我个人认为这有很多好处:理解框架内部的实现之后,可以主动去解决问题,而不需要依赖别人Spring框架内部实现用到了很多设计模式,很好的代码设计思路,这将会对你写代码、对你理解设计模式有很大的提高研究Spring框架将会大大增强你读代码的能力,我相信只要你能研究清楚Spring内部是如何实现的,其他任何一个框架的源代码都难不倒你总而言之,我认为读代码的能力是一个普通的程序员和一个好的程序员之间最大的差别之一,前者只会把别人写好的东西拿来用,后者不仅能用好,还清楚知道别人写好的东西底层是如何实现的,在出现问题的时候可以轻松解决。Spring源代码,个人推荐《Spring源码深度解析》一书,真要研究透并且写清楚Spring源代码,恐怕三四本书都不够,作者在近400页的篇幅中尽量去讲解Spring源代码是如何实现的,殊为不易,尽管无法讲得完全,但是相信作者的讲解配合上读者自己的研究,一定可以对Spring的实现有更深度的理解。以上就是我对Java高级部分应该看的书籍的推荐,希望可以对你有所帮助。说一点我的建议,我们学Java技术更重要的还是看视频教程,我们只有看更多的视频教程,不断的练习,在脑海当中产生深刻的记忆。我永远坚信我的一句话:书籍能诠释的东西毕竟有限。最后在这里推荐大家关注一下我的微信公众号:Java新手学习,给你准备了一套最新的Java基础精讲视频教程和Java系统学习路线,关注即可观看。
2023-07-15 07:43:551

多线程:所有线程执行到一个地方才往下执行,怎么实现

主线程抛出一个子线程异步处理一些东西,这时主线程要等待子线程运行完成再完成(其实我是为了统计运行时间的)。这里抛出的子线程可能递归的调用自己,就是再抛一个他的子线程出来,但是到底一共抛多少,事先是不知道的。应用场景:1)多线程扫描文件夹内的文件,遇到文件夹内有子文件夹,要递归调用扫描线程的,等到全部扫描完成后,返回结果,显示;2)多线程快速排序,第一次肯定是单线程的,第一次排序完成后,会分两半,这两半多线程排,递归调用了这个排序线程,这两半很有可能,极大有可能再各分两半,也就是会有4个子线程的子线程再排序。我试过网上的那个 CountDownLatch ,但是他只能实现定义好子线程的数量,但是在以上两种情景下,事先你是不知道会有多少个子线程的!PS:在某种需求中,比如一个大型的任务,常常需要分配好多子任务去执行,只有当所有子任务都执行完成时候,才能执行主任务,这时候,就可以选择CyclicBarrier了。这个貌似也要在开始的时候设定总线程数:CyclicBarrier(int parties)这个和countDownLatch就差不多了呢!你觉得呢 问题补充:niuzai 写道亲,CyclicBarrier可能是你想要的。PS:在某种需求中,比如一个大型的任务,常常需要分配好多子任务去执行,只有当所有子任务都执行完成时候,才能执行主任务,这时候,就可以选择CyclicBarrier了。我再来看看~~试试看! 问题补充:niuzai 写道亲,CyclicBarrier这个东东是可以动态重置个数的,而countDownLatch是一次性的。只不过大多数例子CyclicBarrier初始化了个数罢了,实质上它是可以动态改变的~ 嗯 我试了下,多线程快排,小数据量还好,顺利执行了,但是数多了后,会建N多线程等待,会outofmemory,呵呵!不过证明这个方法是可以的! 问题补充:niuzai 写道亲,那你就结合线程池操作,设置线程数目上限。不要每个任务就产生一个线程咯~ 产生新的线程是很耗内存的,线程太多当然就内存溢出咯~嗯 你说的很对!要结合线程池的!
2023-07-15 07:44:031

如何实现主线程需要等待子线程的结果,然后才能往下执行

主线程抛出一个子线程异步处理一些东西,这时主线程要等待子线程运行完成再完成(其实我是为了统计运行时间的)。这里抛出的子线程可能递归的调用自己,就是再抛一个他的子线程出来,但是到底一共抛多少,事先是不知道的。应用场景:1)多线程扫描文件夹内的文件,遇到文件夹内有子文件夹,要递归调用扫描线程的,等到全部扫描完成后,返回结果,显示;2)多线程快速排序,第一次肯定是单线程的,第一次排序完成后,会分两半,这两半多线程排,递归调用了这个排序线程,这两半很有可能,极大有可能再各分两半,也就是会有4个子线程的子线程再排序。我试过网上的那个 CountDownLatch ,但是他只能实现定义好子线程的数量,但是在以上两种情景下,事先你是不知道会有多少个子线程的!PS:在某种需求中,比如一个大型的任务,常常需要分配好多子任务去执行,只有当所有子任务都执行完成时候,才能执行主任务,这时候,就可以选择CyclicBarrier了。这个貌似也要在开始的时候设定总线程数:CyclicBarrier(int parties)这个和countDownLatch就差不多了呢!你觉得呢 问题补充:niuzai 写道亲,CyclicBarrier可能是你想要的。PS:在某种需求中,比如一个大型的任务,常常需要分配好多子任务去执行,只有当所有子任务都执行完成时候,才能执行主任务,这时候,就可以选择CyclicBarrier了。我再来看看~~试试看! 问题补充:niuzai 写道亲,CyclicBarrier这个东东是可以动态重置个数的,而countDownLatch是一次性的。只不过大多数例子CyclicBarrier初始化了个数罢了,实质上它是可以动态改变的~ 嗯 我试了下,多线程快排,小数据量还好,顺利执行了,但是数多了后,会建N多线程等待,会outofmemory,呵呵!不过证明这个方法是可以的! 问题补充:niuzai 写道亲,那你就结合线程池操作,设置线程数目上限。不要每个任务就产生一个线程咯~ 产生新的线程是很耗内存的,线程太多当然就内存溢出咯~嗯 你说的很对!要结合线程池的!
2023-07-15 07:44:101

线程池如何让主线程知道所有子线程已经执行完成

------解决方案--------------------------------------------------------主线程做个while true循环判断所有的子线程!isAlive()------解决方案--------------------------------------------------------不知道你的线程池的实现是自写还是使用JDK提供的java.util.concurrent.ThreadPoolExecutor。如果是JDK提供的线程池。可以去判断getPoolSize()是否等于或者小于池的核心线程数量corePoolSize。当然这种情况下也存在陷阱,一就是核心线程数量无法确定是否在空闲状态,只有将corePoolSize设置为0,才能正确判断。二就是线程池对空闲线程的销毁存在一个keepAliveTime,只有要将keepAliveTime减小到你getPoolSize的频率时,可能才能正确判断。并且如果使用ThreadPoolExecutor,对于池中的线程,你无法针对某一个线程进行操作。我的感觉,你现在的需求不符合使用线程池的需求,你需要的是一个线程管理类而不是池。------解决方案--------------------------------------------------------java.util.concurrent.CyclicBarrier一个同步辅助类,它允许一组线程互相等待,直到到达某个公共屏障点 (common barrier point)。在涉及一组固定大小的线程的程序中,这些线程必须不时地互相等待,此时 CyclicBarrier 很有用。因为该 barrier 在释放等待线程后可以重用。牢记一点:当要解决任何线程问题时,优先考虑api提供的工具。------解决方案--------------------------------------------------------顶四楼。不清楚主线程是不是可以挂起,如果可以,可以在子线程可行的位置将主线程挂起,当子线程逻辑结束后,再将主线程唤醒。仅做猜测,不可定论。这好办啊
2023-07-15 07:44:191

java中cyclicbarrier 和 countdownlatch有什么不同

cyclibarriar 就是栅栏,顾名思义:就是一个拦截的装置。多个线程start后,在栅栏处阻塞住,一般定义栅栏的时候会定义有多少个线程。比如定义为4个,那么有三个线程到栅栏处,就阻塞住,如果没有第四个,就会一直阻塞,知道启动第四个线程到栅栏
2023-07-15 07:45:311

cyclicbarrier 怎么知道 最后一个线程

  首先,CyclicBarrier可以多次使用,CountDownLatch只能用一次(为0后不可变)  其次,  Barrier是等待指定数量线程到达再继续处理;  Latch是等待指定事件变为指定状态后发生再继续处理,对于CountDown就是计数减为0的事件,但你也可以实现或使用其他Latch就不是这个事件了…  Barrier是等待指定数量任务完成,Latch是等待其他任务完成指定状态的改变再继续……
2023-07-15 07:45:401

java课程设计模拟接力赛赛跑

package hh; import java.util.Random; import java.util.concurrent.CyclicBarrier; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.TimeUnit; class Player implements Runnable{ private String name; private CyclicBarrier barrier; private Player next;//下一棒 private int time;//用时 private boolean run;//第一棒 public Player(String name, CyclicBarrier barrier, boolean run) { super(); this.name = name; this.setBarrier(barrier); this.run = run; } public void run() { try { synchronized (this) { while(!run){//等待队员 wait(); } } Random r = new Random(); TimeUnit.MILLISECONDS.sleep(r.nextInt(2000)); next(next,11 + r.nextInt(2)); } catch (InterruptedException e) { e.printStackTrace(); } } private void next(Player next, int time) { System.out.println(name + " 用时:" + time + ",交接棒"); if(next != null){ next.setTime(this.time + time); synchronized (next) { next.setRun(true); next.notify(); } }else{ System.out.println("跑完,总用时:" + (this.time + time)); } } public void setTime(int time) { this.time = time; } public int getTime(){ return this.time; } public void setNext(Player next) { this.next = next; } public void setRun(boolean run) { this.run = run; } public void setBarrier(CyclicBarrier barrier) { this.barrier = barrier; } public CyclicBarrier getBarrier() { return barrier; } } public class RelayRace { public static void main(String[] args) throws InterruptedException { final Player[] players = new Player[4]; ExecutorService exec = Executors.newCachedThreadPool(); CyclicBarrier barrier = new CyclicBarrier(4, new Runnable() { public void run() { System.out.println("结束,总用时:" + players[3].getTime()); } }); for(int i = 0; i < 4; i++){ players[i] = new Player("队员" + ( i + 1), barrier, i == 0); } for(int i = 0; i < 4; i++){ if( i < 3){ players[i].setNext(players[i + 1]); exec.execute(players[i]); }else{ exec.execute(players[3]); break; } } } }
2023-07-15 07:45:571

jdk提供的用于并发编程的同步器有哪些

CountDownLatch,CyclicBarrier和Semaphore
2023-07-15 07:46:041

主线程等待子线程运行结束再完成的效果如何实现

主线程抛出一个子线程异步处理一些东西,这时主线程要等待子线程运行完成再完成(其实我是为了统计运行时间的)。 这里抛出的子线程可能递归的调用自己,就是再抛一个他的子线程出来,但是到底一共抛多少,事先是不知道的。 应用场景:1)多线程扫描文件夹内的文件,遇到文件夹内有子文件夹,要递归调用扫描线程的,等到全部扫描完成后,返回结果,显示; 2)多线程快速排序,第一次肯定是单线程的,第一次排序完成后,会分两半,这两半多线程排,递归调用了这个排序线程,这两半很有可能,极大有可能再各分两半,也就是会有4个子线程的子线程再排序。 我试过网上的那个 CountDownLatch ,但是他只能实现定义好子线程的数量,但是在以上两种情景下,事先你是不知道会有多少个子线程的! PS:在某种需求中,比如一个大型的任务,常常需要分配好多子任务去执行,只有当所有子任务都执行完成时候,才能执行主任务,这时候,就可以选择CyclicBarrier了。这个貌似也要在开始的时候设定总线程数:CyclicBarrier(int parties) 这个和countDownLatch就差不多了呢! 你觉得呢 问题补充:niuzai 写道亲,CyclicBarrier可能是你想要的。 PS:在某种需求中,比如一个大型的任务,常常需要分配好多子任务去执行,只有当所有子任务都执行完成时候,才能执行主任务,这时候,就可以选择CyclicBarrier了。我再来看看~~试试看! 问题补充:niuzai 写道亲,CyclicBarrier这个东东是可以动态重置个数的,而countDownLatch是一次性的。只不过大多数例子CyclicBarrier初始化了个数罢了,实质上它是可以动态改变的~ 嗯 我试了下,多线程快排,小数据量还好,顺利执行了,但是数多了后,会建N多线程等待,会outofmemory,呵呵! 不过证明这个方法是可以的! 问题补充:niuzai 写道亲,那你就结合线程池操作,设置线程数目上限。不要每个任务就产生一个线程咯~ 产生新的线程是很耗内存的,线程太多当然就内存溢出咯~嗯 你说的很对!要结合线程池的!
2023-07-15 07:46:241

CountDownLatch和CyclicBarrier的区别

首先,CyclicBarrier可以多次使用,CountDownLatch只能用一次(为0后不可变) 其次, Barrier是等待指定数量线程到达再继续处理; Latch是等待指定事件变为指定状态后发生再继续处理,对于CountDown就是计数减为0的事件,但你也可以实现或使用其。
2023-07-15 07:46:321

主线程等待子线程结果过程中,如何即处于等

主线程抛出一个子线程异步处理一些东西,这时主线程要等待子线程运行完成再完成(其实我是为了统计运行时间的)。这里抛出的子线程可能递归的调用自己,就是再抛一个他的子线程出来,但是到底一共抛多少,事先是不知道的。应用场景:1)多线程扫描文件夹内的文件,遇到文件夹内有子文件夹,要递归调用扫描线程的,等到全部扫描完成后,返回结果,显示;2)多线程快速排序,第一次肯定是单线程的,第一次排序完成后,会分两半,这两半多线程排,递归调用了这个排序线程,这两半很有可能,极大有可能再各分两半,也就是会有4个子线程的子线程再排序。我试过网上的那个 CountDownLatch ,但是他只能实现定义好子线程的数量,但是在以上两种情景下,事先你是不知道会有多少个子线程的!PS:在某种需求中,比如一个大型的任务,常常需要分配好多子任务去执行,只有当所有子任务都执行完成时候,才能执行主任务,这时候,就可以选择CyclicBarrier了。这个貌似也要在开始的时候设定总线程数:CyclicBarrier(int parties)这个和countDownLatch就差不多了呢!你觉得呢 问题补充:niuzai 写道亲,CyclicBarrier可能是你想要的。PS:在某种需求中,比如一个大型的任务,常常需要分配好多子任务去执行,只有当所有子任务都执行完成时候,才能执行主任务,这时候,就可以选择CyclicBarrier了。我再来看看~~试试看! 问题补充:niuzai 写道亲,CyclicBarrier这个东东是可以动态重置个数的,而countDownLatch是一次性的。只不过大多数例子CyclicBarrier初始化了个数罢了,实质上它是可以动态改变的~ 嗯 我试了下,多线程快排,小数据量还好,顺利执行了,但是数多了后,会建N多线程等待,会outofmemory,呵呵!不过证明这个方法是可以的! 问题补充:niuzai 写道亲,那你就结合线程池操作,设置线程数目上限。不要每个任务就产生一个线程咯~ 产生新的线程是很耗内存的,线程太多当然就内存溢出咯~嗯 你说的很对!要结合线程池的!
2023-07-15 07:46:391

如何使“主线程”等待“子线程”执行结束后再继续执行

主线程抛出一个子线程异步处理一些东西,这时主线程要等待子线程运行完成再完成(其实我是为了统计运行时间的)。 这里抛出的子线程可能递归的调用自己,就是再抛一个他的子线程出来,但是到底一共抛多少,事先是不知道的。 应用场景:1)多线程扫描文件夹内的文件,遇到文件夹内有子文件夹,要递归调用扫描线程的,等到全部扫描完成后,返回结果,显示; 2)多线程快速排序,第一次肯定是单线程的,第一次排序完成后,会分两半,这两半多线程排,递归调用了这个排序线程,这两半很有可能,极大有可能再各分两半,也就是会有4个子线程的子线程再排序。 我试过网上的那个 CountDownLatch ,但是他只能实现定义好子线程的数量,但是在以上两种情景下,事先你是不知道会有多少个子线程的! PS:在某种需求中,比如一个大型的任务,常常需要分配好多子任务去执行,只有当所有子任务都执行完成时候,才能执行主任务,这时候,就可以选择CyclicBarrier了。这个貌似也要在开始的时候设定总线程数:CyclicBarrier(int parties) 这个和countDownLatch就差不多了呢! 你觉得呢 问题补充:niuzai 写道亲,CyclicBarrier可能是你想要的。 PS:在某种需求中,比如一个大型的任务,常常需要分配好多子任务去执行,只有当所有子任务都执行完成时候,才能执行主任务,这时候,就可以选择CyclicBarrier了。我再来看看~~试试看! 问题补充:niuzai 写道亲,CyclicBarrier这个东东是可以动态重置个数的,而countDownLatch是一次性的。只不过大多数例子CyclicBarrier初始化了个数罢了,实质上它是可以动态改变的~ 嗯 我试了下,多线程快排,小数据量还好,顺利执行了,但是数多了后,会建N多线程等待,会outofmemory,呵呵! 不过证明这个方法是可以的! 问题补充:niuzai 写道亲,那你就结合线程池操作,设置线程数目上限。不要每个任务就产生一个线程咯~ 产生新的线程是很耗内存的,线程太多当然就内存溢出咯~嗯 你说的很对!要结合线程池的!
2023-07-15 07:46:461

java学习书籍有哪些比较好?

“学习的最好途径就是看书“,这是我自己学习并且小有了一定的积累之后的第一体会。个人认为看书有两点好处: 1.能出版出来的书一定是经过反复的思考、雕琢和审核的,因此从专业性的角度来说,一本好书的价值远超其他资料2.对着书上的代码自己敲的时候方便“看完书之后再次提升自我的最好途径是看一些相关的好博文“,我个人认为这是学习的第二步,因为一本书往往有好几百页,好的博文是自己看书学习之后的一些总结和提炼,对于梳理学习的内容很有好处,当然这里不是说自己的学习方法,就不再扯下去了。很多程序员们往往有看书的冲动,但不知道看哪些书,下面我就给各位Java程序猿们推荐一些好书。一《深入理解Java虚拟机:JVM高级特性与最佳实践》如果你不满足于做一个只会写if…else…的Java程序员,而是希望更进一步,我随便举几个例子吧:1、了解Java代码的底层运行机制2、定位性能问题3、对整个系统进行性能调优4、解决各种奇奇怪怪的线上线下问题5、更加高级别的,为自己的项目量身定做一款适合自己项目的虚拟机那么Java虚拟机是你必学的一门技术。《深入理解Java虚拟机:JVM高级特性与最佳实践》作者是周志明,这本书可以说是国内写得最好的有关Java虚拟机的书籍,近半年,前前后后这本书我起码看了有5遍。国内写虚拟机的书除了这本,其实还有一些其他的,我也买过,不过粗略看下来,很多内容也是《深入理解Java虚拟机:JVM高级特性与最佳实践》此书里面的。另外值得一提的是,《深入理解Java虚拟机:JVM高级特性与最佳实践》这本书,有电子版的,网上搜一下就能下载到了。不过建议有兴趣的朋友还是去买书看,电子版本下载到的一般是比较老的版本,相比最新修订版的《深入理解Java虚拟机:JVM高级特性与最佳实践》,有很多作者新补充的知识点是没有的。二、《HotSpot实战》所有的Java虚拟机都是遵循着Java虚拟机规范来的,市面上的Java虚拟机几十款,《深入理解Java虚拟机:JVM高级特性与最佳实践》一书里面讲的虚拟机并不针对某种特定的虚拟机,而是从Java虚拟机规范的角度来讲解Java虚拟机。我们平时使用的乃至商用的大多数Java虚拟机都是Sun公司的HotSpot,大家cmd进入命令行,使用”java -version”命令就可以看到了。如果希望在Java虚拟机规范的基础上更加深入地去理解虚拟机的一些细节是怎么实现的,就可以看一下《HotSpot实战》一书,作者是陈涛。不过由于HotSpot的源码都是C/C++写的,所以要求读者有非常好的C/C++基础,如果对这两门语言不是很熟悉的朋友,看这本书可能对你帮助不是很大。最后提一句,如果有兴趣的朋友,不妨先去网上下载一个openJDK,HotSpot的源码就在里面。三、《Java并发编程实战》这本书常常被列入Java程序员必读十大书籍排行榜前几位,不过个人不是很推荐这本书。《Java并发编程实战》作者是Brian Goetz,怎么说呢,这本书前前后后我也看了两遍左右,个人感受是:1、文字多代码少2、讲解多实践少我觉得这可能就是老外写书的特点吧,因为Java是北美国家(加拿大、美国)开发和维护的,所以老外对Java方方面面的理论知识体系都掌握得是非常清楚和透彻的。翻开这本书看,多线程什么用、什么是死锁、什么是竞争、什么是线程安全等等,方方面面的知识点都用大量的文字篇幅讲解,不免让人感觉十分枯燥,也难让读者有实质性的进步。我这本书看了两遍也属于一目十行意思,有兴趣的地方就重点看一下。无论如何,作为一本常常位于Jva程序员必读十大书籍排行榜前几名的书,还是一定要推荐给大家的。四、《java多线程编程核心技术》《Java多线程编程核心技术》作者高洪岩。想要学习多线程的朋友,这本书是我大力推荐的,我的个人博客里面二十多篇的多线程博文都是基于此书,并且在这本书的基础上进行提炼和总结而写出来的。此书和《Java并发编程实战》相反,这本书的特点是大篇幅的代码+小篇幅的精讲解,可能这和中国人写的书比较偏向实用主义的风格有关。本书关于线程安全、synchronized、Reentrant、Timer等等都用详细的代码进行了讲解,而且每个大知识点下的多个小知识点都会详细讲解到,非常有实践价值。有兴趣的朋友们,我相信只要你们跟着这本书里面的代码敲、运行、思考,三步走,对于多线程的使用与理解一定会进几大步。不过这本书的缺点就是对于Java并发包下的一些类像CountDownLatch、Semphore、CyclicBarrier、Future、Callable等都没有讲到,重点的CAS和AQS也没有触及,重点类的实现原理也没有提。当然,这很深入了,在学习了这本书之后如果能再去对这些知识进行一些学习、研究的话,你一定会慢慢成长为一个很厉害的多线程高手。五、《Effective Java中文版》《Effective Java中文版》的作者是Joshua Bloch,这个人就很厉害了,他是谷歌的首席架构师,属于超级技术大牛级别了吧,这本书也是Java之父James Gosling博士推崇的一本书,我相信这一定是一本值得一看的好书。好的代码是每个Java程序员都应该去追求的,不是说我今天写一段好代码相比写一段烂代码对性能会有多大的提升,更多的应该是提升了代码的可读性以及可以规避许多潜在的、未知的问题,避免代码上线之后出问题而花时间去维护—-无论从时间成本、人力成本还是风险成本来说,这都是非常高的。六、《深入分析Java Web技术内幕》《深入分析Java Web技术内幕》,作者许令波,淘宝工程师。这本书用一个字概括就是:全。真的非常全,HTTP、DNS、CDN、静态化、Jetty、Tomcat、Servlet、Spring、MyBatis等等,什么都有,涉及知识面非常广,但又不像专门精讲某个知识点的书籍一样讲得非常深入,感觉这本书就是尽量去用短的篇幅讲清楚一些Java Web使用到的技术的内幕,让读者对这些知识点的技术内幕有一个理性的认识。不过,尽管每个知识点的篇幅都不多,但是重点都基本讲到了,是一本让人真正有收获的书。如果想进一步了解这些技术的技术内幕,就要自己去买相关书籍或者自己上网查资料了,有种抛砖引玉,或者说师傅领进门、修行在个人的感觉。七、《大型网站技术架构 核心原理与案例分析》《大型网站技术架构 核心原理与案例分析》的作者是李智慧,原阿里巴巴技术专家。Java的大多数应用都是用在Web上的,现在只要稍微大型一点的Web应用,都一定是一个分布式系统,那么一个分布式系统用到了哪些技术?一个大型网站是如何从一个小型网站成长起来的?如何保证你的网站安全?分布式系统使用到了缓存,有哪些缓存?缓存的使用有哪些值得注意的事项?关于分布式的知识点,都在这本书里面有体现,只有你想不到,没有他写不到,而且写得非常易懂,基本属于看一两遍,再记一些笔记就知道是怎么一回事儿了。多看几遍,对分布式的理解一定会加深不少。而且里面不仅仅是分布式的知识,还非常接地气地写了如何做一个好的架构师,其实我认为这不仅仅是写给想做架构师的读者看的,就是给读者一些建议,如何更好地提出意见、如何更让别人关注你的声音、如何看到他人的优点,入木三分,让人获益匪浅。八、《大型网站系统与Java中间件实践》《大型网站系统与Java中间件实践》作者曾宪杰,是淘宝的技术总监,算起来应该在阿里有至少P8的级别了吧。这本书的部分内容和上面一本李智慧的《大型网站技术架构 核心原理与案例分析》有所重合,像分布式系统的演化、CDN、CAP理论和BASE理论等等,这也更说明这些都是分布式系统或者说是一个大型网站重点关注的内容,当作一次再学习也不错。本书要突出的重点是中间件三个字,中间件是分布式系统中一个非常重要的东西,其最重要的作用应该就是解耦,降低模块与模块之间的强依赖,不同的模块之间的依赖度降低,便可以各自独立地开发自己的功能,这也可以说是软件工程发展的目标和驱动力。因此,本书有一部分的内容就是基于中间件,详细讲解了中间件与JMS的各种知识,适合对分布式系统比较熟悉并且想要往中间件方面有一定研究的读者。九、《从Paxos到ZooKeeper 分布式一致性原理与实践》《从Paxos到ZooKeeper 分布式一致性原理与实践》,作者倪超,阿里巴巴工程师。这本书和上面的《大型网站系统与Java中间件实践》一样,属于分布式组件的范畴,属于有些深入的内容,当然,如果有志向做一个出色的大型网站架构师、公司的技术总监之类,这些知识当然是必须掌握的。本书从分布式系统基本理论开始讲起,讲到Paxos算法,最后慢慢引入到Zookeeper,循序渐进。当然,更多的我目前还不方便发表什么看法,因为这本书的第二张Paxos算法我都还没有弄懂(Paxos算法确实有些难以理解和不太易懂),接下来的章节还没有看下去。如果网友们所在的公司在使用Zookeeper,并且你又对Zookeeper感兴趣想要研究一下它的原理的,这本书将是不二之选。十、《MySQL5.6从零开始学》《MySQL5.6从零开始学》,作者刘增杰和李坤。作为一名Java程序员,我认为我们千万不要觉得数据库是DBA的事情,数据库对一个Java程序员来说也是必须掌握的一门知识,丰富的数据库性能优化经验是一个顶尖程序员必备技能。目前主流的数据库有Oracle和MySQL,当然推荐大家的是MySQL,主要原因我认为有两点:1、MySQL相比Oracle更轻量级、更小、安装和卸载更方便,SQL其实都是差不多的,如果想学数据库,学MySQL就可以了,在家里面可以自己方便地研究,如果你的公司使用Oracle,只要再用对比学习法,关注一下Oracle和MySQL的差别即可2、随着2009年阿里巴巴去IOE的运动的进行,目前国内的很多互联网公司都会选择MySQL作为它们使用的数据库,因为MySQL免费,所以既省钱又不需要出了问题就依赖甲骨文公司MySQL学习我推荐《MySQL5.6从零开始学》,我是觉得挺好的这本书,书里面的知识点很细致、很全面,读者选择书籍的标准大多不就是这两点吗?十一、《Spring源码深度解析》《Spring源码深度解析》,作者郝佳。Spring这个框架做得太好了,功能太强大了,以至于很多开发者都只知Spring,不知什么是工厂、什么是单例、什么是代理。这种功能强大的框架内部一定是很复杂的实现,这就导致一旦你的程序使用Spring,出了问题,可能是Error、可能是Exception、可能是程序运行结果不是你的预期的,出现诸如此类问题的时候,将会让你感到困惑,除了上网查资料或者问别人似乎没有更好的解决办法。研读Spring的源代码不失为一种很好的学习方法,我个人认为这有很多好处:1、理解框架内部的实现之后,可以主动去解决问题,而不需要依赖别人2、Spring框架内部实现用到了很多设计模式,很好的代码设计思路,这将会对你写代码、对你理解设计模式有很大的提高3、研究Spring框架将会大大增强你读代码的能力,我相信只要你能研究清楚Spring内部是如何实现的,其他任何一个框架的源代码都难不倒你总而言之,我认为读代码的能力是一个普通的程序员和一个好的程序员之间最大的差别之一,前者只会把别人写好的东西拿来用,后者不仅能用好,还清楚知道别人写好的东西底层是如何实现的,在出现问题的时候可以轻松解决。Spring源代码,个人推荐《Spring源码深度解析》一书,真要研究透并且写清楚Spring源代码,恐怕三四本书都不够,作者在近400页的篇幅中尽量去讲解Spring源代码是如何实现的,殊为不易,尽管无法讲得完全,但是相信作者的讲解配合上读者自己的研究,一定可以对Spring的实现有更深度的理解。后记以上就是我推荐给Java开发者们的一些值得一看的好书。但是这些书里面并没有Java基础、Java教程之类的书,对于Java基础知识的学习,我提两点建议吧:多写多敲代码,好的代码与扎实的基础知识一定是实践出来的。希望对您有所帮助!~
2023-07-15 07:47:174

JAVA学习笔记JDK6和7的区别?

坐等高手,在项目中还没有用到过,我也想知道。
2023-07-15 07:47:253

德芙名字的来历

德芙故事: 初恋如冰激凌般甜蜜 《德芙,为那凄美的爱情》 源自《读者》2010 5月刊 该故事很可能为杜撰,德芙官网并没有此条故事 1919年的春天,卢森堡王室迎来了夏洛特公主来继承王位,同时她也嫁给了波旁家庭的后裔费力克斯王子。双喜临门,整个卢森堡往事热闹非凡。为了迎接那些贵客,御厨们更是通宵达旦的忙碌着。18岁的男孩莱昂.斯特法诺斯(Leo Stefanos)已经在这个厨房工作了4个年头。 这几天莱昂可忙坏了,整天都在整理碗橱和筷子,双手裂开了好几个口子,好不容易有点空闲,莱昂坐在门口用块布沾着缄水擦洗伤口。"这样太不卫生了,伤口容易感染发炎。"一个细弱的声音轻飘飘的飞进了莱昂的耳朵里,他抬起头,看见阳光中站着一个女孩。她有着淡黄稀疏的头发,微笑的眼睛向上翘成了弯月。莱昂从未见过她,猜测可能是费力克斯王子带来的仆人。女孩却自顾坐在了他的身旁。"要用药水擦洗,这样一定很疼的吧?"她盯着莱昂的手指,心疼的微微蹙起了眉头。就在莱昂不知道该如何回答她时,一个女佣跑了进来,"芭莎公主,快走,夫人在找你!"女孩回头冲莱昂笑了笑,匆匆忙忙跟着女佣跑了。原来她是公主!在这个王室中,除了带他进来的亲戚,从来没有人关心过他,更何况是公主。她那几句简陋的问候,让他产生了温暖的感觉。 此后,莱昂从和女佣们的聊天中得知,15岁的芭莎,是波旁家族的远亲,因为无依无靠,所以被费力克斯王子带了过来。女佣们经常嘲笑她那稀疏的头发,还有脸上的小雀斑。莱昂心不在焉的一边听着,一边忙着手里的活,转头时突然发现厨房门口有一个脑袋在那里看来看去,当对方的目光与他对上时,高兴的冲他摆了摆手。那正是芭莎公主。她快速的塞给菜昂一个布包,然后慌慌张张的走了。莱昂打开看到,里面竟然是一支疗伤的药膏。那天晚上,莱昂躺在床上,脑海中总是浮现出芭莎因为心疼而蹙眉的样子,多么善解人意的姑娘啊,他的心里既温暖,又甜蜜。 几天后,一位伯爵过生日,要在宫中举办一个小宴会。宴会上的蛋卷冰激凌是当时刚刚流行的,它成了年轻王子公主们最热衷的甜点。其实芭沙也很喜欢冰激凌,但这种还是希罕物的食品自然轮不到她。于是,莱昂开始寻思为她做冰激凌。这天晚上,莱昂悄悄潜入厨房。不一会儿,一个橙子味的冰激凌就在他的手下诞生了。当莱昂悄悄的敲开芭沙偏僻而简陋的房门时,芭莎看到他手中托着的精美礼物,满脸惊喜。她品尝着甜蜜香滑的冰激凌,神情陶醉,仿佛陷入了某种美好的回忆。随后她轻声告诉莱昂,她的母亲是个富有想像力的女人,在世时就经常给她调制各种口味的冰激凌。莱昂恍然大悟,原来冰激凌里的奶油味有芭莎对母亲的回忆和思念。此外,由于母亲也是英国人,芭莎也精通英文,她喜欢教莱昂简单的英语,似乎这能让她重温母亲的回忆。 从此以后,莱昂常常悄悄的为芭莎研制各种口味的冰激凌,很多个繁星点点的夜晚,他们在品味着美味的冰激凌的同时情窦初开的甜蜜也环绕在心头。不过在那尊卑分明的年代里,由于身份和处境的悬殊,他们谁都没说出心里的爱意,只是默默的将这份感情埋在心底。 悲伤的热巧克力难留爱情 转眼三年过去了,芭莎已经由一个孱弱的少女出落成一个漂亮的大姑娘,浑身透着果汁一样清新香甜的气息。莱昂的冰激凌手艺也得到了发挥,成为了宫廷甜点师的助手。有一回,芭莎突发奇想的说:"莱昂,你说如果能在冰激凌里加上巧克力会不会更美味一些?"芭莎的愿望对莱昂就是无边的动力。他又有了新的目标:巧克力冰激凌。如何才能让苦涩又香浓的巧克力融入到冰激凌里去呢?就在他苦苦琢磨时,一个消息象阴风一样吹进向了他。 20世纪初期,小小的卢森堡在这个欧洲地区地位窘迫,不时有人提出废除王室特权。为了找到一个靠山和同盟国,1921年卢森堡和邻国比利时为巩固两国之间的关系,决定王室联姻。而被选为联姻的人正好是芭莎公主。听到这个爆炸性的新闻,正在埋头调制巧克力冰激凌的莱昂心头一凉,手中的咖啡杯摔到了地上,碎掉了。他感到自己的心在猛烈的抽搐着。 一连三天,芭莎公主都没有出现在下午的餐桌上。莱昂心急如焚,盼望这周三的晚上能早些来到,因为那是他们约定在一起研制冰激凌的日子。可是这天晚上,芭莎失约了,直到莱昂盘中的冰激凌完全化掉,她也没有出现。菜昂感到有种撕心裂肺的疼痛。 芭莎出现在莱昂的视线里已经是一个月后。那天下午,他意外的在餐桌前看见了芭莎。她瘦掉了一圈,整个人看上去憔悴了许多。只是在看到莱昂的那一瞬间,她眼中迸发出两道炙热的光芒,那道光象剑一样刺痛了莱昂的心脏。他很想冲过去,抓住芭莎的手问她,希望她告诉他一切都是假的,她不会嫁人,因为她真心爱的人是他。可是他是仆人,而她却是高高在上的公主,莱昂无法确认他的爱情,可他抱着最后一线希望,想知道芭莎会不会爱他。 这天,莱昂给公主和王子们准备的甜点依然是冰激凌,由于真正的巧克力冰激凌还未研制成功,他急中生智,在芭莎的那份冰激凌上直接用巧克力写了几个英文字母"DOVE",正是DO YOU LOVE ME的缩写。他相信如果芭莎心有灵犀,一定能读懂他的心声。这是他最后的机会了。莱昂紧张的盯着芭莎,看着那只写着字母的冰激凌转到她的面前。可是直到上面的热巧克力融化了,芭莎也没有仔细看那几个字母,她只是发呆了很长时间,然后含泪吃下了他为她做的最后一份冰激凌,也让他的心完全的碎了。 几天以后,芭莎出嫁了,莱昂坐在高高的山坡上,悲哀的看着载着芭莎的列车开向远方。他手里的冰激凌融化了,心爱的姑娘也远去了,莱昂流下了伤心的泪水。自从芭莎离开后,有很长一段时间菜昂沉默不语。他常常习惯性地来到厨房,坐在曾经和芭莎一起坐过的长椅上,看着那些一起分享过冰激凌的餐盘,回忆侵蚀着他的大脑,更显得悲凉和孤寂。菜昂的心里隐隐作痛,他不能再在这里呆下去了,他决定离开,彻底忘记芭莎,开始自己新的人生。 伤感情的话刻在每块巧克力上 芭莎出嫁的第二年,莱昂离开了卢森堡,来到了美国,在一家高级餐厅里找到了工作。他踏实肯干,虚心老实,老板很赏识他,便将女儿许配给他。几年后莱昂随着老板一家人搬迁至芝加哥,并在芝加哥成为一名糖果商。然而,时光的流逝,家庭的安定,平稳的事业,还有儿子的降生,都没能抚平莱昂心底的创伤。芭莎微微蹙起的眉头始终是他心上永恒的烙印。他掩藏的心事并未能逃过妻子的眼睛。在一起生活了十几年后,妻子越来越感觉到莱昂心里始终有另外一个女人。终于有一天,她的愤怒爆发了。她咆哮说不需要三个人的婚姻,然后就伤心的离开了。 莱昂从此一直单身带着儿子,经营着他的水果店。1946年的一天莱昂看到儿子在追一辆贩卖冰激凌的卡车。当他拦下儿子后,儿子失望的告诉他那辆卡车里有最好吃的巧克力冰激凌。莱昂紧闭的那扇心门顿时被撞开了。自从芭莎离去后,他再没做过一次冰激凌。而芭莎最后想要的也不过是一个巧克力冰激凌,他却没能达成她的愿望。莱昂决定继续过去没有为芭莎完成的研究。 经过几个月的精心研制,一款富含奶油的同时被香醇的巧克力包裹的冰激凌问世了,并被刻上了四个英文字母。儿子天真的问莱昂,冰激凌上"DOVE"这几个字母是什么意思?莱昂轻轻的回答儿子,这是冰激凌的名字。说完,良久无语,他想起芭莎最后一次吃冰激凌的情形,那热热的巧克力上刻的也是这几个英文字母,可是她却视而不见。德芙冰激凌一推出就受到了大众的好评,许多人都爱上了它细腻得仿佛裹着柔情蜜意的口感。 就在这时,莱昂意外的收到了一封来自卢森堡的信件。此时距离他离开卢森堡已经有20多个年头了。拆开那封信,居然是过去同在厨房里干活的一位伙伴写给他的。从信中莱昂得知,芭莎公主曾派人回国四处打听他的消息,希望他能够去看她,但却得知他去了美国。由于第二次世界大战的影响,莱昂拿到这封信时,已经迟了一年零三天。芭莎到底怎么样了?她还好吗?莱昂的心仿佛又回到了当年,依然那么急迫而热切。 历经千辛万苦,莱昂终于来到了比利时,芭莎并不在皇宫,而是住在郊外的一处破败的别墅里,迎接他的佣人神情悲伤,这让莱昂感到不详。芭莎像菜昂一样也老了,她虚弱的躺在床上,曾经如清波荡漾的眼神如今也变的灰蒙蒙的。莱昂扑在她床边,任眼泪低落在芭莎苍白的脸上。芭莎伸出手来轻轻地抚摸着莱昂的头发,用几乎微弱的听不到的声音叫喊着莱昂的名字。随后她艰难的讲述了整个故事。 原来当年在卢森堡时,芭莎也深深的爱着菜昂,曾以绝食拒绝联姻,但是被送到宫外严密看守了一个月,她深知自己绝对不可能逃脱联姻的命运,何况莱昂从未说过爱她,更没有任何承诺。在那个年代里,一个女子要同整个家族决裂是要付出沉重代价的,况且她无处可去。她最终只能向命运妥协。但条件是希望离开卢森堡时能回皇宫喝一次下午茶,因为她希望在那里与莱昂做最后的告别。她吃到了他送给她的巧克力冰激凌,却没有看到那融化的字母。 听到这里,莱昂泣不成声,过去的误解终于有了答案。但一切都晚了,三天之后,芭莎离开了人世。莱昂听佣人说,芭莎自从嫁过来之后,终日郁郁寡欢,导致疾病缠身,她曾派人回去寻找莱昂,得知他离开了卢森堡并在美国结婚了,就一病不起。 莱昂十分悲伤,如果当年那冰激凌上的热巧克力没有化掉,如果芭莎明白他的心声,那么会改变注意与他私奔吗?他觉得一定会的!他开始悔恨自己的愚蠢和疏忽,为什么要在冰激凌上面用热巧克力刻字呢?如果巧克力是固体,那些字就不会融化,他也不会失去最后的机会。莱昂决心制造出一种固体的巧克力,使其可以保存更久的时间。 经过苦心研制,香醇独特的德芙巧克力终于诞生了"DOVE"这四个字母被牢牢的刻在了每一块巧克力上,菜昂以此来纪念他和芭莎那段错过的爱情,德芙官方故事: 故事开始于上世纪40年代,一天希腊裔美国人莱昂看到他的儿子正在大街上,不顾安危地紧追在一辆贩卖冰淇淋的卡车后面,出于对儿子安全的担忧,为了不让儿子再为买到一支冰淇淋而在马路上奔跑,这位芝加哥糖果店老板决定开发一种优质巧克力冰淇淋。经过几个月对产品配方不断的调整和改善,这个因爱而生的优质巧克力冰淇淋终于问世,并被莱昂命名为德芙。 富含奶油的同时被香醇的巧克力包裹的冰淇淋,一推出就大受好评,很快儿童以及大人都爱上了德芙。到上世纪70年代,每年都有超过一百万的德芙售出,喜爱它的消费者蜂拥而至,络绎不绝。 不久,德芙的流行引起了一家专业巧克力制造商玛氏食品(M&M/Mars)的极大兴趣。 1986年,玛氏食品(M&M/Mars)将德芙拥入怀中,并将因爱而生的德芙品牌视为掌上明珠。在对德芙巧克力的纯度和口味进行改善后,玛氏食品在上世纪90年代推出了牛奶巧克力和黑巧克力等新口味巧克力,这些巧克力续写着德芙的传奇,德芙巧克力的流行,持续至今。 正是对质量提升孜孜不倦的追求,才造就了德芙巧克力香醇的味道和丝般顺滑的口感。也正因如此,全世界越来越多的人爱上了因爱而生的德芙巧克力。 此故事摘自德芙中国官网 dove的中文是鸽子,还有和平的含义。
2023-07-15 07:40:015

DELL Zino HD 400 啥配置 找不到

戴尔Inspiron 灵越 ZINO HD(Z400R-118)详细参数基本参数产品类型家用台式机操作系统Windows 7 Home Basic(家庭普通版)处理器CPU 系列AMD 速龙双核CPU 型号AMD 速龙II X2 3250e核心/线程数双核心存储设备内存容量2GB硬盘容量320GB硬盘描述SATA光驱类型DVD刻录机显卡/声卡显卡类型独立显卡显卡芯片ATI Radeon HD 4330显存容量512MB音频系统集成网络通信有线网卡1000Mbps以太网卡机身规格机箱类型卧式早就停产了,看起来像是客厅电脑,2个巴掌大,配置也就是看看视屏,浏览网页吧。装的还是win7系统,2G内存很吃不消啊,这样的电脑现在不是很多的,基本是千把块,很小很小,放客厅接电视机挺好。
2023-07-15 07:40:021

kina grannis 《valentine》歌词翻译

alentine"s DayMy insides all turn to ash, 我的心瞬间化为灰烬So slow. 慢慢的And blow away as I collapse, 随着我倒下而随风飘散So cold. 刺骨的寒冷A black winter been away, 我看见From sight. 黑色的冬季已经离去Another darkness over day, 黑暗随即降临That night. 那个夜晚And the clouds above move closer, 天空的云朵离我如此之近Looking so dissatisfied. 那么阴郁But the harvest wind kept blowing, blowing. 狂风一个劲不断的刮I used to be my own protection, 我总是会保护好自己But not now. 但这次不会"Cause my path has lost direction, 因为我已经失去方向Somehow. 不知何故A black winter cue away, 我看见From sight. 黑色的冬季远远暗示Another darkness over day, 黑暗随即降临That night. 那个夜晚天空的云朵离我如此之近And the clouds above move closer,Looking so dissatisfied. 那么阴郁And the ground below grew colder, 地下越来越冰冷As they put you down inside. 当他们把你埋葬之后But the harvest wind kept blowing, blowing. 狂风一个劲不断的刮So now you"re gone, 你走之后And I was wrong. 我完全崩溃I never knew what it was like, 我永远不知道那意味着什么To be alone on a Valentine"s Day, 孤单的情人节To be alone on a Valentine"s Day. 孤单的情人节I used to be my own protection, 我总是会保护好自己But not now. 但这次不会"Cause my path has lost direction, 因为我已经失去方向Somehow. 不知何故
2023-07-15 07:40:052

ming什么牌子

是一个女装平品牌。根据相关信息显示,Ming是一家集设计、生产、销售于一体的女装品牌。现销售的国家包括欧洲英国、土耳其、澳洲、纽西兰、俄罗斯及其这东南亚几个国家。Ming是以欧陆品味的意念,配合东方设计的原素来设定市场定位,此女装品牌的设计专为拥有高尚生活和对设计有要求的时尚女性而设,年龄定位为25-40岁的事业妇性。Ming采用简单和谐的颜色系列,款色集中在设计剪裁和其用料,如特级羊毛,特软的纯棉或有特色新颖的新进口毛料,都是品牌选取的重要原素。
2023-07-15 07:40:061

威海市人民政府的政府组成部门

威海市人民政府办公室威海市发展和改革委员会威海市经济和信息化委员会威海市教育局威海市科学技术局威海市公安局威海市监察局威海市民政局威海市司法局威海市财政局威海市人事局威海市人力资源和社会保障局威海市国土资源局威海市建设委员会威海市交通局威海市水利局威海市农业局威海市林业局威海市海洋与渔业局威海市对外贸易经济合作局威海市文化广电新闻出版局威海市体育局威海市卫生局威海市人口和计划生育委员会威海市审计局威海市环境保护局威海市统计局威海市旅游局威海市安全生产监督管理局威海市民族宗教事务局威海市人民政府外事办公室威海市人民政府侨务办公室 威海市人民政府法制办公室威海市粮食局威海市公安局交通巡逻警察分局 威海市经济技术开发区(出口加工区)管理委员会威海市火炬高技术产业开发区管理委员会 威海市口岸办威海市仲裁委威海市会展办威海市经济合作局威海市中小企业局威海市信息产业局威海市住房公积金管理中心威海市民用航空局威海市地方铁路管理局威海市供销社威海市新闻出版局威海市广播电视台刘公岛管委会威海市畜牧兽医局威海市政府调查研究室威海市机关事务管理局威海市电力开发办威海市职教办威海市贸促会威海市残疾人联合会威海市房管局威海市公路管理局威海市港航管理局威海市农机局威海市史志办威海市行政审批中心
2023-07-15 07:40:081

大卫贝克香水什么档次

中端档。根据查询大卫杜夫香水相关资料得知,大卫贝克香水中端档。大卫杜夫是由季诺大卫杜夫(Zino Davidoff)于1984年创立的品牌,主要包括香水、香烟、服装、厨具等多个系列产品。
2023-07-15 07:40:111

中国的CEO有哪些人名

董思阳、张瑞敏、陶健幸、陈伟荣、倪润峰等
2023-07-15 07:40:113

寻找歌词 marry christmas to you

雪人
2023-07-15 07:40:125

valentine是什么意思?

“happy valentine"s day”的意思是:情人节快乐。“valentine”是“瓦伦丁”。公元270年,罗马圣教徒瓦伦丁被处死,此日被后人定为“情人节”。瓦伦丁节,又称情人节,是欧美和大洋洲的一些国家的民族节日。此节日的来源甚多,但一般是以罗马圣教徒瓦伦丁被处死,后被定为“情人节”较为普通。瓦伦丁节的来历:公元3世纪,罗马帝国出现全面危机,经济凋敝,统治阶级腐败,社会动荡不安,人民纷纷反抗。贵族阶级为维护其统治,残暴镇压民众和基督教徒。是时有一位教徒瓦伦丁,被捕入狱。在狱中,他以坦诚之心打动了典狱长的女儿。他们相互爱慕,并得到典狱长女儿的照顾。统治阶级下令将他执行死刑。在临刑前,他给典狱长女儿写了一封长长的遗书,表明自己是无罪的。表明他光明磊落的心迹和对典狱长女儿深深眷恋。公元270年2月14日,他被处死刑,后来,基督教徒为了纪念瓦伦丁为正义、为纯洁的爱而牺牲自己,将临刑的这一天定为“圣瓦伦节”,后人又改成“情人节”。
2023-07-15 07:40:121

清明节手抄报短句

清明节手抄报短句如下:1、祭先烈,碧空皓月,青松挺皑雪;敬前贤,绿柳青兰,苍松绕紫烟。清明时分,莫道销魂,此情拳拳悄探问,思念殷殷慰故人,路远心犹近,酒薄意深深。2、春意怏然,又到了清明节,曾经的亲人,我们怀念;曾经的烈士,我们铭记;时间可以远去,感情永远存在;让我们都珍惜现在,祝福全家永远和和睦睦!3、工作辛苦,生活太累,清明放假,要多休息。听听音乐,玩玩游戏;放放风筝,野外踏青;要是无聊,发发短信,增进友情,表表心意。4、让哀愁,在鲜花的清香中,飘散;让追求,在舒爽的清风中,拓展;让思念,在清明的问候中,祝愿;朋友,祝你清明节万事顺安,吉祥常伴,快乐绵绵,美好天天!5、莫伤心,快乐年年在你心;莫烦恼,幸福月月把你绕;莫伤感,好运时时把你牵;莫心烦,祝福刻刻在耳边。祝清明节快乐幸福。6、清明节我请你煮一个鸡蛋登山远眺,滚走所有烦恼,眺望美好未来,我祝福你一生都没有烦恼,笑口常开,未来美不胜收。7、又是一年春来到,清明郊游踏青好;忙碌生活要忘掉,心情放松烦恼消;花红柳绿春意闹,幸福幸福来围绕;关怀问候来送上,愿你与健康拥抱!8、布谷鸟叫清明到,朋友心意要收好。愿你幸福少烦恼,财气运气跑不掉。健康从头淋到脚,万事如意心情妙。清明节祝你有个美好的假期。9、一年一度清明节,温馨祝福短信传。暖暖问候添喜气,高高兴兴踏青去。甜甜祝愿添福气,团团圆圆合家欢。幸福生活常相伴,健康快乐永相随。10、清明节临近,春色入画来;桃红梨花白,千树万树开;燕子啄春泥,剪影长空裁;雨近云脚低,红湿左右摆;快乐随身带,踏青走起来;烦恼已无影,阳光心间晒;呼朋又引伴,谈笑尽释怀;春光无限美,俗事已无猜;短信先相告,愿你好心态!11、清明节安慰问候短信阵阵春风吹绿,缕缕春光明心,丝丝春雨润物,声声问候暖情,清明节了,只言片语伴随你,愿你照顾好自己,关心亲人和好友,祝你节日快乐!12、清明节,让人缅怀先辈,令人留恋,令人悲叹,令人振奋,这里面蕴含了许多的先辈们的事迹,当他们入土为安之时,自己的故事就告终了,剩下的,就只有让人怀念了!13、烧柱香,祭奠逝去的岁月;叩回头,缅怀曾经的时光。清明将至,愿你在风雨中昂首,把忧伤释放,让哀愁流浪,然后,收拾心情,面对灿烂的阳光。14、清风明月本无价,近水遥山皆有情,杨柳枝头弄春柔,处处犹存长者风,山花烂漫香盈袖,徐徐清风吹哀愁,浓情蜜意何其重,惜别折尽河边柳,踏青出游亲自然,深深祝福心中留,感恩生命多热情,幸福甜蜜握在手,预祝你清明多快乐,豪情壮志有势头!15、有时祝福是一种负担,但真情的确是内心的珍藏;有时短信是一种负担,但牵挂总祈祷着安康。清明节到了,纵使难以开口纵使情绪复杂,都愿你一切顺利。
2023-07-15 07:40:201

哈博森zinopro+云台异常故障码0x0100,是什么问题呢?

哈博森zinopro云台异常故障码0x0100通常表示云台电机过载保护。这可能是由于云台电机负载过重、电源电压不稳定或云台电机内部故障等原因导致的。解决方法包括检查云台电机是否正常、检查电源供电是否稳定以及检查云台电机内部连接是否良好。如果问题仍然存在,建议联系厂家或售后人员寻求帮助。
2023-07-15 07:39:551

marry marry Christmas only only Christmas是哪首歌里的歌词?

额~歌词有些错误这是陈奕迅的歌 我住的城巿从不下雪 The city I lived never snow 记忆却堆满冷的感觉 But fulfilled the cold feeling in memory 思念的旺季霓虹扫过喧哗的街 In missing midseason, Neon lighted on the roaring road 把快乐赶得好远 Drive the happiness far away *落单的恋人最怕过节 A lonely lover was afraid to celebrate a festival 只能独自庆祝尽量喝醉 Only drunken to enjoy alone 我爱过的人没有一个留在身边My beloved did not stay with me 寂寞它陪我过夜 Loneliness accompany me in night #marry marry Christmas lonely lonely Christmas想祝福不知该给谁 My wish should give to whom 爱被我们打了死结 our love has finished lonely lonely Christmas marry marry Christmas 写了卡片能寄给谁 the card should sent to whom 心碎的像街上的纸屑 the broken heart was just like the wastepaper repeat *# 电话不接不要被人发现我整夜都关在房间 not answer the call, then nobody will find me in the locked room whole night 狂欢的笑声听来像哀悼的音乐 the mad laughing sounds like wailful music 眼眶的泪温热冻结望著电视里的无聊节目 the tears in eyes were still warm. Staring the boring show in TV 瘫在沙发上变成没知觉的植物 Lose sense on sofa repeat ## 谁来陪我过这圣诞节who will enjoy Christmas with me?
2023-07-15 07:39:521

拼音是ming的汉字

拼音是ming的汉字:1、明(míng),8画,左右结构,部首:曰(日)组词:明天(míng tiān) | 明年(míng nián) | 明白(míng bai) | 清明节(qīng míng jié) | 高明(gāo míng) | 窗明几净(chuāng míng jī jìng) |2、名(míng),6画,上下结构,部首:夕组词:名胜古迹(míng shèng gǔ jì) | 名声(míng shēng) | 著名(zhù míng) | 举世闻名(jǔ shì wén míng) | 风景名胜(fēng jǐng míng shèng) | 美名(měi míng) |3、命(mìng),8画,上下结构,部首:人组词:拼命(pīn mìng) | 救命(jiù mìng) | 奉命(fèng mìng) | 短命(duǎn mìng) | 命令(mìng lìng) | 丧命(sàng mìng) |4、鸣(míng),8画,左右结构,部首:口组词:电闪雷鸣(diàn shǎn léi míng) | 鸡鸣狗吠(jī míng gǒu fèi) | 轰鸣(hōng míng) | 嘶鸣(sī míng) | 鸣笛(míng dí) | 悲鸣(bēi míng) |5、瞑(míng),15画,左右结构,部首:目组词:瞑目(míng mù) | 死不瞑目(sǐ bù míng mù) | 瞑思苦想(míng sī kǔ xiǎng) | 甘心瞑目(gān xīn míng mù) | 榆瞑豆重(yú míng dòu zhòng) | 一瞑不视(yī míng bù shì) |6、名(mìng),6画,上下结构,部首:夕组词:命名(mìng míng) |7、冥(míng),10画,上下结构,部首:冖组词:冥思(míng sī) | 幽冥(yōu míng) | 冥合(míng hé) | 冥灵(míng líng) | 北冥(běi míng) | 青冥(qīng míng) |8、铭(míng),11画,左右结构,部首:钅组词:铭记(míng jì) | 碑铭(bēi míng) | 铭刻(míng kè) | 铭文(míng wén) | 铭心(míng xīn) | 铭牌(míng pái) |9、螟(míng),16画,左右结构,部首:虫组词:二化螟(èr huà míng) | 螟虫(míng chóng) | 螟蛉(míng líng) | 螟蛉之子(míng líng zhī zǐ) |10、溟(míng),13画,左右结构,部首:氵组词:重溟(zhòng míng) | 苍溟(cāng míng) | 沧溟(cāng míng) | 北溟(běi míng) |11、暝(míng),14画,左右结构,部首:曰(日)组词:暝色(míng sè) | 晦暝(màn míng) | 风雨晦暝(fēng yǔ huì míng) | 柳昏花暝(liǔ hūn huā míng) | 一暝不视(yī míng bù shì) |12、茗(míng),9画,上下结构,部首:艹组词:品茗(pǐn míng) | 焙茗(bèi míng) | 香茗(xiāng míng) | 杯茗之敬(bēi míng zhī jìng) |13、酩(mǐng),13画,左右结构,部首:酉组词:酩酊(mǐng dǐng) | 酩酊大醉(mǐng dǐng dà zuì) | 酩酊烂醉(mǐng dǐng làn zuì) |14、佲(mǐng),8画,左右结构,部首:亻15、慏(mǐng),13画,左右结构,部首:忄16、凕(mǐng),12画,左右结构,部首:冫17、姳(mǐng),9画,左右结构,部首:女18、洺(míng),9画,左右结构,部首:氵19、眀(míng),9画,左右结构,部首:目20、詺(míng),13画,左右结构,部首:言21、蓂(míng),13画,上下结构,部首:艹22、眳(míng),11画,左右结构,部首:目23、鸣(míng),14画,左右结构,部首:鸟24、朙(míng),11画,左右结构,部首:月25、鄍(míng),12画,左右结构,部首:阝26、嫇(mǐng),13画,左右结构,部首:女27、嫇(míng),13画,左右结构,部首:女28、猽(míng),13画,左右结构,部首:犭29、榠(míng),14画,左右结构,部首:木30、铭(míng),14画,左右结构,部首:釒31、覭(míng),17画,左右结构,部首:见
2023-07-15 07:39:511

为什么德芙和多芬的英文是一样的?

都是DOVE 但是DOVE巧克力其实是DO loVE的缩写 就是"真的喜欢"的意思。而多芬不是缩写,纯粹就是个音译。
2023-07-15 07:39:501

威海市人力资源和社会保障局的事业单位

您好,您的问题我已经看到了,正在整理答案,请稍等一会儿哦~
2023-07-15 07:39:482

才入手一部DELL zino,个性化配置,顶配。CPU,显卡,硬盘温度都很高,CPU在50%使用率时,CPU温度基本在70

买个笔记本散热风扇试试吧
2023-07-15 07:39:484

“我爱过的人没有一个留在我身边,寂寞陪我过夜”这是什么歌?要歌手,全部歌词。

歌曲:圣诞结(广东版 lonely christmas)歌手:陈奕迅 打印预览 我住的城巿从不下雪记忆却堆满冷的感觉思念的旺季霓虹扫过喧哗的街把快乐赶得好远*落单的恋人最怕过节只能独自庆祝尽量喝醉我爱过的人没有一个留在身边寂寞它陪我过夜#marry marry christmas lonely lonely christmas 想祝福不知该给谁爱被我们打了死结lonely lonely christmas marry marry christmas 写了卡片能寄给谁心碎的像街上的纸屑repeat *#电话不接不要被人发现我整夜都关在房间狂欢的笑声听来像哀悼的音乐眼眶的泪温热冻结望著电视里的无聊节目瘫在沙发上变成没知觉的植物repeat ##谁来陪我过这圣诞节
2023-07-15 07:39:432

矮的英文怎么说

short
2023-07-15 07:39:354

清明节怎样画手抄报

清明节画手抄报步骤如下:材料准备:纸,黑笔,彩笔。操作步骤:1、首先在左侧写上主题,并在主题下方画上一艘小船,船上坐着一位打着伞的人,在小船两边画上船桨,周围画上一些荷叶。2、继续在右边画是一个大的荷叶边框,并在荷叶边框上方画上一个方形边框,在右侧继续补充一些荷叶,完整的手抄报布局就完成了。3、开始涂色,先给整个手抄报的背景涂上蓝色,淡淡的蓝色给人的感觉是忧伤的,给荷叶全部涂上绿色。4、再来给小船和船桨涂黄色,雨伞涂上浅黄色,荷叶边框涂绿色,方形边框涂橘黄色,给主题边缘涂上阴影。5、最后在边框中画上横线,并用高光笔在画面上画上雨滴,横线上可以摘抄一些清明节的诗句,典故,起源等资料,也可以自己写一些清明节的话。这样一份简单漂亮的清明节手抄报就完成了。清明节的由来:1、清明节的起源,据传始于古代帝王将相“墓祭”之礼,后来民间亦相仿效,于此日祭祖扫墓,历代沿袭而成为中华民族一种固定的风俗。本来,寒食节与清明节是两个不同的节日,到了唐朝,将祭拜扫墓的日子定为寒食节。2、清明节还来源于我国农历24节气中的清明节气。冬至后第105天就是清明节气。清明节气共有15天。
2023-07-15 07:39:321