- 博客(47)
- 资源 (3)
- 收藏
- 关注
原创 关于java并发你需要了解的基础
java多线程入门干货!持续更新...性能问题上下文频繁切换:切换时需要记住当前线程运行到哪,要保存当前线程所有变量活跃性问题饥饿:优先级低的线程永远抢不到资源死锁:A等B,B等A活锁:A让B,B让A线程安全加锁解决: 进程内的用JVM内部的锁,跨JVM的用分布式锁。难点在于如何判断是否存在线程安全问题。...............
2022-10-11 16:56:31 525
原创 freeswitch1.10.7 安装&部署排坑
在1.10.4+版本后,安装和部署流程发生了很大变化,例如sofia和spandsp模块需要单独安装等,实际上增加了部署的复杂度。
2022-07-20 16:50:52 5344 4
原创 freeswitch启动报错Error Creating SIP UA for profile
这个问题在fs1.6.20版本就遇到过,当时折腾了很久也没搞明白原因,通过重新安装fs糊里糊涂解决了。后来业务需求,fs需要升级到fs1.10.3版本,结果安装完后遇到了相同的报错。。。不得不感叹:遇坑不填,坑后有坑遇坑想躲,躲得了初一躲不过十五...
2022-04-26 23:59:37 2621
原创 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 674
原创 [freeswitch]mod_dptools功能总结(updating)
前言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 3075
原创 freeswitch加载模块过程
这里写自定义目录标题模块自启动配置新增模块模块自启动配置修改conf/autoload_configs/modules.conf.xml新增模块
2021-08-11 17:25:25 1090
原创 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 97
原创 JVM类加载机制
引导类加载器:加载JVM运行所需的,位于JRE的lib目录下的核心类库,比如rt.jar(jdk内置方法)、charsets.jar(字符集)扩展类加载器:加载JVM运行所需的,位于JRE的lib目录下的ext扩展目录中的jar应用程序类加载器:加载ClassPath路径下的类包(一般就是我们自己写的java类)自定义加载器:加载用户自定义路径下的类包...
2021-07-29 11:17:26 62
原创 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 1767 2
原创 FreeSWITH+SIPCAPTURE安装配置全记录(centOS7)
sipcapture的首页和简介1、安装 如果linux服务器可以连接外网,那么安装sipcapture非常简单,跟着官网步骤几步就完成了。 有时候服务器外网不通(例如公司的测试环境),那就需要先配置代理(需要知道代理服务器地址和端口)。配置curl命令的http/https全局代理,需要修改 /etc/profile 文件:vim /etc/profile,然后添加:http_proxy=http://username:[email protected].
2021-06-16 16:48:26 2948 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 108
原创 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 618 1
原创 freeswitch安装&配置(centOS7)
(转载,侵删)FreeSWITCH 安装配置的 各种坑, 填坑freeswitch 安装和问题解决
2021-02-20 09:15:05 2378
原创 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 153
原创 使用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 3977
原创 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 819 3
原创 mybatis源码初探(一) 源码编译&db配置加载和sql执行过程
jdbc -> dbUtils -> myBatis代码示例mybatis三大核心流程初始化阶段。代理阶段。回想一下mybatis使用,在进行CRUD的时候,为什么可以直接使用Mapper接口,而不需要实现类?答案就是jdk的动态代理:我们将Mapper接口传给jdk的动态代理,然后动态代理会返回一个实例。...
2020-12-22 14:55:07 341
原创 java算法题刷题常用工具(updating...)
java算法题刷题常用工具ComparatorPriorityQueueComparatorPriorityQueue
2020-11-11 14:20:41 1559 2
原创 理解设计模式——创建型模式(4)原型模式
原型模式原型模式结构:“原型”接口 -->(声明克隆方法)一个“原型”对象 -->原型模式特点:又叫作“克隆(clone)模式”,原型(被复制者)是一个支持克隆的对象。
2020-07-19 19:31:50 111
原创 理解设计模式——创建型模式(1)工厂模式
只让客户“new工厂”,不让客户直接“new产品”(虽然客户实际上要的是产品)。从客户端(调用方)代码看到,客户要做的只是利用两个具体工厂,“召唤”出了Truck和Airplane两个具体产品,并且“对照着说明书”完成了装货(load方法)和运送(travel方法)。至于Truck和Airplane是怎么生产出来的,load()和travel()是怎么实现的一概不用管(换个角度来看,对提供服务方也是一种保密)。抽象产品和抽象工厂本身是接口还是抽象类,个人认为都可以。
2020-06-08 00:07:06 140
转载 MySQL性能优化实践
优化思路数据查询慢,不代表 SQL 语句写法有问题。 首先,我们需要找到问题的源头才能“对症下药”。笔者用一张流程图展示 MySQL 优化的思路:无需更多言语,从图中可以清楚地看出,导致数据查询慢的原因有多种,如:缓存失效,在此一段时间内由于高并发访问导致 MySQL 服务器崩溃;SQL 语句编写问题;MySQL 服务器参数问题;硬件配置限制 MySQL 服务性能问题等。查看 MySQL 服务器运行的状态值如果系统的并发请求数不高,且查询速度慢,可以忽略该步骤直接进行 SQL 语句调优步骤。执行
2020-05-25 19:32:23 184
原创 vi/vim 常用命令参考
vi可以分为三种状态分别是命令模式(进入vi时)插入模式(输入[i]进入,输入[ESC]回到命令模式)底行模式(文件保存或退出时)命令模式:gg: 转到第一行G: 转到最后一行$: 移动到行首^: 移动到行尾/[关键字]或?[关键字] :查找关键字,按n查找下一个,N查找上一个u:撤销操作插入模式:I:进入插入模式,光标定位到行首A:进入插入模式,光标定位到行尾i:进入插入模式,光标定位到当前光标处底行模式::w 保存文件:q 退出
2020-05-19 13:54:38 266
原创 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 306
原创 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 154
原创 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 5398
原创 利用redis实现时间锁
在定时任务中添加时间锁,可以防止集群中不同机器重复执行此定时任务:@Scheduled(cron = "*/5 * * * * ? ")void missedCallsPush() {/*** 时间锁*/if(!getLock(IM_TIME_LOCK, false)){ return;}时间锁代码实现:/*** lock* @param key key* @return boolean true分钟维度/false 秒钟维度*/private boolean getL
2020-05-12 13:56:50 714
原创 git 单个文件回退到历史版本
比如OA_App.xcodeproj这个文件,发现错误,要回退到指定历史版本。首先进入到这个文件所在目录,然后查看历史记录git log -4 OA_App.xcodeproj # 查看最近四条历史记录可以看到各历史版本的commitid,回退到指定commitid:git reset (commitid) OA_App.xcodeproj git commit -m "回退到指定版本"git checkout OA_App.xcodeproj # 更新到工作目录git
2020-05-12 13:52:48 773
原创 git 代码强制覆盖
远端强制覆盖本地git fetch --all 拉取所有更新,不同步git reset --hard origin/dev_qmy_IM 本地代码同步线上最新版本(会覆盖所有与远端同名的本地文件)git pull 再pull一次(可以不用,因为上一步已经做过了)本地强制覆盖远端git push origin dev_qmy_IM --force...
2020-05-12 13:46:54 445
原创 git 本地新建分支并同步到远端的步骤
假设已经从远端仓库的master分支pull下了代码,并进行了修改。但是不想将提交到远端的master分支,而是想将代码提交到一个新的分支。此时需要在本地新建分支并提交,然后同步到远端仓库。1、首先在本地创建新分支:git checkout -b dev_qmy -b 参数表示创建“dev_qmy”分支的同时切换到这个分支,相当于git branch dev_qmy + git checkout dev_qmy两条命令2、添加所有代码和文件git add .3、提交到新分支并同步到远端
2020-05-09 15:19:08 5449
基于arduino的人体温度和手指压力采集
2015-11-02
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人