Amp

查杀oracle的阻塞

╄→尐↘猪︶ㄣ 提交于 2020-08-06 23:37:50
查杀oracle的阻塞 cuihengju8933 2018-07-22 20:12:32 42 收藏 执行以下脚本抓目前的阻塞: select (select username||':'||sid||':'||serial# from v$session where sid=a.sid) || ' locked ' || (select username ||':'||sid||':'||serial# from v$session where sid=b.sid) from v$lock a, v$lock b where a.block = 1 and b.request > 0 and a.id1 = b.id1 and a.id2 = b.id2; 找到目前的阻塞源: select b.SQL_TEXT,a.SID,a.SERIAL# from v$session a, v$sqlarea b where a.SQL_HASH_VALUE = b.HASH_VALUE(+) and sid=&sid; 杀掉目前的阻塞源: alter system kill session '5,35133'immediate; 来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/22996654/viewspace-2158304/,如需转载,请注明出处

常见字符类型转换持续更新中

a 夏天 提交于 2020-08-06 22:22:43
QString ----->wchar_t* && wchar_t* -----> QString QString szPath = "123456"; // wchar_t 为宽字符类型,一个字符占两个字节 ,unsigned short无符号短整型,一个整形占两个字节 (1)const wchar_t * encodedName = reinterpret_cast<const wchar_t *>(szPath.utf16()); (2)const wchar_t * encodedName = reinterpret_cast<const wchar_t *>(szPath.data()); szPath = QString::fromWCharArray(encodedName); const char* ------>QString && QString ------> char* const char* p ="123,你好"; //在window下VS中一个中文字符占两个字节,Qt下一个中文占三个字节 QString str; (1)str = QString(p); (2)str = QString::fromUtf8(p); (3)str = QString("%1").arg(p); p = str.toUtf8().data(); QChar-----

jvm之栈、堆

徘徊边缘 提交于 2020-08-06 20:28:36
1. Java Virtual Machine ​ 人群当中,一位叫java的小伙子正向周围一众人群细数着自己取得的荣耀与辉煌。就在此时,c老头和c++老头缓步走来,看着被众人围住的java,c老头感叹地对着身旁的c++说道:“原以为你就可以挑起我的梁子一直走下去的。” ​ c++笑着回应道:“江山代有才人出,这世界以后总会是90后甚至00后的天下!” 察觉到c和c++的java连忙走出人群,说道:“两位前辈谦虚了,这世界可还离不开两位前辈,我只不过是站在了两位前辈的肩上罢了。” ​ “你这小子可是解决了我们不少的问题啊,像指针、多继承、内存管理......那时,可是有很多程序员对我们抱怨颇深!”c++夸赞道。 ​ “还有Java Virtual Machine,真的是一个不错的想法!”一旁的c补充道。 ...... Java虚拟机,一直都是都是我们在学习Java的过程中反复提及的一个东西,那么JVM具体是怎样的呢?请看下图: ​ 简单说来,JVM的工作就是通过类加载系统将字节码文件加载到内存当中去,加载到内存当中的数据,就从逻辑上形成了我们看到的图中的运行时数据区(内存模型), 随后执行引擎操作/调度内存模型中数据执行程序。 ​ 现在看到内存模型里面的东西,大家是否有些眼熟呢?现在回想起自己面试时,遇到的JVM面试题是不是全是关于内存模型里面的东西。比如:栈、堆、Eden

Geek的办公桌长什么样?

懵懂的女人 提交于 2020-08-06 19:54:12
每当有人看到我的办公桌时,总少不了问关于我“特有”的键盘设置的问题。然后就有人建议我花些时间来分享一下我多年来收集的各种可以有效提高工作效率的Geek产品/技巧。因此,也就有了下面的这一整张列表:这些产品和工具可帮助我在公司和在家中都能持续保持高效的生产力。 这里的大多数技巧都是比较个人向的。如果你像我一样,一天中的大部分时间内都在使用计算机,那你工作区域的布置就显得尤为重要了。 请不要直接抱着你的笔记本电脑工作。 我在阿姆斯特丹Uber的办公桌 1. MacBook Pro 我的这台笔记本电脑是我老板给我的。两年前我加入Uber时,选择了MacBook Pro 13英寸型号,因为它的重量比同品牌其他型号的要轻很多。所以在这里,我愿意在CPU功率和屏幕尺寸之间做一些取舍,因为我在家里和办公室都拥有大型显示器,因此我不太在乎屏幕尺寸。但有意思的是,我目前正在开发一个基于云计算的项目,因此我们正在使用容器进行远程开发。突然之间,所有工作都可以跑在云上,而我笔记本电脑的劣势现在瞬间变成了优势。 2. APEX笔记本电脑支架 我最喜欢的笔记本电脑支架的极简桌面设置 Apex笔记本电脑支架是我早期注册的kickstarter项目之一( https://www. kickstarter.com/? ref=nav )。这个支架花了很长时间才定制完成寄到我手上。但我收到它时,真的感到非常满意

PHP判断客户端浏览器类型

让人想犯罪 __ 提交于 2020-08-06 19:46:20
代码如下 <?php /** * 判断浏览器名称和版本 */ function get_user_browser () { if ( empty ($_SERVER[ 'HTTP_USER_AGENT' ])) { return 'error!' ; } if ((strpos($_SERVER[ 'HTTP_USER_AGENT' ], 'MSIE' ) == false ) && (strpos($_SERVER[ 'HTTP_USER_AGENT' ], 'Trident' ) !== FALSE )) { return 'Internet Explorer 11.0' ; } if (strpos($_SERVER[ 'HTTP_USER_AGENT' ], 'MSIE 10.0' ) != false ) { return 'Internet Explorer 10.0' ; } if (strpos($_SERVER[ 'HTTP_USER_AGENT' ], 'MSIE 9.0' ) != false ) { return 'Internet Explorer 9.0' ; } if (strpos($_SERVER[ 'HTTP_USER_AGENT' ], 'MSIE 8.0' ) != false ) { return 'Internet Explorer 8

日志系统新贵 Loki,真香!!

随声附和 提交于 2020-08-06 14:11:53
最近,在对公司容器云的日志方案进行设计的时候,发现主流的ELK或者EFK比较重,再加上现阶段对于ES复杂的搜索功能很多都用不上最终选择了Grafana开源的Loki日志系统,下面介绍下Loki的背景。 背景和动机 当我们的容器云运行的应用或者某个节点出现问题了,解决思路应该如下: 我们的监控使用的是基于prometheus体系进行改造的,prometheus中比较重要的是metric和alert,metric是来说明当前或者历史达到了某个值,alert设置metric达到某个特定的基数触发了告警,但是这些信息明显是不够的。 我们都知道,k8s的基本单位是pod,pod把日志输出到stdout和stderr,平时有什么问题我们通常在界面或者通过命令查看相关的日志 举个例子:当我们的某个pod的内存变得很大,触发了我们的alert,这个时候管理员,去页面查询确认是哪个pod有问题,然后要确认pod内存变大的原因,我们还需要去查询pod的日志,如果没有日志系统,那么我们就需要到页面或者使用命令进行查询了: 如果,这个时候应用突然挂了,这个时候我们就无法查到相关的日志了,所以需要引入日志系统,统一收集日志,而使用ELK的话,就需要在Kibana和Grafana之间切换,影响用户体验。 所以 ,loki的第一目的就是最小化度量和日志的切换成本,有助于减少异常事件的响应时间和提高用户的体验

SpringBoot 配置类解析

谁说我不能喝 提交于 2020-08-06 13:54:30
本文首发于 vivo互联网技术 微信公众号 链接: https://mp.weixin.qq.com/s/NvPO5-FWLiOlrsOf4wLaJA 作者: Li Wanghong SpringBoot作为Java领域非常流行的开源框架,集成了大量常用的第三方库配置,Spring Boot应用中这些第三方库几乎可以是零配置的开箱即用,大部分的 Spring Boot 应用都只需要非常少量的配置代码,开发者能够更加专注于业务逻辑。SpringBoot上手快,但是如果你的项目中业务场景需要一些特殊定制,甚至对源码进行定制化,那这时候了解原理就变成必需的了,只有充分了解源码,知道框架底层的工作原理,才能对源码中原有的机制进行修改 / 扩展等等。本文介绍了SpringBoot如何解析配置类、如何集成第三方配置。 一、基本概念介绍 在SpringBoot中推荐基于Java Config的方式来代替传统的XML方式去引入Bean,本文就是分析SpringBoot如何解析这些配置类,为容器中注入我们自定义的以及SpringBoot为我们提供的Bean。SpringBoot版本基于2.1.7.RELEASE。 // 通常一个SpringBoot工程会含有这样一个主配置类,它位于我们项目的根包下,通过启动这个main方法就可以启动我们的项目 // 下面我们先分析

【转义字符】HTML 字符实体< &gt: &等

假装没事ソ 提交于 2020-08-06 13:54:12
在开发中遇到javascript从后台获取的url 会被转义,如:http://localhost:8080/Home/Index?a=14&b=15&c=123,想把它转成http://localhost:8080/Home/Index?a=14&b=15&c=123 网上找了半天的解决方案: 转义分为escapeHTML和unescapeHTML,先看两个函数的实现。 js代码: /** * @function escapeHTML 转义html脚本 < > & " ' * @param a - * 字符串 */ escapeHTML: function(a){ a = "" + a; return a.replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">").replace(/"/g, """).replace(/'/g, "&apos;");; }, /** * @function unescapeHTML 还原html脚本 < > & " ' * @param a - * 字符串 */ unescapeHTML: function(a){ a = "" + a; return a.replace(/</g, "<").replace(/>/g, ">").replace(/&/g, "&").replace(/"/g

多线程--精通ThreadPoolExecutor

耗尽温柔 提交于 2020-08-06 13:53:55
前言 在多线程开发中,应该避免显式创建线程,而是采用线程池里面的线程。使用线程池可以减少手动创建线程,减少线程创建和回收的损耗等。那么使用线程池就需要了解它的原理。这里我们ThreadPoolExecutor.execute()方法内部的具体实现逻辑 流程图 源码分析 public void execute(Runnable command) { if (command == null) throw new NullPointerException(); // 获取状态变量 int c = ctl.get(); if (workerCountOf(c) < corePoolSize) { // 如果worker个数小于核心线程数量 if (addWorker(command, true)) return; c = ctl.get(); } // 尝试将任务丢入工作队列中 if (isRunning(c) && workQueue.offer(command)) { int recheck = ctl.get(); if (! isRunning(recheck) && remove(command)) reject(command); else if (workerCountOf(recheck) == 0) addWorker(null, false); } //

C语言探索之旅 | 第二部分第八课:动态分配

半世苍凉 提交于 2020-08-06 13:53:13
>作者 谢恩铭,公众号「程序员联盟」(微信号:coderhub)。 转载请注明出处。 原文: https://www.jianshu.com/p/bbce8f04faf1 > 《C语言探索之旅》 全系列 内容简介 前言 变量的大小 内存的动态分配 动态分配一个数组 总结 第二部分第九课预告 1. 前言 上一课是 C语言探索之旅 | 第二部分第七课:文件读写 。 经历了第二部分的一些难点课程,我们终于来到了这一课,一个听起来有点酷酷的名字: 动态分配 。 >“万水千山总是情,分配也由系统定”。 到目前为止,我们创建的变量都是系统的编译器为我们自动构建的,这是简单的方式。 其实还有一种更偏手动的创建变量的方式,我们称为“动态分配”(Dynamic Allocation)。dynamic 表示“动态的”,allocation 表示“分配”。 动态分配的一个主要好处就是可以在内存中“预置”一定空间大小,在编译时还不知道到底会用多少。 使用这个技术,我们可以创建大小可变的数组。到目前为止我们所创建的数组都是大小固定不可变的。而学完这一课后我们就会创建所谓“动态数组”了。 学习这一章需要对指针有一定了解,如果指针的概念你还没掌握好,可以回去复习 C语言探索之旅 | 第二部分第二课:进击的指针,C语言的王牌! 那一课。 我们知道当我们创建一个变量时,在内存中要为其分配一定大小的空间。例如: