JAVA
java学习之路
骚小孩呀
这个作者很懒,什么都没留下…
展开
-
我理解的分布式
传统模式:比如说拿一个商城来举例子,就是我的添加购物车,下单,支付,扣减优惠卷,增加积分等一系列操作全部在一个系统上,那么当我并发超过负载,那么就全崩了。还有啊,比如我要修改下单的某个bug,那么我就需要把整个系统拿过来修改然后重新部署。随着业务的发展和并发量的发展,要求越来越高,那么为了我们开发轻便,所以产生了分布式。分布式模式:商城系统在分布式模式中,那么添加购物车,下单,支付,扣减优惠卷,增加积分这些操作都可以分为单应用。当我们一个应用down掉,那么不会导致全部崩掉,我们快速拿去有问原创 2020-07-22 15:33:57 · 287 阅读 · 0 评论 -
Maven构建多个环境,自动切换配置文件
预想效果:通过这里进行环境切换,来达到不同环境的配置1.修改pom文件因为我项目中有很多子模块,所以我直接修改的父类文件进行统一切换。 <profiles> <profile> <id>dev</id> <properties> ...原创 2020-04-24 16:45:09 · 867 阅读 · 0 评论 -
分享几个基础但是非常有意思的小题
1.2.3.4.答案见下方:1. false2. 1 bbbbb3. 0104.022原创 2020-02-13 14:06:36 · 156 阅读 · 0 评论 -
双重检查锁的问题与解决
在我们写单例的时候,我们可能会有如下写法:public class Test{ private static Instance instance; public synchronized static Instance getInstance(){ if(instance == null){ //1 ...原创 2019-11-04 17:27:22 · 246 阅读 · 0 评论 -
final与线程安全的关系?
对于final域,编译器和处理器遵循两个重排序规则:在构造函数内对一个final域的写入,与随后把这个被构造对象的引用赋值给另一个引用变量,这两个操作之间不能重排序。 初次读一个包含final域的对象的引用,与随后初次读这个final域,这两个操作之间不能重排序。我测试了半天没测出来。。。public class Test { static Test test; int i; ...原创 2019-10-26 23:58:03 · 1690 阅读 · 0 评论 -
netty与websocket如何实现参数传递
Websocket:Websocket是HTML5新增加的协议,在服务器与浏览器之间建立一个不受限的双向通道,可以实现服务器主动向浏览器推送消息。Websocket是利用Http协议来实现的。webscoket连接是都是通过浏览器发起的。他的建立连接请求是一个http请求。请求格式如下:GET ws://localhost:3000/ws/chat HTTP/1.1Host: ...原创 2019-10-22 11:36:37 · 7662 阅读 · 2 评论 -
JAVA虚拟机性能监控与故障处理工具
JDK中包含了一些性能监控与故障处理的工具,可以让我们进一步的了解程序的运行。一起看一下常用的小工具:jps:虚拟机进行状况工具他的功能与linux中的ps命令相似,可以列出正在执行的虚拟机进程。命令格式:jps [ options ] [ hostid ]jps常用参数 选 项 作 ...原创 2019-08-06 19:15:22 · 4102 阅读 · 0 评论 -
JAVA对象的创建过程
今天分析一条指令:Demo demo = new Demo();这个Demo对象(普通对象)到底是咋来的?来看一张图:在图中可以清楚的看到jvm在创建对象时候的执行流程,下面具体讨论一下每个步骤:在程序进行加载的时候,他的类信息,常量,静态变量等数据就会存放在方法区(常量池)中。在执行new操作的时候,就会去方法区去寻找我们相应创建类的信息,如果找到的话执行下一步,...原创 2019-08-01 18:00:16 · 4216 阅读 · 0 评论 -
JAVA设计模式之简单工厂
简单工厂指实现统一的接口,编写不同的实现类去实现不同的创建,在创建对象的时候在工厂中通过反射加多态的方式去创建对象。首先统一接口:public interface Fruit { void get();}不同的实现类:public class Apple implements Fruit{ @Override public void get() { System....原创 2019-08-05 21:40:20 · 286 阅读 · 0 评论 -
JVM垃圾回收算法实现
在JVM对垃圾进行回收的时候,需要对对象进行判断是否还“存活”,因为进行回收的时候需要保证在一致性的快照上进行,需要停顿下来进行垃圾回收。1.如果对逐渐检查这里边的引用的话,那么必然会消耗大量的时间,怎么去减少这个时间呢?目前大部分java虚拟机使用的是准确式GC,这样当执行系统停顿下来,并不需要一个不漏地检查完有执行上下文和全局的引用位置。在HotSpot虚拟机中,是使用一种OopMap...原创 2019-08-05 11:52:11 · 327 阅读 · 0 评论 -
i=i++深入解释
以下内容是在JAVA虚拟机中探究,学习C语言的小伙伴请自行绕开一道基础的题目:int i=0;i=i++;i=??执行结果:0;why??不应该是1吗?大脑中快速飞过计算步骤:i初始化位0,题目中是i++,所以先进行i=i,i=0;然后进行自加操作:i=1;看似完美的步骤,其实是错的,难受哦。。。那就往他祖坟上刨一下子:int是基本类型,存在于栈中...原创 2019-07-31 21:57:55 · 14875 阅读 · 41 评论 -
JVM之类文件结构
1.java是一门跨平台的语言,那么跨平台到底是怎么实现的代码编译的结果 从本地机器码转化为字节码,是存储格式发展的一小步,确实编程语言的一大步。计算机虽然只能识别0和1,但是将编写的程序编译成二进制本地机器码已经不在是唯一的选择,越来越多的程序语言选择了与操作系统和机器指令集无关,平台中立的格式作为程序编译后的存储格式。但是单有储存格式还是不够的,还要有能够运行他的虚拟机,虚拟机并不和任何语...原创 2019-08-13 23:02:24 · 2616 阅读 · 0 评论 -
浅谈JAVAWEB交互
javaweb交互是一个很简单的事情,我们一起看一下:以最经典的mvc模式为例:解释:在javaweb中,程序一般放在tomcat中运行,用户访问网页,tomcat首先解析路径,然后跳转到自己的资源中。这样就可以看到静态界面。如果用户发起请求,一般前端发起请求主要有form表单,ajax进行请求,当然也可以直接url进行请求(默认方法get)。java中有一个servlet...原创 2019-08-15 15:14:38 · 324 阅读 · 0 评论 -
浅谈JAVA反射机制
什么是反射?在java核心卷一给出的概括:能够分析类能力的程序称为反射,可以在运行时分析类能力,运行时查看对象。按照我的理解就是:探索类的信息 动态的进行类操作(不知道怎么描述)在理解反射以前先来过一下java对象的创建过程:首先肯定要编译,即javac,将java程序编译成字节码。 然后由ClassLoader将class信息进行加载加载到方法区,在这个过程中执行sta...原创 2019-08-20 23:10:47 · 1565 阅读 · 0 评论 -
对象到底什么样呢?
本文讨论java对象!JAVA对象中都有什么呢?JAVA对象分为如下3个部分:对象头: 对象头中主要存储2类信息对象运行时数据:比如哈希码,GC分代标记,锁标记,偏向线程ID等。 类型指针:指向它类元数据的指针,用来区分对象类型。实例数据: 对象存储的真正有效数据,存储着自身定义和从父类继承下来的字段。数据存储受到虚拟机分配策略参数和字段在源码中定义顺...原创 2019-08-21 11:03:39 · 1493 阅读 · 0 评论 -
JAVA通过poi导出excel
maven依赖: <!--读取excel文件 --> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>3.9</version&g...原创 2019-09-26 21:47:02 · 96 阅读 · 0 评论 -
通过SpringMVC封装的方法实现文件下载
// 下载excel @RequestMapping("/download") public ResponseEntity<byte[]> downloadExcel(int id) { String tablename =oservice.getTableName(id); try { //文件路径 String path =Paths.EXCELPATH+...原创 2019-09-26 22:04:13 · 293 阅读 · 0 评论 -
仔细看一下Volatile
再说volatile之前,先说一下java内存中是怎么进行处理的?可以看我以前的文章:java对象创建过程因为每个线程都有一个本地内存,他们都会缓存一份主内存的共享数据,这样问题就来了,如何保证主内存和线程内存数据一致就成了一个问题?Volatile关键字可以算是一个轻量级锁,它可以有效的处理上面说的一致性问题,他的实现主要遵循两条原则:1.Lock前缀指令会引起处理器缓存写回到内...原创 2019-10-07 14:26:41 · 137 阅读 · 0 评论 -
mybatis映射List<String>问题
直接先看代码:sqlmapper中的配置:实体类的属性报错信息:大概意思就是或answers属性只有一个,但是查到了3个;很明显他没有把answers当作集合去处理原因在于mybatis中resultmap没有id无法去分集合(个人理解)加上一个id的属性,然后就可以成功了;...原创 2019-05-05 19:39:34 · 2416 阅读 · 1 评论 -
SpringMVC拦截器中重定向无效问题
骚小孩最近遇到一个头疼的问题,就是我做登录的时候遇到一个拦截后,在拦截器中无法直接重定向。于是我百度了几种方法是如下:方法一:后台:前台:来源:https://blog.csdn.net/make__It/article/details/78841070思路:后台判断请求是否为ajax,如果是进行判断如果不满足就返回一个错误标记,前台接受进行判断跳转。方法...原创 2019-04-29 15:14:15 · 5091 阅读 · 2 评论 -
scheduled注解做定时任务正解(无坑)
如何使用schedule来做定时任务:1.首先在springmvc.xml配置文件上加上约束文档: xmlns:task="http://www.springframework.org/schema/task" http://www.springframework.org/schema/task http://www.springframework.org/schema/task/sp...原创 2019-06-17 12:48:46 · 5136 阅读 · 0 评论 -
Spring配置中classpath与classpath*
在使用spring写项目的时候,遇到一个很奇怪的问题。看spring代码:整合mybatis <!-- 加载配置文件 --> <context:property-placeholder location="classpath*:config/db.properties" /> <!-- sqlSessionfactory --> <bean...原创 2019-06-13 14:23:24 · 997 阅读 · 0 评论 -
JAVA使用jedis连接redis
1.打开redis服务端2.下载需要的jar或者用maven配置jar1链接:http://commons.apache.org/proper/commons-pool/download_pool.cgijar2链接https://mvnrepository.com/artifact/redis.clients/jedis3.配置连接池资源 首先看一下源码:...原创 2019-06-09 12:56:19 · 653 阅读 · 0 评论 -
Spring整合Jedis使用Redis
Redis中只能提供基于字符串类型的操作,而在java中主要以类对象为主,所以redis需要redis存储的字符串和java对象相互转化,自己编写这些规则,工作量比较大,但是spring对这些进行了封装和支持,他提供了序列化的设计框架和一些序列化的类,使Redis能把他存储起来,在读取的时候,再把序列化的字符串转化为java对象,这样使用起来会非常方便与简单,所以更多的时候使用Sp...原创 2019-06-10 14:06:07 · 4419 阅读 · 0 评论 -
深入了解JAVA中的锁
1.什么是锁?锁其实就是一种协议,在对象头中放入一些标志信息用来声明不同的锁。2.为什么要使用锁?使用锁的原因就是为了保证数据的一致性。3.volatilevolatile是一种轻量级的synchronized,他保证了并发操作中的共享变量的可见性:即当一个线程修改共享变量的时候,其他线程能读到修改的值。加上了这个关键字会引发两件事情: 1>.将当前处理器缓存行...原创 2019-06-17 21:02:20 · 4716 阅读 · 0 评论 -
实践探索JAVA初始化过程
1.JAVA在初始化的时候首先初始化静态代码块(只执行一次),然后非静态代码块,然后构造方法。2.在各个代码块中顺序执行。3.在存在继承关系的时候顺序为:父类static -> 子类static -> 父类非static -> 父类构造方法 -> 子类非static ->子类构造方法。无继承,无层次:public class A { stati...原创 2019-06-22 16:01:15 · 4441 阅读 · 0 评论 -
重温JAVA网络编程之BIO
BIO:即为同步阻塞式编程,最常用的就是Socket。先从最简单的例子开始:客户端与服务端进行通信代码实现://服务端public class Service { public static void main(String[] args) { try { ServerSocket serversocket = new ServerSocket(8888); ...原创 2019-07-16 23:14:55 · 148 阅读 · 0 评论 -
彻底解决tomcat乱码问题
在/conf/logging.properties添加如下语句java.util.logging.ConsoleHandler.encoding = GBK原因:就是因为中文GBK被强制解释成UTF-8才导致的乱码原创 2019-07-19 20:57:11 · 1691 阅读 · 1 评论 -
程序是怎么在tomcat上跑起来的
1.首先要安装java环境,因为tomcat是基于java环境才能运行的。安装java环境自行百度,tomcat在官网上下载好,直接解压就好。2.tomcat的设置 1).修改端口: tomcat默认端口8080,可以通过conf/server.xml进行修改。如下图:我这里改成了80端口,80端口是访问的默认端口,即输入ip地址后不用加...原创 2019-07-20 14:07:39 · 7523 阅读 · 0 评论 -
重温JAVA网络编程之NIO(一)
上一篇讲到无法从根本上解决阻塞问题,但是在jdk1.4以后引入NIO类库以后,成功解决掉了这个问题。在传统BIO中我们对每一个请求都需要一个处理,但是引入NIO以后我们可以一个线程处理多个请求。在介绍NIO以前先介绍一些概念:缓冲区BufferBuffer是一个对象,在面向流的IO中可以将数据直接读/写到Stream对象中。在NIO中所有的数据都是用缓冲区来做处理的。事实上,缓...原创 2019-07-17 22:51:05 · 4315 阅读 · 0 评论 -
JAVA内存区域与内存溢出
我们知道一台电脑有内存,寄存器,硬盘的存储区域,那么对应JVM虚拟机,也有他自己的存储区域。1.程序计数器:这是一块比较小的内存单元,是用来记录程序的运行位置。由于在java虚拟机中的多线程是轮流切换并分配时间的方式来实现的。在任何一个确定的时间,一个内核都会执行一条线程的指令。为了线程切换后能恢复到正确的执行位置,所以每一个线程都需要一个自己的程序计数器,所以程序计数器是线程私有的(...原创 2019-08-02 15:42:44 · 4508 阅读 · 0 评论 -
对象死了吗?
在jvm垃圾回收机制中,回收首先要判断他是不是垃圾,也就是判断这个对象到底死没死?判断一个对象死没死的核心在于是不是还有其他对象对他进行引用。通常有下面两种算法来判断:1.引用计数法:在对象上加一个引用计数器,如果其他地方对他进行引用,那么引用加一,当引用失效后就减一。当计数器为0后,那么这个对象就不可再用了。不过这种方法也是有缺点的:一个对象(A)的一个属性指向另一个对象...原创 2019-08-02 22:37:19 · 4535 阅读 · 0 评论 -
Unicode与Char的联系
Unicode是什么? Unicode是java使用的编码表,他与C语言使用ASCLL类似。public class Test { public static void main(String\u005B\u005D args) { System.out.println(\u0022 你好 \u0022); }}上述代码中的中括号以及引号就是用unic...原创 2019-07-30 20:24:53 · 5633 阅读 · 0 评论 -
简单方便的位运算
位运算是把数值转化为01来进行计算的,更贴近计算机底层。位运算主要是:按位与(&),按位或(|),按位异或(^),左移(<<),右移(>>),取反(~)这六种。下面我们一一来讨论。既然位运算是把数值转化为二进制,那么首先需要学会转化。一个整数一个负数分别举例。234转化为二进制:234=128+64+32+8+2=1110101加上一个符号...原创 2019-07-30 21:43:58 · 4773 阅读 · 0 评论 -
jvm垃圾回收机制
在堆中分为新生代,老年代和永久代,在不同的区域中,对应的垃圾回收算法也不同,这些算法都是根据这些区域使用的特性来决定的。垃圾回收是需要GC线程与程序运行线程配合使用的,在不影响程序运行的前提下,进行垃圾回收的。标记-清除算法:思想: 1>.当堆中的有效空间耗尽了,开始stop the world; 2>.标记出所有需要回收的对象(即没有引用...原创 2019-08-04 15:04:42 · 2566 阅读 · 0 评论 -
jsp和script混用注意!!!!
小编用亲身感受了一波绝望,弹窗啊,为啥不弹窗,jsp和script不是能混用嘛?下面来看代码<% String name="小马";%><script>alert("name="+name)</script>这么混用是一点毛病都没有的,即使下边还有java语言也没事,但是但是看下边这种<% S...原创 2018-04-26 20:20:36 · 4054 阅读 · 1 评论 -
Jsp复习------基本语法
下面我分享一下我学习jsp的东西1.jsp脚本程序 <% 代码 %> 这个脚本程序可以写一切java的语句 举个小例子<% out.print("Heoll,World%>2.jsp声明 <%! 代码 %> 用来声明一些...原创 2018-04-25 14:05:17 · 158 阅读 · 0 评论 -
浅谈SpringMVC
1.SpringMVC是什么?SpringMVC是Spring提供给Web应用的框架设计。在我的理解中,他其实就是一个封装好的Servlet,通过看他配置。//web.xml中 <servlet> <servlet-name>springmvc</servlet-name> <servlet-class>org.spri...原创 2019-07-29 20:14:08 · 3315 阅读 · 2 评论 -
数据库连接池中too many connetctions
问题描述: 使用servlet+mybatis+spring+c3p0连接池程序运行一会数据库连接池就会崩掉。报错too many connections;原来一直认为是连接池配置的问题。把最大连接数修改为1000也是崩(在本机一台电脑测试跑)从c3p0换成了durid也是存在同样问题。问题代码:到最后才发现是自己逻辑上的问题,看原来代码:Application...原创 2019-05-31 16:16:20 · 4967 阅读 · 0 评论