- 博客(51)
- 资源 (3)
- 收藏
- 关注
原创 实况:老菜鸟自力更生从零开始重学spring目标是画出一张唬人大图(三、spring启动的入口&搭建源码阅读环境)
有个关键问题需要想明白:spring是怎么“启动”的。回想一下,我平时工作时对spring的使用都是“无痕”的:在idea里写完业务代码,然后直接在idea内部启动tomcat后就可以本地调试了——这说明spring是被tomcat启动的。而spring本质上就是一段java代码,因此入口也无非是一个main方法。
2024-07-18 17:45:33
692
原创 实况:老菜鸟自力更生从零开始重学spring目标是画出一张唬人大图(二、源码下载&编译)
学习spring的源码,其实就是学习spring framework,常常耳闻的一些东西例如“spring-context”、“spring-webmvc”、“spring-aspects”等都是spring framework的组件。至于为什么排除这个模块,在官方的导入说明中写的很清楚(前文有图),因为spring-aspects会依赖外部模块Aspects,从而可能引起IDEA的编译异常。下载之后看到一个spring-framework的目录,里面就是spring的java源码了。
2024-06-15 19:25:53
957
原创 实况:老菜鸟自力更生从零开始重学spring目标是画出一张唬人大图(一、起步阶段)
不过这种调试也有缺点:调试的是spring编译之后的*.class文件(即通过pom引入的jar包),因此无法编辑,不能加注释或者修改某段代码。
2024-06-09 11:17:58
669
2
原创 关于java并发你需要了解的基础
java多线程入门干货!持续更新...性能问题上下文频繁切换:切换时需要记住当前线程运行到哪,要保存当前线程所有变量活跃性问题饥饿:优先级低的线程永远抢不到资源死锁:A等B,B等A活锁:A让B,B让A线程安全加锁解决: 进程内的用JVM内部的锁,跨JVM的用分布式锁。难点在于如何判断是否存在线程安全问题。...............
2022-10-11 16:56:31
578
原创 freeswitch1.10.7 安装&部署排坑
在1.10.4+版本后,安装和部署流程发生了很大变化,例如sofia和spandsp模块需要单独安装等,实际上增加了部署的复杂度。
2022-07-20 16:50:52
6492
4
原创 freeswitch启动报错Error Creating SIP UA for profile
这个问题在fs1.6.20版本就遇到过,当时折腾了很久也没搞明白原因,通过重新安装fs糊里糊涂解决了。后来业务需求,fs需要升级到fs1.10.3版本,结果安装完后遇到了相同的报错。。。不得不感叹:遇坑不填,坑后有坑遇坑想躲,躲得了初一躲不过十五...
2022-04-26 23:59:37
3489
原创 war包部署记录(centOS7+tomcat7)
Java应用的自动集成和部署,现在有很多成熟的框架了。人工部署的方式非常原始和低效,但是极端情况下无法避免。这里简单记录一次人工部署的过程。java的安装&环境配置确认是否已有java环境:java -version搜索可用的java安装包:yum search java-1.7搜出来很多:直接用yum安装devel版本:yum install java-1.7.0-openjdk-devel.x86_64装完后可以确认下版本:yum安装java的默认路径:/usr/lib/
2021-11-03 15:47:07
745
原创 [freeswitch]mod_dptools功能总结
前言freeSWITCH的mod_dptools模块各功能总结,这里只是整理下功能,具体用法参考官方wikianswer“接通”。建立aleg和fs之间的音频流,和bleg没关系。一般来说fs在接受dtmf或者播放语音之前都要先接通。在接通之后仍可以bridge到其它终端(接通后再bridge其实就是转接),回铃音由transfer_ringback设置。att_xfer转接。本来是A->B,att_xfer会让C加入进来,从而变成A->C。bgsystem后台执行一个系统命令。
2021-10-21 10:54:36
4375
1
原创 freeswitch加载模块过程
这里写自定义目录标题模块自启动配置新增模块模块自启动配置修改conf/autoload_configs/modules.conf.xml新增模块
2021-08-11 17:25:25
1526
原创 JAVA线程池学习小结和源码初探
目录1、创建一个线程池的基本方法1.1、参数解释1.2、方法说明2、几种常见线程池总结2.1、CachedThreadPool2.1.1、参数2.1.2、特点2.2、FixedThreadPool2.2.1、参数2.2.2、特点2.3、SingleThreadExecutor2.3.1、参数2.3.2、特点1、创建一个线程池的基本方法public ThreadPoolExecutor(int corePoolSize, int maximumP
2021-08-02 14:19:35
145
原创 JVM类加载机制
引导类加载器:加载JVM运行所需的,位于JRE的lib目录下的核心类库,比如rt.jar(jdk内置方法)、charsets.jar(字符集)扩展类加载器:加载JVM运行所需的,位于JRE的lib目录下的ext扩展目录中的jar应用程序类加载器:加载ClassPath路径下的类包(一般就是我们自己写的java类)自定义加载器:加载用户自定义路径下的类包...
2021-07-29 11:17:26
106
原创 FreeSWITCH呼叫流程整理
SIP Profile的几个概念一个Profile就是一个UA;一个UA就是一个“IP地址: 端口”fs的/sip_profiles目录下主要有三个东西(不考虑ipv6):external.xml、internal.xml、 /external目录。其中external.xml和internal.xml就是两个Profile;而/external里的xml文件是我们自定义的外部网关,这些外部网关都会被fs装入external.xml中external.xml默认运行在5060端口,internal.
2021-07-13 15:33:35
2361
2
原创 FreeSWITH+SIPCAPTURE安装配置全记录(centOS7)
sipcapture的首页和简介1、安装 如果linux服务器可以连接外网,那么安装sipcapture非常简单,跟着官网步骤几步就完成了。 有时候服务器外网不通(例如公司的测试环境),那就需要先配置代理(需要知道代理服务器地址和端口)。配置curl命令的http/https全局代理,需要修改 /etc/profile 文件:vim /etc/profile,然后添加:http_proxy=http://username:password@ntproxy.qa.nt.ctripxxxcorp.
2021-06-16 16:48:26
3671
1
原创 java刷题之常见数据结构算法整理(updating...)
理解常见数据结构算法链表1.理解链表反转的过程链表1.理解链表反转的过程public ListNode reverse(ListNode listNode){ // pre可以理解成一个新链表 ListNode pre = null; // 整个反转的过程可以理解为:将原链表cur拆开,组成新链表pre ListNode cur = listNode; // 新链表cur拆完,反转后的链表pre也就生成了
2021-03-22 09:50:53
170
原创 freeswitch运维开发常用命令(updating)
fs运维常用命令判断fs是否正在运行的两种方式:ps aux | grep freeswitch // 列出与fs相关的所有进程netstat -an | grep 5060 // 查看相关端口是否被占用,fs默认使用5060端口fs开启/关闭:freeswitch -nc // 后台启动fsfreeswitch -stop // 关闭fs客户端(fs_cli)命令更改dialplan后刷新并生效:reloadxml更改自定义
2021-03-09 08:55:03
924
1
原创 freeswitch安装&配置(centOS7)
(转载,侵删)FreeSWITCH 安装配置的 各种坑, 填坑freeswitch 安装和问题解决
2021-02-20 09:15:05
2720
原创 mybatis源码初探(二) 整合spring详细原理+源码
文章导航一、mybatis和spring的整合二、mybatis二级缓存1. 二级缓存简介&简单使用2.二级缓存配置和原理一、mybatis和spring的整合首先回顾一下mybatis的启动过程(详情可以参考上一篇文章):String resource = "resources/mybatis-config.xml";InputStream inputStream = Resources.getResourceAsStream(resource);// 读取配置文件获取sqlSessio
2021-01-19 22:21:23
203
原创 使用chrome浏览器直接调post接口
首先window+R调出运行,输入chrome.exe --user-data-dir="C://Chrome dev session" --disable-web-security这一步目的是关掉chrome的CORS策略。在弹出的chrome中F12调出控制台,console中输入如下代码后回车。var url = "http://localhost:8080/xxx/ipt/record/getRecordStream";var params = {callId:"0074543656690
2021-01-14 12:14:45
4804
1
原创 mybatis源码编译的一些坑
讲道理,如果mybatis和mybatis-parent的版本号一致的话,大概率是不会遇到坑的。但是不排除某些人的自残倾向,非要用不同版本的mybatis和mybatis-parent,这样的话可能会遇到以下这些坑:“cannot resolve plugins xxx”的问题:导致这个问题的原因是没有指定插件的版本号,在pom文件中为相应插件指定version即可,例如:或者干脆注释掉:“Cannot resolve plugin org.apache.maven.plugins:mav
2020-12-28 17:01:36
963
3
原创 mybatis源码初探(一) 源码编译&db配置加载和sql执行过程
jdbc -> dbUtils -> myBatis代码示例mybatis三大核心流程初始化阶段。代理阶段。回想一下mybatis使用,在进行CRUD的时候,为什么可以直接使用Mapper接口,而不需要实现类?答案就是jdk的动态代理:我们将Mapper接口传给jdk的动态代理,然后动态代理会返回一个实例。...
2020-12-22 14:55:07
403
原创 java算法题刷题常用工具(updating...)
java算法题刷题常用工具ComparatorPriorityQueueComparatorPriorityQueue
2020-11-11 14:20:41
1688
2
原创 理解设计模式——创建型模式(4)原型模式
原型模式原型模式结构:“原型”接口 -->(声明克隆方法)一个“原型”对象 -->原型模式特点:又叫作“克隆(clone)模式”,原型(被复制者)是一个支持克隆的对象。
2020-07-19 19:31:50
147
原创 理解设计模式——创建型模式(1)工厂模式
只让客户“new工厂”,不让客户直接“new产品”(虽然客户实际上要的是产品)。从客户端(调用方)代码看到,客户要做的只是利用两个具体工厂,“召唤”出了Truck和Airplane两个具体产品,并且“对照着说明书”完成了装货(load方法)和运送(travel方法)。至于Truck和Airplane是怎么生产出来的,load()和travel()是怎么实现的一概不用管(换个角度来看,对提供服务方也是一种保密)。抽象产品和抽象工厂本身是接口还是抽象类,个人认为都可以。
2020-06-08 00:07:06
192
转载 MySQL性能优化实践
优化思路数据查询慢,不代表 SQL 语句写法有问题。 首先,我们需要找到问题的源头才能“对症下药”。笔者用一张流程图展示 MySQL 优化的思路:无需更多言语,从图中可以清楚地看出,导致数据查询慢的原因有多种,如:缓存失效,在此一段时间内由于高并发访问导致 MySQL 服务器崩溃;SQL 语句编写问题;MySQL 服务器参数问题;硬件配置限制 MySQL 服务性能问题等。查看 MySQL 服务器运行的状态值如果系统的并发请求数不高,且查询速度慢,可以忽略该步骤直接进行 SQL 语句调优步骤。执行
2020-05-25 19:32:23
219
原创 vi/vim 常用命令参考
vi可以分为三种状态分别是命令模式(进入vi时)插入模式(输入[i]进入,输入[ESC]回到命令模式)底行模式(文件保存或退出时)命令模式:gg: 转到第一行G: 转到最后一行$: 移动到行首^: 移动到行尾/[关键字]或?[关键字] :查找关键字,按n查找下一个,N查找上一个u:撤销操作插入模式:I:进入插入模式,光标定位到行首A:进入插入模式,光标定位到行尾i:进入插入模式,光标定位到当前光标处底行模式::w 保存文件:q 退出
2020-05-19 13:54:38
316
原创 linux常用命令参考
人们所获得一切知识来源于社会生产实践、科学实验实践、改造社会的实践。网络1、netstat -anp | grep 3306 查看3306端口的占用情况(以为mysql默认监听3306接口,所以此命令也可以查看是否有数据库在运行)2、tcpdump -vvv -i ens160 port 5060 截获“ens160”网卡,5060端口的所有数据数据库1、vim /etc/odbc.ini 查看数据库信息,包括用户名密码等
2020-05-19 13:51:53
363
原创 Mysql常用命令参考
人们所获得一切知识来源于社会生产实践、科学实验实践、改造社会的实践。1、创建表:USE ccsoftexchangedb; # 指定数据库CREATE TABLE `t_vn_bill_sms_realtime` ( `id` INT(11) NOT NULL AUTO_INCREMENT COMMENT '主键', # 注意列名不是单引号 `id_code` VARCHAR(36) NOT NULL DEFAULT '' COMMENT '随机生成id', `sms_id
2020-05-13 10:41:19
200
原创 redis中set()方法参数
* EX seconds − 设置指定的到期时间(以秒为单位)。* PX milliseconds - 设置指定的到期时间(以毫秒为单位)。* NX - 仅在键不存在时设置键。* XX - 只有在键已存在时才设置。举例:SET mykey "1" EX 60 NX或RedisHandle.getInstance().set(mykey, "1", "NX", "EX", 60);使用举例:for(IptTrafficRecord itr : itrList){ if(Redi
2020-05-12 14:01:33
5895
基于arduino的人体温度和手指压力采集
2015-11-02
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人