编程语言
程序员plus
这个作者很懒,什么都没留下…
展开
-
解决Java应用程序中的应用程序性能
如果你是Java开发人员,则可能需要听一些提示以保持应用程序的性能。在解决与NFR相关的问题(尤其是应用程序性能)时,我总是在思考为什么我们作为开发人员对性能的重视程度较低(总是存在荣誉例外)。这是由于缺乏认识吗?很多时候,我们仅在性能测试时或部署后才开始考虑性能。速度(速度)和体积(大小)的增加已影响到我们的日常生活:我们的手机已从2G变为4G,而40-80 GB的硬盘曾经是一种奢侈...原创 2020-04-08 11:11:11 · 409 阅读 · 0 评论 -
在Tomcat中混合密钥
通过优锐课核心java学习笔记中,我们可以看到,码了很多专业的相关知识, 分享给大家参考学习。深入了解Tomcat,了解如何创建自签名RSA密钥,ECDSA密钥,以及如何通过多次保留验证Tomcat。在上一篇博客文章中,我们研究了Tomcat 8.5+如何使用SNI将证书映射到请求的主机名。Tomcat 8.5+可以更进一步,并为每个主机支持多种证书类型。 这对于在较旧的浏览器中...原创 2020-03-27 11:09:30 · 370 阅读 · 0 评论 -
程序员真不是青春饭
程序员,尤其是互联网行业,永远没有青春饭一说,仍然是可持续发展,回报率较高的行业。如果你觉得它是青春饭,说明你还没有找到这个岗位可持续发展的钥匙。不管你在IT行业待几年,互联网思维会让你受用终生。有网友留言咨询:「哥,你好,我是一名26岁的女生,土想从事前端开发,现在还来得及吗?」我看见这条消息之后,便简短地回复了一下:只要你热爱它,一切都来得急。回复完之后,她又发来一条消息:「可I...原创 2019-08-17 17:05:57 · 258 阅读 · 0 评论 -
微服务架构-使用Docker进行Spring Boot开发
优锐课学习笔记中研究了如何将容器带入Spring Boot项目。 在这里,我们使用Docker来包含Java REST后端,而无需担心操作系统。一起来看看AtSea Shop是示例店面应用程序,可以部署在不同的操作系统上,并且可以针对企业开发和运营环境进行自定义。 在较早的帖子中,我讨论了该应用程序的体系结构。 在本文中,我将介绍如何设置开发环境以调试在容器中运行的Java REST后端。1、...原创 2019-12-12 12:03:42 · 262 阅读 · 0 评论 -
高并发编程系列:4种常用Java线程锁的特点,性能比较、使用场景
多线程的缘由在出现了进程之后,操作系统的性能得到了大大的提升。虽然进程的出现解决了操作系统的并发问题,但是人们仍然不满足,人们逐渐对实时性有了要求。使用多线程的理由之一是和进程相比,它是一种非常花销小,切换快,更”节俭”的多任务操作方式。在Linux系统下,启动一个新的进程必须分配给它独立的地址空间,建立众多的数据表来维护它的代码段、堆栈段和数据段,这是一种”昂贵”的多任务工作方式。而在进程...原创 2019-07-29 16:44:45 · 583 阅读 · 0 评论 -
Linux中文件和目录管理
1、Linux命令1)Shell命令解释器:负责接收用户输入的命令并解释,将需要执行的操作传递给系统内核bash:默认的Shell,位于/bin/bash内部指令:集成在Shell中,没有独立的程序文件,执行效率更高外部指令:能够完成特定功能的脚本文件或二进制程序注:可通过/etc/shells文件或chsh -l命令查看当前系统支持的shell2)命令格式命令字 [命令选项] [命...原创 2019-07-14 20:33:08 · 220 阅读 · 0 评论 -
Spring的连接数据库以及JDBC模板(实例讲解)
前言今天介绍的是关于Spring的数据库连接以及Jdbc模板的相关API方法,虽然在学习了hibernate之后,会知道实现数据库连接一般都是使用hibernate等持久化框架来实现的。但是,很多时候一些涉及到事务的东西使用这些框架并不能够实现,所以我们还需要结合spring来实现相关的需要。一、创建工程、导包要想使用Spring的jdbc模板前,还需要导入相关的jar包:二、进行相关的...原创 2019-07-15 11:54:49 · 2327 阅读 · 0 评论 -
JAVA开发异常处理十大秘诀
1.前提 第一层:遇到异常首先必须告诉自己,冷静,不要慌。(一看到Bug就心慌,那么武功就施展不了了)2.入门级第二层:遇到Bug,第一潜意识看输出异常的信息的(控制台输出,Junit输出,页面输出),优先将异常输出在控制台。建议:遇到JUnit异常输出,最好转成控制台输出。(对测试方法的代码try catch )如:一下异常如果在Junit查看,不好发现为,只知道是数据库出错了。转...原创 2019-07-23 20:22:18 · 173 阅读 · 0 评论 -
面试官最喜欢问的:多线程、线程并发面试题详解(volatile+ThreadLocal+Sleep)
1、什么是线程?线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位。程序员可以通过它进行多处理器编程,你可以使用多线程对运算密集型任务提速。比如,如果一个线程完成一个任务要100毫秒,那么用十个线程完成改任务只需10毫秒。2、线程和进程有什么区别?线程是进程的子集,一个进程可以有很多线程,每条线程并行执行不同的任务。不同的进程使用不同的内存空间,而所有的线程...原创 2019-07-23 20:33:44 · 429 阅读 · 0 评论 -
@程序员,不会 Debug 还做什么开发?
原文地址:原文地址转自 知乎—架构师每个大程序里都有一个不安分的小程序”,想要成为一名好的开发人员,你得先真正学会 Debug 才行。以下为译文:总结我的编程生涯,可以得出如下两个硬道理:任何代码都可能出错,而且肯定会出错。代码有味道。而中和这些苦涩现实的唯一方法就是调试(Debug)。没错,就是调试。在刚开始接触编程的时候,没人会喜欢调试。相反,调试往往是沮丧和恐惧的根源。很多人...转载 2019-07-23 20:40:10 · 161 阅读 · 0 评论 -
干货分享:新晋程序员不知道的25个编程小技巧
如果只是周而复始地写代码,想必编程的工作会让很多程序员发狂。如何在看似枯燥的工作寻找乐趣,我认为对工作的激情和兴奋感、始终学习的态度,还有掌握一些实用高效的编程技巧,对于提升工作乐趣和效率大有裨益。今天我就跟大家分享一下25个实用编程小技巧,希望可以给大家的工作和学习带来更多的思考。不要毫无计划地写代码,思考、调研、计划、编码、测试、修改,一个都不能少;不要写代码前过度计划,在一头钻...原创 2019-07-02 11:27:03 · 185 阅读 · 0 评论 -
程序员工资高于其它岗位,并且还越涨越高,停不下来了?
短短二三十年,国内经济蓬勃发展,互联网出现之后,国内不仅诞生了BAT这种超级公司,还有很多的小巨头也层出不穷。另外,传统行业逐渐开始结合互联网,这就导致整个市场都迫切需要技术人才,没有优秀的技术人才,这些具体的工作就没有人做。对于许多企业当时刚入职的程序员的薪水,都高于社会平均工资好多。说句开玩笑的话,只看见贼吃肉,没看到贼挨打。工资高,大概有如下几点:1、IT行业从出现至今一直都是求职者的热...原创 2019-06-26 10:52:09 · 593 阅读 · 0 评论 -
带你走进Java集合-HashMap的扩容机制-resize()
HashMap的底层数据结构是数组+链表+红黑树,我们知道数组的长度是固定的,所以涉及到扩容的概念,在HashMap中resize()方法就是完成这项工作的。resize()方法有两个主要的作用:1:初始化底层数组table2:进行扩容接下来我们从源码角度分析以下:第一段:映入眼帘的是获取当前的数组和扩容的阀门//把当前底层数组赋值给oldTabNode<K,V>[] o...原创 2019-05-24 11:24:39 · 1222 阅读 · 0 评论 -
单点登录的三种实现方式
在我实习之前我就已经在看单点登录的是什么了,但是实习的时候一直在忙其他的事,所以有几个网站就一直躺在我的收藏夹里边:在前阵子有个读者来我这投稿,是使用JWT实现单点登录的(但是文章中并没有介绍什么是单点登录),所以我觉得是时候来整理一下了。简单代码实现JWT(json web token)完成SSO单点登录一、什么是单点登录?单点登录的英文名叫做:Single Sign On(简称SSO...原创 2019-05-28 14:57:05 · 8621 阅读 · 2 评论 -
java学习的八大忌
1.人云亦云,没有思想好多人就是听了个Java收入高,不是相关行业的要转行,不是相关专业的就要自学,就要培训。但是自己没有对自己进行过评估,跟风就上,不是说一定学不好,而是对于大部分这种情况来说确实不易。初学少则学习数月,多则一二年,尚不知人最宝贵的并非金钱,而是时间。2.一叶障目,七零八碎好多吧友学Java就知道是Java用来开发网站和软件,其实软件开发的范畴要比Java大的多。本人网站没...原创 2019-06-05 14:10:10 · 236 阅读 · 0 评论 -
Java并发编程系列:线程的五大状态,以及线程之间的通信与协作
今天主要分享多线程状态流转与通信,这也是面试中必考的基础知识点。01多线程的基本概念1.进程进程是操作系统进行资源分配和调度的基本单位。2.线程线程是进程中的一个执行单元,负责当前进程中程序的执行,一个进程中至少有一个线程。3.多线程什么是多线程呢?即就是一个程序中有多个线程在同时执行。02线程的生命周期java中每个线程都需经历新生、就绪、运行、阻塞和死亡五种状态,线程从...原创 2019-07-29 15:46:05 · 285 阅读 · 0 评论 -
为什么说麻将比围棋难?游戏AI复杂度怎么算
在游戏AI的缘起与进化一文中我们讲到,游戏 AI 的进化始终与 AI 研究相生相伴,这是由于游戏种类丰富,难度和复杂性也很多样,人工智能攻克不同类型的游戏自然也反映了 AI 研究的进展,因此长期以来游戏一直是 AI 研究的黄金测试平台。随着人工智能逐个攻克双陆棋、国际跳棋、国际象棋、围棋等棋类游戏,AI 仍在继续挑战难度更高的游戏,例如扑克、桥牌、麻将这类不完美信息游戏。那么为什么这类游戏的难度...原创 2019-08-16 16:59:04 · 2854 阅读 · 1 评论 -
面试题解答系列:ISO/OSI七层模型,包括TCP,IP的一些基本知识
1.ISO/OSI七层模型下四层是为数据传输服务的,物理层是真正的传输数据的,数据链路层、网络层、传输层主要是写入对应数据的传输信息的物理层:比特设备之间的比特流的传输、物理接口、电气特性数据链路层:帧保存的最主要的信息是网卡的 mac 地址,mac 地址负责局域网通信的,发件人和收件人的mac 地址mac地址的作用:尽管你是要在互联网中传输数据(貌似需要IP地址就可以了),但是在互联...原创 2019-08-01 18:03:31 · 1200 阅读 · 0 评论 -
TCP/IP体系结构
一、简介1、传输控制协议/网络互联协议,是针对Internet开发的一种体系结构和协议标准,相对于OSI体系结构更简洁。2、结构类型:分层体系,由下至上分别是网络接口层、网际层、传输层和应用层(四层分法)。3、TCP/IP协议与OSI模型的对应关系(五层分法)。二、TCP/IP体系结构1、应用层:为用户的应用程序提供接口,使用户可以访问网络。(IE浏览器就处于应用层)HTTP 超...原创 2019-08-01 17:50:28 · 2197 阅读 · 0 评论 -
面试题解答系列:同步与异步,阻塞与非阻塞的关系
这几个知识点其实用处很多,也是很容易搞混的,我们平时可能用了但是并没有发现,今天想来总结一下。我第一次感受到同步和异步的不同是在学习volatile的时候(因为我之前也没有多线程概念),之前也被同步啊这些概念搞的很乱。当我主线程新建了一个子线程之后两个线程是同时运行的,当时我才发现原来他们不是串行的,献丑了。好了进入正题。从总体来看,同步和异步的概念是大于阻塞与非阻塞,并且他们之间没有对应关系...原创 2019-08-01 17:29:13 · 826 阅读 · 0 评论 -
简单理解散列表(如py的dict)的内部机制:实现、冲突和散列函数
我们知道,数组利用下标可以随机访问数组下标对应的值,相对于链表的顺序访问,数组的下标访问是最快的(常量时间,二分查找是对数时间)。如果反过来,怎样才能由数组的值访问到其下标的值?或者,如果存储了一份商品价格表(商品名称、价格),怎样才能通过商品名称随机访问到其价格呢?通过散列表(散列,来自英文字hash,也有翻译成哈希的,散列表有时也叫哈希表、关联数组),可以实现此目的。数据在内存中的物理存...原创 2019-07-26 18:59:30 · 323 阅读 · 0 评论 -
面试解答系列:什么是Spring的依赖注入?哪些方法进行依赖注入?
Spring 能有效地组织J2EE应用各层的对象。不管是控制层的Action对象,还是业务层的Service对象,还是持久层的DAO对象,都可在Spring的 管理下有机地协调、运行。Spring将各层的对象以松耦合的方式组织在一起,Action对象无须关心Service对象的具体实现,Service对 象无须关心持久层对象的具体实现,各层对象的调用完全面向接口。当系统需要重构时,代码的改写量将大...原创 2019-07-31 16:59:11 · 4776 阅读 · 0 评论 -
Java多线程之Executor框架「Callable、Future和Executor」
引言Executor框架是指JDK 1.5中引入的一系列并发库中与Executor相关的功能类,包括Executor、Executors、ExecutorService、Future、Callable等。一、为什么要引入Executor框架?1、如果使用new Thread(…).start()的方法处理多线程,有如下缺点:① 开销大。对于JVM来说,每次新建线程和销毁线程都会有很大的开销...原创 2019-07-22 19:56:19 · 605 阅读 · 0 评论 -
Socket 通信原理
整理和总结了一下大家常遇到的问题:1. 客户端socket发送消息后,为什么服务端socket没有收到?2. 使用while 循环实现连续输入,是不是就是多线程模式?3. 对多线程处理机制不是很明白,希望详细讲解?4. 希望详细讲解ServerSocketChannel和SocketChannel与ServerSoket和Socket的区别?5. 希望有详细的例子,可以...原创 2019-07-30 18:19:08 · 5832 阅读 · 0 评论 -
面试题系列:谈谈HTTP的请求和响应
HTTP是HyperText Transfer Protocol的缩写,意思是超文本传输协议。它是一种应用层协议,允许基于WEB的应用程序进行通信和交换数据。你可以把HTTP看作是网络的信使。HTTP是基于TCP/IP协议的,可以使用http进行内容的传输,比如图片,视频,音频,文档等等。客户端和服务端需要进行通信的话,通常会使用request response cycle的形式。客户端需...原创 2019-07-30 17:11:24 · 484 阅读 · 0 评论 -
简单聊聊volatile关键字的原理
volatile这个关键字他主要做两个事情,一个是禁止重排序,一个是内存可见性。一、禁止重排序先做一个思考,为什么要禁止重排序?回答这个问题之前先想想为什么要重排序?我们可以这么理解,举个例子,我们的代码是这个样子:a=1+1;c=24b=3+2;单核cpu会是这么计算,先算a=a+1,再算b=b+1,最后是c=ab;这么算自然是没有问题的,但是我们希望计算机的速度更快,假设原先C...原创 2019-07-30 16:19:09 · 172 阅读 · 0 评论 -
村干货:25道经典Java算法题
即使做web开发,也会遇到各种各种需要解决的算法问题,本文节选部分经典练手算法,并提供相关参考答案,希望对你有所帮助【程序1】题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? //这是一个菲波拉契数列问题public class test01 {public static void main(S...原创 2019-07-24 20:07:06 · 231 阅读 · 0 评论 -
高并发编程系列:CountDownLatch、Semaphore等4大并发工具类详解
通常我们所说的并发包也就是java.util.concurrent,Java并发编程集中在这个并发包种,主要包含:Java并发工具类和并发容器等。今天主要介绍concurrent包的内容以及4大并发工具类。并发工具包1.并发工具类提供了比synchronized更加高级的各种同步结构:包括CountDownLatch、CyclicBarrier、Semaphore等,可以实现更加丰富的多...原创 2019-07-29 15:59:33 · 903 阅读 · 0 评论 -
并发编程系列:Java线程池的使用方式,核心运行原理、以及注意事项
并发编程系列:高并发编程系列:4种常用Java线程锁的特点,性能比较、使用场景线程池的缘由java中为了提高并发度,可以使用多线程共同执行,但是如果有大量线程短时间之内被创建和销毁,会占用大量的系统时间,影响系统效率。为了解决上面的问题,java中引入了线程池,可以使创建好的线程在指定的时间内由系统统一管理,而不是在执行时创建,执行后就销毁,从而避免了频繁创建、销毁线程带来的系统开销。线...原创 2019-07-29 15:49:23 · 145 阅读 · 0 评论 -
Spring、SpringMVC、SpringBoot的各析
在本文中,你将获取到有关于Spring,Spring MVC和Spring Boot的概述,了解他们解决的问题以及最佳的应用位置。最重要的是Spring,Spring MVC和Spring Boot不会矛盾。他们很好的解决了不同的问题。1.Spring框架解决的核心问题是什么?好好想想,Spring Framework解决了什么问题?Spring Framework最重要的特性是依赖注入所...原创 2019-05-28 13:30:36 · 337 阅读 · 0 评论 -
java程序猿面试你总会碰到的基础知识点
java中的基本数据类型图片描述(最多50字)说说&和&&的区别&和&&都可以用作逻辑与的运算符,表示逻辑与(and),当运算符两边的表达式的结果都为true时,整个运算结果才为true,否则,只要有一方为false,则结果为false。&&还具有短路的功能,即如果第一个表达式为false,则不再计算第二个表达式,例如,对于i...原创 2019-05-28 11:21:39 · 187 阅读 · 0 评论 -
带你走进Java集合-HashMap源码-put方法的源码解析
本篇文章内容较长,请耐心观看,相信对您理解HashMap的put方法会有所帮助。在HashMap中put方法的源码如下:public V put(K key, V value) {return putVal(hash(key), key, value, false, true);}这个put方法并没有做任何的操作,直接把任务交给了putVal方法。我们接下来去看putVal方法。首先贴出...原创 2019-05-23 19:48:04 · 346 阅读 · 0 评论 -
Copy GC(5): Parallel GC(下)
接Copy GC(4)继续,我们看一下push_contents的实现:inline void oopDesc::push_contents(PSPromotionManager* pm) {// 每一个Java Class在JVM内部都会对应一个Klass结构。每一个Klass中都记录// 了每个类有多少具体的域,这样我们就能通过这个Klass来计算每个实例的大小// 以及遍历这个对象所...原创 2019-05-26 11:07:00 · 490 阅读 · 0 评论 -
Java Web Server(4) :Servlet
在ASP流行的那个时代,人们都习惯于把业务脚本和各种网页元素混在一起写。所以很多人对于从ASP切换到JSP都觉得很自然。反倒是,对于Java Web容器中定义的servlet,很多人觉得这个东西画蛇添足,不知道为什么要搞个这么啰嗦的东西出来。我们来体验一下。还是进到前几节课所使用的root目录。新建一个Java文件,叫做DemoServlet.java:import java.io.IOEx...原创 2019-05-26 11:01:50 · 185 阅读 · 0 评论 -
Java Web Server(3): Ajax
我们上节课讲了一下JSP,大家掌握其中的思想就好了。至于JSP的更多知识,现在其实已经没有用了,因为直接使用JSP做web开发已经不会再有人用了。这是古代的编程知识。关于服务端的知识,我们先暂停一下,从http协议的角度去学习一个前端知识。在前端技术中,有一个非常重要的技术,叫做 ajax。我们先展示一个 ajax 的例子,再去看一下这个技术的实质。AJAX用例在很多应用中,我们其实不想去刷...原创 2019-05-26 10:56:08 · 207 阅读 · 0 评论 -
Java Web Server(2): JSP
今天继续Java Web相关的知识。我们知道,在一个网页中,如果要与用户进行交互,那么至少得允许用户将自己的输入提交到服务端。今天就介绍最原始,最基本的一种方法。这种方法就是使用 html 的 form 标签。表单form 标签,我们通常称之为表单,是一种 html 标签,它的作用就是把定义在它内部的用户数据上交给服务端。我们做一个例子,就知道了,我们修改一下上节课的index.jspfo...原创 2019-05-26 10:52:27 · 280 阅读 · 0 评论 -
Java Web Server(1): 基础篇 海纳
今天起,我们来写一个简单的web server,争取把这些疑惑都能解决了。一个不退出的Web Server上节课留的作业是让读者自己实现一个server,可以在客户端请求结束以后,不必退出。评论区有人说可以使用线程,这确实是一个最简单的方案。我们来实现一个:public class TcpServer {public static void main(String[] args) {tr...原创 2019-05-26 10:50:07 · 269 阅读 · 0 评论 -
java生成随机数方法大全(可指定范围、分布方式、类型、种子)
import java.util.Random;/**Java实用工具类库中的类java.util.Random提供了产生各种类型随机数的方法。它可以产生int、long、float、double以及Goussian等类型的随机数。java.lang.Math中的方法random()只产生double型的随机数。*/public class RandomNumber {public ...原创 2019-05-16 17:49:56 · 3488 阅读 · 0 评论 -
Java 正则表达式
Java 正则表达式正则表达式定义了字符串的模式。正则表达式可以用来搜索、编辑或处理文本。正则表达式并不仅限于某一种语言,但是在每种语言中有细微的差别。Java正则表达式和Perl的是最为相似的。java.util.regex包主要包括以下三个类:Pattern类:pattern对象是一个正则表达式的编译表示。Pattern类没有公共构造方法。要创建一个Pattern对象,你必须首先...原创 2019-05-16 16:53:29 · 125 阅读 · 0 评论 -
Java 实现线程安全的三种方式
Java程序设计中引入了循环语句。循环语句总共有三种常见的形式:for 语句、while 语句、do/while语句。下面将逐个进行详细的介绍。一.for 语句for 语句的基本结构如下所示:for(初始化表达式;判断表达式;递增(递减)表达式){执行语句; //一段代码}初始化表达式:初始化表达式的意义,在于定义循环之前变量的值是多少,如果没有这一项,就不知道该从哪个值开始循环。判断...原创 2019-05-14 19:33:13 · 742 阅读 · 0 评论