自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(34)
  • 收藏
  • 关注

原创 Java中断机制和容易混淆的误区,简单易懂例子多

Java中如果需要终止线程可以有以下一些方式:线程正常运行退出,这个是比较常见的run()方法运行后退出。调用stop()方法,非常粗暴,已经标记为@Deprecated,所以不再使用。使用中断机制。这里只看第三种,interrupt()方法,很多文章讲interrupt()没讲清楚,经常是不明就里,一头雾水。留给我们一些疑惑,中断是啥,中断异常即InterruptedException又是什么时候出现的。开头先给出实践的的结论。 InterruptedException是什么时候产生的:I

2022-01-10 18:31:31 478

原创 Emoji表情的的文字编码问题

我们平常在微信等平台上聊天时,一般都会发一些表情来替代文字,这些从广义来说都可以成为Emoji表情,都是用图片表情来表达文字信息,增加了表达方式,契合年轻化人的性格。正因此才大受欢迎。如果从严谨来看,只有手机系统内置的表情才算emoji表情,因为这些表情是以字体编码的方式规范到unicode编码集里面的。什么是字体编码计算机存储都是以二进制的形式的,也就是说所有的文字都是以以二进制的数字存储的。简单来说我们需要一个文字和数字的转换字典,用以存储和显示文字,比如英文中的A存储在二进制的数字是65。那么他应

2022-01-05 18:27:31 2227

原创 java synchronized加锁和释放流程

为什么需要加锁在多线程环境中,多个线程同时运行同一个方法时,如果其中有对某一个资源就行修改处理时,可能会存在先后操作的问题,使得逻辑不一致,程序运行的结果不时我们想要的。线程如何加锁这里只讲synchronized进行加锁,并且只进行使用原理的阐述,其他加锁方式使用另外的篇幅。加锁是为了避免多个线程同时进行逻辑处理时,可能会有数据不一致等情况从而影响程序的逻辑的准确性。 所以我们可以使用一个对象,给该对象设置一个锁状态标记,其他线程要进行逻辑处理时需要把该状态设置成功才能正常进行,不然就阻塞挂起。

2022-01-05 18:24:11 4571 1

原创 java获取几天后的时间,区分周末和不区分

