自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

疯癫的专栏

算法,数据结构,多线程,JVM,设计模式,这些是内功,练好内功,其他的外在形式学起来就简单多了

  • 博客(30)
  • 资源 (2)
  • 收藏
  • 关注

原创 Spring的bean有线程安全问题吗?

spring中bean本身不存在线程安全问题,要看具体使用情况,当bean的作用域是prototype时,每次获取bean都是创建一个新的实例,因此不存在线程安全问题。当bean的作用域是singleton时,不同线程访问同一个bean,如果这个bean中存在实例变量,并且线程有对实例变量的写操作,那么也会产生线程安全问题解决线程安全问题的一般方法时使用threadlocal,为每个线程创建独立的变量副本,互相隔离不影响。ps,线程安全问题是指,多个线程操作共享数据时,会产生最终结果与预期不一致

2021-04-13 21:18:33 1122

原创 Bean的生命周期是怎么样的?Bean的作用域是怎样的?

简单来说,Spring Bean的生命周期只有四个阶段:实例化 Instantiation--> 属性赋值 Populate -->初始化 Initialization --> 销毁 Destruction。具体来说分为以下步骤:1.当容器启动时,Bean的实例化。Bean容器找到配置文件中Spring Bean的定义。Bean容器利用Java Reflection API创建一个Bean的实例。2.Bean的属性赋值。利用set()方法设置一些属性值。3.如果实现...

2021-04-12 13:37:33 242

原创 BeanFactory和ApplicationContext有什么区别?

BeanFactory和ApplicationContext是Spring的两大核心接口,都可以当做Spring的容器。BeanFactory是Spring里面最底层的接口,提供了最基本的依赖注入支持,ApplicationContext接口作为BeanFactory的子类,还提供了更完整的框架功能。这些功能包括:1、ApplicationContext扩展了MessageSource接口,因此支持国际化。2、ApplicationContext扩展了ResourceLoader(资源加载器)接口

2021-04-08 18:33:03 253

原创 Spring容器的启动流程

1、spring容器的初始化:实例化BeanFactory【DefaultListableBeanFactory】工厂,用于生成Bean对象; 实例化BeanDefinitionReader注解配置读取器,用于对特定注解(如@Service、@Repository)的类进行读取转化成 BeanDefinition 对象; 注册内置的BeanPostProcessor的BeanDefinition到容器中; 实例化ClassPathBeanDefinitionScanner路径扫描器,用于对指定的.

2021-04-08 15:37:42 286

原创 Spring的AOP是什么?

