- 博客(57)
- 收藏
- 关注
原创 SSO 及 OAuth2.0
OAuth是Open Authority的缩写,使用令牌的方式来代替用户密码访问应用。SSO是Single Sign On的缩写,使用令牌的方式来代替用户密码访问应用。SSO是一种思想,而CAS只是实现这种思想的一种框架。有授权服务器、资源服务器、客户端。
2023-03-09 10:13:27
397
原创 各种锁机制
锁粗化是一种优化技术,如果一系列的连续操作都对同一个对象反复加锁和解锁,甚至加锁操作都是出现在循环体体之中,就算真的没有线程竞争,频繁地进行互斥同步操作将会导致不必要的性能损耗,所以就采取了一种方案:把加锁的范围扩展(粗化)到整个操作序列的外部,这样加锁解锁的频率就会大大降低,从而减少了性能损耗。在并发环境中,每个线程会先查看此锁维护的等待队列,如果当前等待队列为空,则占有锁,如果等待队列不为空,则加入到等待队列的末尾,按照FIFO的原则从队列中拿到线程,然后占有锁。锁消除是一种优化技术,就是把锁干掉。
2022-08-24 16:45:56
1018
1
原创 多数据中心多活技术架构
多数据中心多活架构是部署在多地的多个数据中心同时对外提供服务,当某个数据中心出现灾难性事故时,可以将整个数据中心的流量划拨到其他数据中心,实现快速故障转移。
2022-08-24 15:42:00
2447
原创 Spring Boot常规知识整理
@Autowired 是spring 的注解」,是 spring2.5 版本引入的,Autowired 只根据 type 进行注入,「不会去匹配 name」。2.之后会读取 spring-boot-autoconfigure.jar 下面的spring.factories,「获取到所有的 Spring 相关的 Bean 的全限定名 ClassName」spring 使用三级缓存去解决循环依赖的,其「核心逻辑就是把实例化和初始化的步骤分开,然后放入缓存中」,供另一个对象调用。
2022-08-22 14:37:21
472
原创 Redis常规知识整理
1、缓存空对象:使用空对象进行缓存,为空对象缓存增加失效时间;2、布隆过滤器:由一个很长的二进制向量和一系列随机映射函数构成的概率型数据结构;
2022-08-18 10:13:41
385
原创 Mediapipe Android环境搭建
https://mediapipe.dev/index.htmlhttps://google.github.io/mediapipe/https://github.com/google/mediapipe.git我的环境是macOS,其他系统按照官方文档都比较简单;官方安装地址:https://google.github.io/mediapipe/getting_started/install.html安装步骤如下:Homebrewke可以用官方和国内两个地址下载:或Xcode通过App Store
2022-06-23 14:06:58
1392
原创 【微服务架构】zookeeper总结
Zookeeper 定义与工作原理面向分布式应用的分布式协调服务一致性协调CAPConsistency:一致性(每次读操作都能保证返回的是最新数据)Availability:可用性(任何一个没有发生故障的节点,会在合理的时间内返回一个正常的结果)Partition tolerance:分区容错(当节点间出现网络分区,照样可以提供满足一致性和可用性的服务)备注:因为P是必须的,因此往往选择就在CP或者AP中2PC (Two-Phase Commit)二阶段提交算法阶段一:提交事务
2022-01-26 11:18:59
2617
原创 【分布式架构】指令重排序和happens-before
重排序编译器优化的重排序。编译器在不改变单线程程序语义的前提下,可以重新安排语句的执行顺序指令级并行的重排序。现代处理器采用了指令级并行技术来将多条指令重叠执行。如果不存在数据依赖性,处理器可以改变语句对应机器指令的执行顺序内存系统的重排序。由于处理器使用缓存和读/写缓冲区,这使得加载和存储操作看上去可能是在乱序执行的as-if-serial语义as-if-serial语义:不管怎么重排序(编译器和处理器为了提供并行度),(单线程)程序的执行结果不能被改变。遵守as-if-serial语义
2021-12-10 11:46:27
162
原创 【底层知识】线程模型
概要实现线程主要有3种方式:使用内核线程实现、使用用户线程实现和使用用户线程加轻量级进程混合实现。内核线程模型:完全依赖操作系统内核提供的内核线程(Kernel-Level Thread ,KLT)来实现多线程程序一般不会直接去使用内核线程,而是去使用内核线程的一种高级接口——轻量级进程(Light Weight Process,LWP);轻量级进程与内核线程之间1:1的关系称为一对一的线程模型;用户线程模型:有程序自行管理(少用);混合线程模型:结合内核模型和用户模型使用;线程调
2021-12-09 14:43:38
287
原创 【底层知识】Java内存模型(JMM)
概要Java内存模型即Java Memory Model,简称JMM。Java内存模型定义了多线程之间共享变量的可见性以及如何在需要的时候对共享变量进行同步。线程包括:通信和同步。线程之间的通信:通信机制包括共享内存和消息传递;线程之间的同步:指程序用于控制不同线程之间操作发生相对顺序的机制;Java的并发采用的是共享内存模型;硬件内存架构在CPU内部有一组CPU寄存器,也就是CPU的储存器。在主存和CPU寄存器之间还存在一个CPU缓存,CPU操作CPU缓存的速度快于主存但慢于CP
2021-12-09 14:07:30
563
原创 解决AWS 挂载、解决挂载完重启就消失问题
1.连接服务器ssh -i "xxx.pem" centos@xxx2.查看磁盘状态lsblk3.制作文件系统(新盘方可执行,有数据的盘不能执行此操作)-- sudo mkfs -t xfs /dev/nvme2n14.创建挂载目录datasudo mkdir /datamysql5.挂载磁盘sudo mount /dev/nvme2n1 /datamysql6.加入开机自启sudo vi /etc/fstab/dev/nvme2n1 /datamysql xfs ...
2021-11-22 13:39:59
1212
原创 【底层知识】锁细节
公平锁与非公平锁非公平锁在调用 lock 后,首先就会调用 CAS 进行一次抢锁,如果这个时候恰巧锁没有被占用,那么直接就获取到锁返回了。非公平锁在 CAS 失败后,和公平锁一样都会进入到 tryAcquire 方法,在 tryAcquire 方法中,如果发现锁这个时候被释放了(state == 0),非公平锁会直接 CAS 抢锁,但是公平锁会判断等待队列是否有线程处于等待状态,如果有则不去抢锁,乖乖排到后面。公平锁和非公平锁就这两点区别,如果这两次 CAS 都不成功,那么后面非公平锁和公平锁是一样
2021-11-10 11:16:26
356
原创 XCAP协议
XCAP协议一、 引言XCAP(XML Configuration Access Protocol,XML配置访问协议)。使用XML 文档格式来存储应用程序的配置数据,允许客户端读取、写入及修改配置数据。XCAP映射 XML 文档的子树和元素属性到 HTTP URL ,所以这些组件可以通过 HTTP 直接获取。 XCAP 是一种映射 XML 文档和文档属性到 HTTP URL 的一种惯
2014-07-23 20:39:59
5401
1
翻译 实时传输协议RTP与RTCP
实时传输协议RTP与RTCP RTP(Real-timeTransportProtocol)是用于Internet上针对多媒体数据流的一种传输协议。RTP被定义为在一对一或一对多的传输情况下工作,其目的是提供时间信息和实现流同步。RTP通常使用UDP来传送数据,但RTP也可以在TCP或ATM等其他协议之上工作。当应用程序开始一个RTP会话时将使用两个端口:一个给RTP,一个给RTCP。
2014-07-23 20:34:37
5197
翻译 RFC3550
RFC3550 RTP:实时应用程序传输协议 摘要本文描述RTP(real-time transport protocol),实时传输协议。RTP在多点传送(多播)或单点传送(单播)的网络服务上,提供端对端的网络传输功能,适合应用程序传输实时数据,如:音频,视频或者仿真数据。RTP没有为实时服务提供资源预留的功能,也不能保证QoS(服务质量)。数据传输功能由一个控制协议(RTC
2014-07-23 20:28:08
883
原创 SVN使用
SVN使用1.建立版本库(Repository)。cd svn/binsvnadmin create *地址2.运行服务器svnserve --daemon --root *地址3.服务器自启动windows下最好的方式是采用服务的方式。建立一个bat,复制如下代码:sc create SVN binpath= "\"地址\Subversion\bin\svnser
2014-07-13 09:48:50
605
原创 Zookeeper:安装
创建zoo.cfgtickTime=2000 dataDir=/Users/apple/zookeeper/data dataLogDir=/Users/apple/zookeeper/logs clientPort=4180 启动serverbin/zkServer.sh start 启动clientbin/zkCli.sh -serv
2014-07-13 09:48:19
547
原创 Mongodb数据库使用
一、启动 1.mongod --dbpath=c:\db --logpath=c:\mongo\logs\mongodb.log 2.mongo localhost:27017配置:cat /etc/mongodb.cnfdbpath=/data/db/mongod -f /etc/mongodb.cnfDaemon启动方式 --fork二、插入记录a=
2014-07-13 09:44:54
545
原创 Maven生命周期
validategenerate-sourcesprocess-sourcesgenerate-resourcesprocess-resources 复制并处理资源文件,至目标目录,准备打包。compile 编译项目的源代码。process-classesgenerate-test-sources process-test-sources gen
2014-07-13 09:43:49
449
原创 常用Maven插件
maven-antrun-pluginhttp://maven.apache.org/plugins/maven-antrun-plugin/maven-antrun-plugin能让用户在Maven项目中运行Ant任务。用户可以直接在该插件的配置以Ant的方式编写Target,然后交给该插件的run目标去执行。在一些由Ant往Maven迁移的项目中,该插件尤其有用。此外当你发现需要编写一
2014-07-13 09:43:20
638
原创 Mongodb数据库集群分片技术
一、分片分片就是对数据库中的数据进行拆分保存在不同机器上;分片包括手动分片和自动分片;MongoDB则支持自动分片;二、mongosMongoDB需要路由进程mongos,mongos知道所有数据的存放位置,应用连接mongos发送请求.mongos对应用隐藏分片细节,将请求转发到相应数据库机器;三、片键1.片键是作为数据拆分的依据,MongoDB依
2014-07-13 09:42:43
1136
原创 Wireshark查看
过滤器捕捉过滤器(CaptureFilters)显示过滤器(DisplayFilters)捕捉过滤器Protocol(协议):可能的值: ether, fddi, ip, arp, rarp, decnet, lat, sca, moprc, mopdl, tcp and udp.Host(s):可能的值: net, port, host, portrange.
2014-07-13 09:40:13
757
原创 git命令
0.git config --global1.创建新仓库(1)初始化:git init(2)创建一个本地仓库的克隆版本git clone /path/to/repository(3)创建一个远端服务器的克隆版本git clone username@host:/path/to/repository2.添加和提交git add git add *git
2014-07-04 13:56:53
397
原创 Java NIO
1.介绍NIO主要部分如下:ChannelsBuffersSelectors2.Channels主要包括:FileChannel 从文件中读写数据DatagramChannel 能通过UDP读写网络中的数据SocketChannel 能通过TCP读写网络中的数据ServerSocketChannel 可以监听新进来的TCP连接,对每一个新进来的连接都会创建一
2014-07-01 15:00:44
502
原创 HashMap关键原理笔记
1.hashmap实现采用hashcode上面方法提供了一个根据 hashCode() 返回值来计算 Hash 码的方法:hash(),这个方法是一个纯粹的数学计算,其方法如下:
2014-06-30 20:41:14
494
转载 Tomcat 系统架构与设计模式【设计模式分析】
门面设计模式门面设计模式在 Tomcat 中有多处使用,在 Request 和 Response 对象封装中、Standard Wrapper 到 ServletConfig 封装中、ApplicationContext 到 ServletContext 封装中等都用到了这种设计模式。门面设计模式的原理这么多场合都用到了这种设计模式,那这种设计模式究竟能有什么作用呢?顾名思
2014-03-12 15:02:47
1687
转载 【转】0个有关Java中String的面试问题
1. 如何比较两个字符串?使用“==”还是equals()方法?简单来讲,“==”测试的是两个对象的引用是否相同,而equals()比较的是两个字符串的值是否相等。除非你想检查的是两个字符串是否是同一个对象,否则你应该使用equals()来比较字符串。如果你知道interning的概念的话,那就更好了。2. 为什么针对安全保密高的信息,char[]比String更好?
2014-03-05 17:32:42
823
原创 apache Tomcat配置https
最近需要搭配一个https的服务器作为配置下发,由于客户端不能修改,所以服务器都是靠猜测去搭建,遇到几个小问题,在这里总结一下。首先是常规的https搭建。1.生成Server端安全证书keytool -genkey -alias tomcat -keyalg RSA -keystore server.keystore -validity 3600注:其中输入名称的时候 要使用
2014-03-05 17:00:13
909
原创 Android通过tcpdump抓包
最近做项目要用到安卓端的http连接,所以一直在用tcpdump抓包。这里总结一下具体的配置和使用方法:1.首先下载tcpdump http://www.strazzere.com/android/tcpdump2.安装adb并且配置,这里就不详细总结了,很简单。3.adb push ~/tcpdump /data/local/tcpdump目录一定要
2014-03-03 21:41:43
806
原创 冒泡排序 java
private static int[] sort(int[] value) { int valueLength = value.length; for(int i=0;i< valueLength;i++){ for(int j=0;j<valueLength-1-i;j++){ if(value[j]>value[j+1]){ int temp = value
2014-02-10 11:37:02
1264
原创 直接插入排序 java
private static int[] sort(int[] value) { int valueLength = value.length; for(int i =0; i< valueLength;i++){ int nextNum = value[i]; int j=0; for(j = i;j>0&&value[j-1]>nextNum;j--){ v
2014-02-10 11:11:54
540
原创 选择排序 java
private static int[] sort(int[] value) { int valueLength = value.length; for (int i = 0; i < valueLength; i++) { int offset = i; for(int j=i;j<valueLength;j++){ if(value[j]<value[offset
2014-02-10 10:57:26
660
1
原创 线程练习题2
一个线程打印 1~52,另一个线程打印字母A-Z。打印顺序为12A34B56C……5152Z。package com.thread.second;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import java.util.concurrent.locks.C
2013-11-26 11:01:33
653
原创 线程练习题1
有四个线程1、2、3、4。线程1的功能就是输出A,线程2的功能就是输出B,以此类推......... 现在有四个文件file1,file2,file3,file4。初始都为空。现要让四个文件呈如下格式:file1:A B C D A B....file2:B C D A B C....file3:C D A B C D....file4:D A B C D A....
2013-11-26 10:43:32
778
原创 linux端口调用情况
1.根据端口号判断端口是否被占用 lsof -i:端口号2.根据进程号获取占用端口netstat -anp |grep 进程号只显示监听端口:netstat -lnp |grep 进程号其他:获取进程打开文件句柄。lsof -p 进程号
2013-11-25 17:27:24
575
原创 Java线程-新特性
这里总结一下1.5以后java线程的新特性内容。具体使用和细节可以直接通过API查看。这里只是总结一下都有什么内容。方便自己查看。1.线程池 Executors固定大小的线程池:ExecutorService pool = Executors.newFixedThreadPool(size);单任务线程池:ExecutorService pool = Execu
2013-11-25 14:36:30
680
原创 Mac搭建Android开发环境
Android开发的调试可以通过模拟器和真机调试;关于真机调试 由于Mac没有驱动这个概念 所以大多机器可以直接用usb线连接Mac 从而调试;但是,也有部分机器无法直接使用,比如小米(我的就是2S)华为,那是因为adb不知道这手机的USB Vendor ID;解决方案:echo "0x2717" > ~/.android/adb_usb.ini
2013-09-25 10:03:12
1158
原创 Fuel UX使用
Fuel UX是Bootstrap的一个扩展,但是官方文档写的不是很容易引用,所以想要引用非常麻烦,下面总结一下引用Fuel UX的方法1.将html中Bootstrap得引用全部删除2.将jquery包,Bootstrap包,Fuel UX包加入工程3.修改标签4.引用FuelUX得css文件5.引用jquery FuelUX
2013-09-11 22:04:23
8794
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人