public class DateTest { public static void main(String[] args) { //当前时间是2021年11月19号,周五 Date date = new Date(); //获取两天后的不包含周末的日期,23号 System.out.println(getAfterDayWithoutWeekend(date, 2)); //获取两天后的时间,21号

2021-11-19 18:02:30 1246

原创 Redis和lua,锦上添花

Redis从2.6.0版本引入lua脚本的支持,服务器内置lua解释权执行脚本。同时,lua脚本内也可以直接调用redis命令以及是使用lua语言内置的函数库处理命令结果。有了脚本的支持,可以扩展Redis提供的功能外的能力,同时不用修改源码,更加灵活扩展。优点总结:可以使用lua扩展Redis不具备的功能lua脚本内支持使用Redis命令,完善Redis执行lua脚本是原子性的lua脚本可以换成在Redis中,通过校验和调用1. EVAL 执行脚本EVAL script numkeys k

2021-06-03 18:47:17 245

原创 jvm 是怎么管理你的对象的

java 虚拟机把java程序执行过程中的内存区域分成不同的数据区域。包括程序计算器虚拟机栈本地方法栈堆方法区(元空间)程序计算器程序计数器是较小一块内存空间,每个线程都有自己的程序计算器,用来记录线程执行到哪里,它记录的是当前线程下一条字节码指令。Java虚拟机是使用cpu时间线的方式提供给各个线程执行的,当进行线程切换到时候,就需要用到线程计数器中该线程需要执行的下一条字节码的指令了。程序计数器米有oom异常。虚拟机栈虚拟机栈也是线程私有的,所以生命周期和线程相同,线程执行到某个

2021-05-29 17:20:44 91

原创 github.io访问不了解决方法

最近在学习jvm时需要给jvisualvm添加个visual gc插件时,需要访问github.io但是发现访问如下图。出现原因是**商的dns服务器有问题,所以改成了外部dns服务器,114.114.114.114,然后就可以访问了。

2020-11-05 13:15:00 4898 1

原创 java程序是怎么执行的

java程序是怎么执行的埋坑待填, 这一篇是总览,然后细化各个部分。java程序的运行过程是开发人员进行代码的开发,然后通过编译器编译成java字节码文件,java虚拟机(jvm)把字节码文件加载进来运行,jvm是运行在操作系统之上。所以我们会遇到什么疑惑呢?1.java虚拟机(jvm)是什么2.java代码怎么编译成字节码文件3.jvm加载字节码过程4.jvm的运行过程是怎么用的1.java虚拟机(jvm)是什么虚拟机就是一台虚拟的计算机,他是一款软件,用来执行一系列虚拟计算机指令

2020-10-20 12:07:46 1184

原创 jvm加载字节码过程

前面提到,java代码编译成字节码后,由jvm加载并执行,那么jvm加载的过程是由类加载子系统来执行的。java虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验,转换解析和初始化,最后形成可以被虚拟机直接使用的java类型,这个过程被称为虚拟机的类加载机制。加载过程类从被加载到内存到卸出内存,分为以下几个过程加载连接验证准备解析初始化使用卸载1.加载这里的加载指的是加载过程中把字节码从文件中的结构加载到内存中的数据结构的一步,而不是完整的加载过程。这个是运

2020-10-20 11:56:47 572

原创 Java8 Lamda函数式编程

介绍Lamda表达式,读作λ表达式,是函数式编程的概念,java8引入了函数式编程,可以简化一些代码开发工作,例如,在编写内部类的时候只有简单的代码可以使用函数式编程来。这里Caller类调用caller方法依赖到IFunction接口的show方法所以新建了一个内部类来实现。public class LamdaTest { public static void main(String[] args) { Caller caller = new Caller();

2020-09-18 17:25:47 129

原创 桥梁模式

介绍桥梁模式的定义是讲抽象和实现解耦,使得两者可以独立的变化。常用语多层次继承结构中,由于变化导致类图增长很多的情况。例子例如设计一个生产衣服的程序,衣服有各自的品牌,而每个品牌都会生产裤子,t-shirt, polo衫等,当冬天来临需要生产夹克时,我们需要对两个品牌的衣服进行扩展,使得他们有个各自的夹克衣服。那么需要新增两个品牌的夹克扩展类。类图层次如下。如果需要新增一个品牌,那么该品牌需要重新增加对现有衣服所有的实现类。系统将会越来越庞大。这里需要对系统重新进行抽象化,品牌应该和具体的衣服是分

2020-09-18 13:48:05 108

原创 聊聊设计模式的代理模式

介绍代理模式类似于生活中的中介,由中介帮忙负责处理相关事情。具体体现为代理类和实现类都实现同一个接口,代理类的实现直接依赖的实现类的逻辑,而自己不处理具体的逻辑。这里不用中介来说明,中介会有点绕,用一个工地包工头来说明,老板跟包工头说明要怎么干,包工头清楚后,就安排工地工人实际干活,对于老板来说,不需要知道工人是怎么工作的,只需要知道包工头。代理模式分为静态代理和动态代理。静态代理结构定义一个抽象接口定义一个具体实现类定义一个代理类,关联到实现类,代理类的方法实现依赖实现类场景类中,通过代理

2020-09-10 14:46:55 127

原创 聊聊设计模式的模板方法

介绍模板方法一般是复用一些程序流程,来达到减少代码量,提高系统逻辑清晰性和提高维护效率的目的。如在我们需要采集一些新闻网站的数据,一般就是开发对应网站的爬虫来采集数据,爬虫开发从整体上分为下载网页-解析网页-数据入库流程。但是下载网页和数据入库流程应该都是一样的流程,所以可以提取到公共的类,然后定义解析网页是抽象方法,不同的网站爬虫实现不同的解析。结构定义一个抽象类定义一个流程结构具体的实现方法定义为抽象方法实现各自的的抽象方法的逻辑类图结构实现定义一个爬虫抽象类类有一个起始url

2020-09-09 11:01:03 189

原创 聊聊设计模式的抽象工厂模式

介绍工厂设计模式中,有一个中心负责创建类的实例,提供给系统调用,跟现实生活中负责生产产品的工厂是类似的,所以称为工厂类。工厂设计模式分为简单工厂模式,工厂模式,和抽象工厂模式。这次说明的抽象工厂模式。结构定义一个产品类接口定义抽象的产品类,下属有不同的产品等级定义一个工厂类定义具体的工厂实现类,每个实现类可以创建同一个等级的所有产品。类图结构实现定义产品接口public interface Product { void show();}定义抽象A类产品public

2020-09-04 16:56:57 91

原创 聊聊设计模式的工厂方法模式

介绍工厂设计模式中,有一个中心负责创建类的实例,提供给系统调用,跟现实生活中负责生产产品的工厂是类似的,所以称为工厂类。工厂设计模式分为简单工厂模式,工厂方法模式,和抽象工厂模式。这次说明的是工厂方法模式。结构定义一个产品类接口定义具体的产品类的不同实现定义一个工厂类接口定义具体的工厂类实现,每个实现对应上述每个产品的创建类图结构代码实现定义产品类接口public interface Product { void show();}定义具体的产品实现类public c

2020-09-04 15:51:10 128

原创 聊聊设计模式的简单工厂模式

介绍工厂设计模式中,有一个中心负责创建类的实例,提供给系统调用,跟现实生活中负责生产产品的工厂是类似的,所以称为工厂类。工厂设计模式分为简单工厂模式,工厂模式,和抽象工厂模式。这次说明的是简单工厂设计模式,它是通过一个静态方法来创建类的实例,所以也称为静态工厂模式。结构定义一个产品类接口定义具体的产品类的不同实现定义一个工厂类,通过静态方法来生成具体的产品类,通过类名后者约定的字符串来创建具体的产品类类图结构实现定义一个Product接口public interface Produc

2020-09-04 14:59:49 126

原创 UML图之类图关系

umluml是Unified Modeling Language的简称,中文名称为统一建模语言。顾名思义,他就是在计算机程序设计过程过程中用来表示业务模型,概念模型等信息的图形展示。类图类图是描述软件系统中类与类之间的作用关系,用来展示软件系统的结构,以图型方式来直观表达出系统设计系统理念。类是面向对象语言的重要思想,它把一些相同的属性和行为封装在同一个结构中,用来统一对外展示。类图的uml结构[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-p2JerJJd-159

2020-09-03 17:52:36 411

原创 聊聊设计模式的单例模式

单例模式介绍定义:一个类只有一个实例对象,提供一个供系统全局调用的入口。说明:对于一些需要保持一致的或者创建实例很耗资源的类,提供一个单例对象,避免系统占用过多内存。单例模式是结构比较简单的模式,但是深入来看却非常复杂的模式。单例模式的结构构造函数私有化类内部实例化一个对象提供一个public方法访问同一个实例对象单例实现根据实例的创建时间,分为饿汉模式和懒汉模式饿汉模式的单例实现该模式是线程安全的,因为静态变量在类加载时候就已经被初始化了。public class Eag

2020-09-02 16:25:04 189

原创 安卓逆向之Xposed Hook

Xposed介绍Xposed通过拦截安卓程序运行过程来达到修改程序行为的目的。不需要修改安卓源文件,而是通过分析程序运行来拦截并影响运行情况。具体需要把安卓apk逆向后然后分析代码,定位到具体的类,方法等,然后通过xposed来拦截修改方法等。逆向思路首先我们总体来看下逆向的思路首先需要在手机(模拟器或者真机,有root权限),安装xposed程序通过jadx-gui或者android killer等工具对目前apk进行反编译分析反编译后的的类文件,找出哪里是我们需要修改或者影响的行为开发x

2020-08-10 13:42:07 1620

原创 安卓逆向分析概述

开发工具目前常用android studio进行安卓代码开发和调试,开发好一个安卓程序后一般会在虚拟机和真机上进行功能测试。打包后代码一般是以为apk作为后缀,英文名为Android application Package。apk文件中包含了二进制代码,资源文件,配置文件等。他可以使用解压工具进行解压。我们以一个简单的hello程序来看看解压apk后的文件是怎么样的。这是一个apk文件把他后缀名修改为.zip然后进行解压。如下下面来说明一下各个文件的用途:AndoridManifest.x

2020-08-06 11:09:36 246

原创 http代理服务器的实现原理

1.代理服务器代理服务器(Proxy Server)的功能是代理网络用户去取得网络信息,它是网络信息的中转站,是个人网络和Internet服务商之间的中间代理机构,负责转发网络信息。代理服务器可以实现一下功能:1.隐藏身份2.充当防火墙3.防止攻击4.权限控制代理服务器按照其使用方式和作用,分为正向代理服务器,反向代理服务器.1.1代理服务器的分类(1) HTTP代理 :能够代...

2019-12-24 17:11:30 844

原创 散列表查找算法

需求场景散列表一种经典的查找的算法,应用于在海量信息中进行高效检索。简单需求假设我们需要把10000000个字符串对象存放在数组中,使用什么存放策略能够快速定位某一个字符串的的数组位置,从而实现快速查找的效果?暴力搜索根据原始顺序存放,查找时遍历整个数组进行对比,返回匹配对象的下标这样的查找方式,最好的情况是第一次查询时就命中,最坏的情况时查询到数组最后的位置才能找到元素。如果数据量...

2019-11-19 11:05:26 871

原创 Selenium设置文件自动下载

  使用selenium进行爬虫开发时,会遇到下载文件时弹窗显示保存还是打开的问题,这时候可以通过代码设置自动下载。设置文件自动下载通过网页开发工具分析文件的http响应的contentType头类型如:Content-Type: vnd.ms-excel这时候在代码中设置FirefoxProfile profile = new FirefoxProfile(); ...

2019-10-22 16:46:32 531 1

原创 java程序启动新的进程

一般通过java启动操作系统进程有两种方式1.通过Runtime.getRuntime启动Runtime.getRuntime().exec());exec有三个重载方法,分别可以设置相应的命令,系统属性,和新的进程的工作目录2.通过ProcessBuilder启动ProcessBuilder是java 1.5后推荐使用的方式,他拥有更多的处理能力。如,获取进程的执行信息,包括标准输出、...

2019-10-22 16:27:08 2332

原创 Linux Shell总结

变量1.可用字母数字下划线,不能艺术字开头2.不能使用bash关键字3.变量赋值=号两边不能有空格,如 age=‘18’4.变量使用,用符号$age=‘18’echo ageecho ${age}如果需要字符串可变量一起使用,可用花括号确认变量,如skill=‘java’echo “i am good at ${skill}Script”这里应该是skill作为一个参数加上一...

2019-10-22 11:59:52 179

原创 HTTPS理解

  学习《图解http》笔记。总结一下https方面的内容。  互联网,是由能连通到全世界的网络组成的。无论世界哪个角落的服务器在和客户端通信时,在此通信线路上的某些网络设备、光缆、计算机等都不可能是个人的私有物,所以不排除某个环节中会遭到恶意窥视行为。HTTP 主要有这些不足1.通信使用明文(不加密),内容可能会被窃听2.不验证通信方的身份,因此有可能遭遇伪装3.无法证明报文的完整性...

2019-09-25 13:38:45 107

原创 selenium 添加代理ip方式总结

  最近在调研代理平台的质量,需要尝试selenium接入代理,所以对收集的资料进行总结.selemiun使用java开发,浏览器使用firefoxdriver.FirefoxDriver使用

2019-09-10 17:20:34 3133

原创 hadoop学习笔记

这篇为学习hadoop的笔记http://f.dataguru.cn/hadoop-25108-1-1.htmlhadoop简介  hadoop是一个由Apache基金会所开发的分布式系统基础架构,目前已经构成一个大数据生态。基于hadoop,可以组建单台到多台服务器的集群,来提供大数据存储和计算方案。简单需求  假设我们目前有一个1g的文件需要存储,使用传统的文件系统存储的话,就需要1...

2019-08-16 15:35:55 109

原创 设计模式之观察者模式

  观察者模式定义对象一对多的关系,他希望一个对象的状态发生改变时,其他依赖于它的对象能够接到通知并执行相应的处理逻辑。例如微信订阅某个公众号,当公众号发布新文章时,所有订阅该公众号的人都会收到文章推送消息。spring的事件机制是采用观察者模式,进行业务的解耦的。   观察模式简单分为被观察者和观察者,顾名思义。实现原理为被观察者有一个存放观察者的集合,当被观察者发生状态改变时,通知所有的观察...

2019-08-10 20:39:14 92

原创 排序类算法

排序类算法非常重要,排序是很多算法的子问题基础1.选择排序描述:首先找到最小的数,将他和数组中的第一个元素交换位置,再次,在剩下的数中找到最小的数,将他和第二个元素的位置交换,一直进行下去,直到整个数组排序完成。时间复杂度: 平方级空间复杂度:不用额外的空间优点:N^2 / 2次比较 和 N次交换, 数据移动次数少缺点:每次找到的最小的数的过程并不能为下一次的最小值提供信息,如果数组已...

2019-08-07 15:41:31 82

原创 设计模式笔记

单例模式:多个客户端只能使用同一个对象,不允许创建其他对象懒汉式:在需要调用对象时候才创建饿汉式:在调用之前已经创建简单工厂模式:对目标类的不同实现的创建统一由一个工厂创建客户端不需要只能具体创建细节,只需要向工厂指定具体的实现类当添加了新的实现类时,需要修改工厂增加新的创建代码,违背关闭原则工厂方法模式:为了解决简单工厂模式的缺点,建立工厂抽象类,具体的工厂实现类创建具体的产品...

2019-08-07 15:40:07 99

原创 spring 事件机制

  在软件开发过程中,有时候我们会遇到需要把具体业务解耦出来,让各个模块只负责相应的处理逻辑.比如说,在我们的抽象业务逻辑中有一个负责开往目的地的司机driver,现在我们的业务系统中不仅要处理司机去往目的地的逻辑,也有其他业务模块需要关注司机具体的目的地是什么地方。然而司机只负责把乘客送到具体地方。不需要负责告诉业务他去哪里。这时候我们可以采用spring的事件机制,让业务解耦。spring的...

2019-08-07 15:38:44 141

原创 selenium sendkeys方法总结

SendKeys可以给element做输出,也可以作为动作快捷键,比如ctrl c ,ctrl v ,.alt, enter等当作为快捷键时,这些字符按需要转换格式。当作为输入时,每个按键由一个或多个字符表示,例如输入"a",则表示给当前元素输入字符a,当需要输入多个字符时,则多个字段连接在一起作为输入,例如输入"abc"。有一些字符由特殊用途,例如,+,^, %, ~, () 这些字符都...

2019-08-07 15:37:18 5724 2

原创 selenium 对特定元素截图

  这段时间在处理文字验证码问题,需要对文字验证码的图片以及提示的图片合成一块来进行截图,然后识别,分析到这两个都有同一个父类html元素,所以拟定对父类元素进行定位,然后截图。  项目使用Java开发,实现采用senenim对元素截图。因为没有发现更好的对元素截图的方法,所以采用先对整个屏幕进行截图,然后在对具体元素截取这部分图片。  先对driver进行类型转换成TakesScreensh...

2019-08-07 15:34:26 544

空空如也

空空如也

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

TA关注的人

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