AOP(Aspect-Oriented Programming:面向切面编程):是指将那些与业务无关,却被多个业务模块所共同调用逻辑或责任(例如事务处理、日志管理、权限控制等)封装起来,便于减少系统的重复代码,降低模块间的耦合度,提升系统的可维护性。AOP实现的关键在于 代理模式,AOP代理主要分为静态代理和动态代理。静态代理的代表为AspectJ;动态代理则以Spring AOP为代表。(1)AspectJ是静态代理,也称为编译时增强,AOP框架会在编译阶段生成AOP代理类,并将AspectJ(切

2021-04-07 19:04:54 2305

原创 Spring的IoC是什么?

IOC就是控制反转,是指程序将创建对象的控制权转交给Spring框架进行管理,由Spring通过java的反射机制根据配置文件在运行时动态的创建实例,并管理各个实例之间的依赖关系。对象与对象之间松散耦合,有利于功能的扩展和复用。DI就是依赖注入,和控制反转是同一个概念的不同角度的描述,它是指程序在运行时由IoC容器来动态注入对象需要的外部依赖。Spring的IOC有三种注入方式 :构造器注入、setter方法注入、根据注解注入。...

2021-04-07 16:51:37 2525

原创 Spring是什么,她有哪些模块组成,她有哪些优点?

1、Spring是一个轻量级JavaEE开发框架,主要用来提高开发效率和系统的可维护性。2、她主要包括以下7个模块:Spring Context:提供框架式的Bean访问方式,以及企业级功能(JNDI,定时任务等)。ps:JNDI是 Java 命名与目录接口(Java Naming and Directory Interface),在J2EE规范中是重要的规范之一,简单来说就是把资源取个名字,再根据名字来找资源。Spring Core:核心类库,所有功能都依赖于此类库,提供IOC和DI服务。

2021-04-07 11:43:09 204

原创 JAVA阻塞队列与线程池

阻塞队列阻塞队列与我们平常接触的普通队列(LinkedList或ArrayList等)的最大不同点,在于阻塞队列提供阻塞添加和阻塞删除方法。阻塞添加所谓的阻塞添加是指当阻塞队列元素已满时,队列会阻塞加入元素的线程,直队列元素不满时才重新唤醒线程执行元素加入操作。阻塞删除阻塞删除是指在队列元素为空时,删除队列元素的线程将被阻塞,直到队列不为空再执行删除操作(一般都会返回被删除的元素)由于Java中的阻塞队列接口BlockingQueue继承自Queue接口,因此先来看看阻塞队列接口为我们提

2021-03-19 13:49:32 709

原创 JUC之Semaphore,CountDownLatch,CyclicBarrier, Exchanger

JUC就是java.util .concurrent工具包的简称。这是一个处理线程的工具包,JDK 1.5开始出现的。SemaphoreSemaphore:信号量,Semaphore是一个线程同步的辅助类,使用Semaphore可以控制同时访问资源的线程个数。构造方法: Semaphore(int permits) ,permits指定数量。超过访问数量后,请求线程将进入阻塞队列,当有其他线程释放许可后可以开始执行。Semaphore sp = new Semaphore(3);//创

2021-03-18 18:01:51 132

原创 ReetrantLock与AQS的底层原理

1、隐式锁和显式锁关键字synchronized属于隐式锁,即锁的持有与释放都是隐式的,我们无需干预。显式锁,即锁的持有和释放都必须由我们手动编写。2、Lock接口在Java 1.5中,官方在concurrent并发包中加入了Lock接口,该接口中提供了lock()方法和unLock()方法对显式加锁和显式释放锁操作进行支持。Lock lock = new ReentrantLock();lock.lock();try{ //临界区......}finally{

2021-03-08 20:37:17 310

原创 CAS的底层原理

1,什么是CAS?

2021-03-08 11:31:25 1154 1

原创 synchronized的底层原理

1、什么是线程安全问题?线程安全是并发编程中的重要关注点,应该注意到的是,造成线程安全问题的主要诱因有两点,一是存在共享数据(也称临界资源),二是存在多条线程共同操作共享数据。因此为了解决这个问题,我们可能需要这样一个方案,当存在多个线程操作共享数据时,需要保证同一时刻有且只有一个线程在操作共享数据,其他线程必须等到该线程处理完数据后再进行,这种方式有个高尚的名称叫互斥锁。在 Java 中,关键字 synchronized可以保证在同一个时刻,只有一个线程可以执行某个方法或者某个代码块(主要是对方法或

2021-03-02 17:46:21 552

原创 多线程,锁与线程安全

1、进程就是程序运行的内存空间,包含程序运行所需的资源2、线程就是程序的最小执行单元,进程由多个线程组成,每个进程至少有一个主线程3、守护线程 daemon thread, 守护线程依赖于创建它的线程,会伴随被守护线程的消亡而消亡,jvm中的垃圾收集器就是一个守护线程4、线程new出来后,进入1就绪状态,start的之后,进入2可运行状态,得到cpu执行权就进入3运行状态,未得到cpu执行权进入4阻塞状态,运行时被wait进入5等待状态,运行完毕或者异常中断进入6死亡状态。...

2021-03-02 10:50:43 162 2

原创 gc垃圾回收机制详解

什么是垃圾?我们创建出来的对象没有引用指向的的时候,这个对象就再也无法被用到,就是说,这个对象已经成为了垃圾对象,一直存放在我们的内存当中我们怎么判断一个对象是不是垃圾两种方式引用计数法比较古老的回收算法。原理是此对象有一个引用,即增加一个计数,删除一个引用则减少一个计数。垃圾回收时,只用收集计数为0的对象。此算法最致命的是无法处理循环引用的问题可达性分析法GCRoot根搜索法这种方式从一个GCRoot根出发,所有依赖到的对象都被标记为不是垃圾,其他的都是垃圾GCRoot根:1

2021-02-23 11:25:55 585

原创 java内存模型

Java内存模型(即Java Memory Model,简称JMM)本身是一种抽象的概念,并不真实存在,它描述的是一组规则或规范,通过这组规范定义了程序中各个变量(包括实例字段,静态字段和构成数组对象的元素)的访问方式。由于JVM运行程序的实体是线程,而每个线程创建时JVM都会为其创建一个工作内存(有些地方称为栈空间),用于存储线程私有的数据,而Java内存模型中规定所有变量都存储在主内存,主内存是共享内存区域,所有线程都可以访问,但线程对变量的操作(读取赋值等)必须在工作内存中进行,首先要将变量从主内

2021-02-22 17:21:37 113

原创 JAVA内存结构

https://blog.youkuaiyun.com/laomo_bible/article/details/83067810?utm_medium=distribute.pc_relevant.none-task-blog-baidujs_baidulandingword-0&spm=1001.2101.3001.4242https://blog.youkuaiyun.com/qq906627950/article/details/81324825

2021-02-22 15:17:33 174 1

转载 排序算法简介

点击以下链接:http://www.cnblogs.com/eniac12/p/5329396.html

2018-05-22 16:32:19 157

原创 常用数据结构一览

一、线性存储结构数组链表栈队列二、树形结构二叉树二叉查找树  https://blog.youkuaiyun.com/yang_yulei/article/details/26066409红黑树哈夫曼树B树

2018-05-22 16:21:45 232

转载 算法之时间复杂度

1.算法的效率虽然计算机能快速的完成运算处理,但实际上,它也需要根据输入数据的大小和算法效率来消耗一定的处理器资源。要想编写出能高效运行的程序,我们就需要考虑到算法的效率。 算法的效率主要由以下两个复杂度来评估: 时间复杂度:评估执行程序所需的时间。可以估算出程序对处理器的使用程度。 空间复杂度:评估执行程序所需的存储空间。可以估算出程序对计算机内存的使用程度。设计算法时,一般是要先考虑系统环境,...

2018-05-16 15:52:14 384

原创 深入理解volatile

一、Java内存模型Java内存模型规定了所有的变量都存储在主内存中。每条线程中都有自己的工作内存,线程的工作内存中保存了被该线程所使用到的变量(这些变量是从主内存中拷贝而来)。线程对变量的所有操作(读取,赋值)都必须在工作内存中进行。不同线程之间也无法直接访问对方工作内存中的变量,线程间变量值的传递均需要通过主内存来完成。    基于此种内存模型,便产生了多线程编程中的数据“脏读”等问题:   ...

2018-05-14 18:25:02 205

原创 深入理解hashmap的原理

一、什么是哈希哈希也叫散列,是指

2018-05-14 14:14:46 267

原创 JIT 编译器

JIT 简介JIT 是 just in time 的缩写, 也就是即时编译编译器。使用即时编译器技术,能够加速 Java 程序的执行速度。下面,就对该编译器技术做个简单的讲解。首先,我们大家都知道,通常通过 javac 将程序源代码编译,转换成 java 字节码,JVM 通过解释字节码将其翻译成对应的机器指令,逐条读入,逐条解释翻译。很显然,经过解释执行,其执行速度必然会比可执行的二进制字节码程序...

2018-05-11 18:35:53 277

原创 编译型语言、解释型语言与混合型语言;动态语言与静态语言;强类型语言与弱类型语言;脚本语言等------的区别

前言:计算机是不能理解高级语言,当然也就不能直接执行高级语言了。计算机只能直接理解机器语言,所以任何语言,都必须将其翻译成机器语言,计算 机才能运行高级语言编写的程序。正文:一、编译型语言、解释型语言与混合型语言  1、编译型语言   需通过编译器(compiler)将源代码编译成机器码,之后才能执行的语言。一般需经过编译(compile)、链接(linker)这两个步骤。编译是把源代码编译成机器...

2018-05-11 11:32:25 596

转载 如何自定义控件以及流程

如何自定义控件以及流程点击打开链接1、measure过程总结layout(ViewGroup)及其子view的测量过程:通过自身的MeasureSpec和子view的LayuoutParams,生成子view的MeasureSpec。这一步调用的是getChildMeasureSpec(int spec, int padding, int childDimension)方法。调用子view的mea...

2018-03-08 17:29:41 665

原创 Android的UI渲染性能优化

一、概述对于app里的每一个view,android系统都会经过三部曲来渲染:measure,layout,draw。可以在脑中回想下你搭建的view的xml布局文件结构,measure从最顶部的节点开始,顺着layout树形结构依次往下:测量每个view需要在屏幕当中展示的尺寸大小(上图当中:LinearLayout;RelativeLayout,LinearLayout;然后是textView...

2018-03-08 17:11:11 353

原创 一张图说明android的事件分发机制

2018-03-08 15:52:03 188

原创 简要介绍一下Android的handler机制原理

在面试别人和被别人面试的时候,这是我问的最多的一个问题,实际上也是我觉得确实非常重要的一个概念,那么我就简单来阐述一下:1、是什么?Handler机制是用来进行线程间通讯的2、为什么?主要解决异步线程刷新UI界面3、怎么实现的?主线程创建时默认调用Loop.prepare()静态方法来建立一个消息队列和loop对象,新建handler对象时该对象与此loop和队列绑定,handler调用方法向队列...

2018-03-08 15:23:58 949

转载 tomcat 与 nginx,apache的区别是什么?

作者:David链接:https://www.zhihu.com/question/32212996/answer/87524617来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。题主说的Apache,指的应该是Apache软件基金会下的一个项目——Apache HTTP Server Project;Nginx同样也是一款开源的HTTP服务器软件(当然它也可以作为邮...

2018-02-23 18:31:15 151

原创 Java开发常见概念

java基础知识语法io,多线程,集合1、jsp,servlet,javascript2、spring,springmvc,mybatis3、memcached,ehcache,redis4、mysql,oracle5、spring boot, struts6、SSM(Spring+SpringMVC+MyBatis)框架集由Spring、SpringMVC、MyBatis三个开源框架整合而成,常...

2018-02-23 18:28:50 344

原创 描述一下android的系统架构

答:Android系统采用了分层架构,从高层到低层分别是应用程序层、应用程序框架层、系统库和Android运行时层和linux内核层。A应用程序层提供一些核心应用程序包,例如电子邮件、短信、日历、地图、浏览器和联系人管理等。开发者编写的应用程序也在这里,并与那些核心应用程序彼此平等。B应用程序框架层是Android应用开发的基础,开发人员大部分情况是在和她打交道。开发人员可以直

2013-07-09 15:58:00 1196

android 4.4 sdk 源码

android 4.4 sdk 源码 在Class File Editor页面 出现suorce not found的文字下面,点击Change Attached Source按钮选中这个文件解压出来的android.jar就行了

2015-12-02

点击按钮滑动图片效果

很方便的用按钮实现类似gallery的左右滑动效果

2012-07-17

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除