202109-19 如何理解Java线程池及其使用方法 目录一、前言二、总体的架构三、研读ThreadPoolExecutor3.1、任务缓存队列3.2、拒绝策略3.3、线程池的任务处理策略3.4、线程池的关闭3.5、源码分析四、常见的四种线程池4.1、newFixedThreadPool4.2、newSingleThreadExecutor4.3、newCachedThreadPool4.4、newScheduledThreadPool五、使用实例5.1、newFixedThreadPool实例5.2、newCachedThreadPool实例5.3、newSingleThreadExecutor5.4、newScheduledThreadPool六、总结6.1、如何选... 继续阅读 >
202106-19 PHP Session ID的实现原理与实例 Session作用Session的根本作用就是在服务端存储用户和服务器会话的一些信息。典型的应用有:1、判断用户是否登录。2、购物车功能。session的工作机制:为每个访问者创建一个唯一的id(UID),并基于这个UID来存储变量。UID存储在cookie中,亦或通过URL进行传导。PHPSESSIONID的生产算法原理:1、hash_func=md5/sha1#可由php.ini配置2、PHPSESSIONID=hash_func(客户端IP+当前时间(秒)+当前时间(微... 继续阅读 >
202105-20 一文看懂JSONP原理和应用 什么是JSONP首先提一下JSON这个概念,JSON是一种轻量级的数据传输格式,被广泛应用于当前Web应用中。JSON格式数据的编码和解析基本在所有主流语言中都被实现,所以现在大部分前后端分离的架构都以JSON格式进行数据的传输。那么JSONP是什么呢?首先抛出浏览器同源策略这个概念,为了保证用户访问的安全,现代浏览器使用了同源策略,即不允许访问非同源的页面,详细的概念大家可以自行百度。这里大家只要知道,在ajax中,不允许请求... 继续阅读 >
202104-27 详解Android Lint的原理及其使用 AndroidLint原理及使用详解AndroidLint是ADT16中引入的新工具,用于扫描Android项目源中的潜在错误。Lint是Android提供的一个强大的,用于静态扫描应用源码并找出其中的潜在问题的实用工具。lint工具可以检查你的Android项目源文件是否有潜在的错误,以及在正确性、安全性、性能、易用性、无障碍性和国际化方面是否需要优化改进。Lint既可以用作命令行工具,也可以与Eclipse和IntelliJ集成在一起。它被设计成独... 继续阅读 >
202103-05 C++ RTTI与4种类型转换的深入理解 前言RTTI是RunTimeTypeInformation的缩写,从字面上来理解就是执行时期的类型信息,其重要作用就是动态判别执行时期的类型。并不是说这篇文章是RTTI,和用于RTTI的四种类型转换,而是介绍RTTI,再介绍一下4种类型转换,因为RTTI有用到其中一种类型转换,所以相当于两篇文章写在一起。实际上RTTI用到的是typeid()和dynamic_cast()。为什么会有RTTI?C++是一种静态类型语言,其数据类型是在编译期就确定的,不能在运行时更... 继续阅读 >
202102-21 Java集合中的fail-fast(快速失败)机制详解 简介我们知道Java中Collection接口下的很多集合都是线程不安全的,比如java.util.ArrayList不是线程安全的,因此如果在使用迭代器的过程中有其他线程修改了list,那么将抛出ConcurrentModificationException,这就是所谓fail-fast策略。这一策略在源码中的实现是通过modCount域,modCount顾名思义就是修改次数,对ArrayList内容的修改都将增加这个值,那么在迭代器初始化过程中会将这个值赋给迭代器的expectedModCount。在迭... 继续阅读 >
202101-12 java DelayQueue的原理浅析 在对DelayQueue延迟功能的使用上,很多人不能后完全理解延迟的一些功能使用,这里我们深入来挖掘一下DelayQueue的原理。下面将从构造方法、接口、继承体系三个方面进行分析,需要注意的是,相较于其它的阻塞队列,DelayQueue因为延迟的功能多了接口的使用,一起来看具体内容。1.构造方法publicDelayQueue(){}publicDelayQueue(Collection<?extendsE>c){this.addAll(c);}构造方法比较简单,一个默认构造方法,一个初始... 继续阅读 >
202012-10 Nginx+php配置文件及原理解析 采用nginx+PHP作为webserver的架构模式,在现如今运用相当广泛。然而第一步需要实现的是如何让nginx正确的调用php。由于nginx调用php并不是如同调用一个静态文件那么直接简单,是需要动态执行php脚本。所以涉及到了对nginx.conf文件的配置。这一步对新手而言一般需要网上查资料,对于一般的熟手而言,也有不少同学并没有搞透彻为何要如此这般配置。本文的主要内容为如何在nginxserver中正确配置php调用方法,以及配置的基本原理。... 继续阅读 >
202010-30 DialogFragment运行原理及使用方法详解 思维导图一、为什么要学习DialogFragment你还在用Dialog吗?你还在经常烦恼于屏幕翻转的时候,Dialog的各种奇葩情况吗?你想降低耦合吗?如果你有其中的一个烦恼,那么恭喜你,遇见了DialogFragment,他恰巧就解决了上面所说的问题,如果感兴趣的话,随笔者来看下吧!二、背景Android官方推荐使用DialogFragment来代替Dialog,可以让它具有更高的可复用性(降低耦合)和更好的便利性(很好的处理屏幕翻转的情况)。而创... 继续阅读 >
202010-23 UrlRewrite概念原理及使用方法解析 URLRewrite即URL重写,就是把传入Web的请求重定向到其他URL的过程。URLRewrite最常见的应用是URL伪静态化,是将动态页面显示为静态页面方式的一种技术。比如http://www.123.com/news/index.asp?id=123使用UrlRewrite转换后可以显示为http://www.123.com/news/123.htmlURLRewrite有什么用?1,首先是满足观感的要求。对于追求完美主义的网站设计师,就算是网页的地址也希望看起来尽量简洁明快。形如http://www.123.com/new... 继续阅读 >
202010-21 实现vuex原理的示例 效果图如下:1.准备好环境使用vue/cil初始化项目配置:npminstall-g@vue/cli//全局安装@vue/clivuecreatedemo-vue//创建项目yarnaddvuex安装vuex创建一个store文件夹并使用:2.实现目的stroe/index.js内容如下:(我们的目的将引入自写的vuex实现vuex基础功能)importVuefrom'vue'importVuexfrom'vuex'//importVuexfrom'./myvuex'//我们实现的青铜版vuex//importVuexfrom'./myvuexplus'//我们实... 继续阅读 >
202010-15 Java注解Annotation原理及自定义注解代码实例 什么是注解?对于很多初次接触的开发者来说应该都有这个疑问?Annontation是Java5开始引入的新特征,中文名称叫注解。它提供了一种安全的类似注释的机制,用来将任何的信息或元数据(metadata)与程序元素(类、方法、成员变量等)进行关联。为程序的元素(类、方法、成员变量)加上更直观更明了的说明,这些说明信息是与程序的业务逻辑无关,并且供指定的工具或框架使用。Annontation像一种修饰符一样,应用于包、类型、构造方法... 继续阅读 >
202010-10 通俗易懂了解Python装饰器原理 作用装饰器可以用于用于装饰一个函数或方法,使得在不修改原函数、方法代码的前提下,为方法添加前置或后置操作;例如突然想要计算一下各个函数的执行时间,又不希望在每一个函数中添加tim.time()来计算执行时间用法装饰器的写法网上很多,但是我觉得还是尽量先理解,再知道怎么写会比较好,所以会先说如何理解,在后面重写用法实现了解装饰器是如何实现的,远比会写装饰器更重要,简单的说装饰器就是接收一个函数对象,然后先执行... 继续阅读 >
202010-10 分析SpringBoot的启动原理 背景1>大家都知道SpringBoot是通过main函数启动的,这里面跟踪代码到处都没有找到while(true),为什么启动后可以一直跑?2>SpringBoot默认使用tomcat作为web容器。大家也可以通过在pom文件中exclusion掉tomcat,denpendencyjetty的方法来使用jetty。那SpringBoot是怎么做到在不同web容器之间切换的呢?3>传统的web容器比如jetty本质上是直接通过javastart.jar来启动,之后来加载spring上下文的,SpringBoot通过main函数是怎... 继续阅读 >
202010-10 Python‘==‘ 及 ‘is‘相关原理解析 '=='比较的是两个对象的值'is'比较的是两个对象的内存地址(id)下面我们着重理解'is'。对于这个,我们需要知道:小整数对象池,大整数对象池,以及intern机制小整数池:Python预先创建小整数缓存池——[-5~256],无论创建多少个对象,都是指向同一个地址,这样是为了避免小整数频繁申请和释放内存。>>>a=3>>>b=3>>>aisbTrue>>>1+2is3True>>>a=1.0>>>b=1.0>>>aisbFalse大整数对象池:Python提供了一个可扩展的内存... 继续阅读 >
202010-08 简单了解Spring IoC相关概念原理 SpringIoc是Spring框架的基础,本文会简单的介绍下SpringIoc。SprongIoc即控制反转,它是一种通过描述(在java中可以是XML或注解)并通过第三方去产生或获取特定对象的方式。SpringIoC容器1、SpringIoC容器的设计SpringIoC容器的设计主要是基于BeanFactory和ApplicationContext这两个接口,其中ApplicationContext是BeanFactory的一个子接口。也就是说,BeanFactory是SpringIoC容器定义的最底层接口,而ApplicationContext... 继续阅读 >