
编程语言
Tybyqi
这个作者很懒,什么都没留下…
展开
-
golang逃逸分析
带GC语言给我们程序的编写带来了极大的便利,但是与此同时屏蔽了很多底层的细节,比如一个对象是在栈上分配还是在堆上分配。对于普通的代码来说虽然不需要关心这么多,但是作为强迫症程序猿,还是希望能让自己写出来的代码性能最优,所以还是需要了解什么是逃逸,以及如何判断是否发生了逃逸。什么是堆和栈?首先需要知道,我们说的堆和栈是啥。这个可不是数据结构里面的"堆"和"栈",而是操作系统里面的概念。栈...转载 2019-08-15 16:06:01 · 459 阅读 · 0 评论 -
scala 两个map合并
简单合并val map1 = Map("key1" -> 1, "key2" -> 3, "key3" -> 5)val map2 = Map("key2" -> 4, "key3" -> 6, "key5" -> 10)println(map1 + ("key1" -&原创 2019-03-13 13:49:09 · 1230 阅读 · 0 评论 -
C++ const用法 尽可能使用const
C++const 允许指定一个语义约束,编译器会强制实施这个约束,允许程序员告诉编译器某值是保持不变的。如果在编程中确实有某个值保持不变,就应该明确使用const,这样可以获得编译器的帮助。1.const 修饰成员变量1 #include<iostream> 2 using namespace std; 3 int main(){ 4 int a1=3;...转载 2019-03-14 17:15:23 · 328 阅读 · 0 评论 -
Spring事务处理
事务(Transaction)是并发控制的单位,是用户定义的一个操作序列。这些操作要么都做,要么都不做,是一个不可分割的工作单位。数据库向用户提供保存当前程序状态的方法,叫事务提交(commit);当事务执行过程中,使数据库忽略当前的状态并回到前面保存的状态的方法叫事务回滚(rollback)事务特性(ACID)原子性(atomicity):将事务中所做的操作捆绑成一个原子单元,...原创 2019-03-05 16:18:44 · 208 阅读 · 0 评论 -
Camera 基本工作原理
一、Camera 工作原理介绍1. 结构 .一般来说,camera 主要是由 lens 和 sensor IC 两部分组成,其中有的 sensor IC 集成 了 DSP,有的没有集成,但也需要外部 DSP 处理。细分的来讲,camera 设备由下边几部 分构成: 1) lens(镜头) 一般 camera 的镜头结构是有几片透镜组成,分有塑胶透镜(Plastic)和玻璃透 镜(Gla...原创 2019-02-20 15:51:27 · 538 阅读 · 0 评论 -
Spring校验@RequestParams和@PathVariables参数
依赖配置 要使用Java Validation API,我们必须添加validation-api依赖项: <dependency> <groupId>javax.validation</groupId> <artifactId>validation-api</artifactId> <versio...转载 2019-02-25 14:40:22 · 1391 阅读 · 0 评论 -
JVM上的响应式流 — Reactor简介
响应式编程 作为响应式编程方向上的第一步,微软在.NET生态系统中创建了Rx库(Reactive Extensions)。RxJava是在JVM上对它的实现。响应式编程是一个异步编程范式,通常出现在面向对象的语言中,作为观察者模式的一个扩展。它关注数据的流动、变化的传播。这意味着可以轻易地使用编程语言表示静态(如数组)或动态(如事件发射源)数据流。 响应式流随着时间的推移...原创 2019-02-25 14:37:13 · 275 阅读 · 0 评论 -
如何在VS2013配置CUDA,并编译生成DLL
环境:win7_64 VS2013 CUDA7.0 安装配置CUDA环境,这里就不详细介绍了。一、手动建立CUDA工程 打开VS2013,新建空白项目,起名为 test2。 在解决方案管理器中,右键点击工程test2,生成自定义,选择CUDA6.0 添加头文件 t.h,注意这里t.cuh,也是可以的,但是为了外观上等同于纯C\C++类库,写成.h 添加...原创 2019-02-25 14:35:57 · 1294 阅读 · 0 评论 -
最有用的Postgres扩展:pg_stat_statements
扩展能够扩展,改变和推进Postgres的行为。怎么样?通过挂钩到低级Postgres API挂钩。 横向扩展Postgres的开源 Citus数据库本身实现为 PostgreSQL扩展,它允许Citus保持与Postgres版本保持同步,而不像其他Postgres分支那样落后。我之前已经写过关于 各种类型的扩展,虽然我想深入了解最有用的Postgres扩展: pg_stat_statem...原创 2019-02-13 15:37:15 · 549 阅读 · 0 评论 -
深度剖析Spring Cloud底层原理
毫无疑问,Spring Cloud 是目前微服务架构领域的翘楚,无数的书籍博客都在讲解这个技术。不过大多数讲解还停留在对 Spring Cloud 功能使用的层面,其底层的很多原理,很多人可能并不知晓。实际上,Spring Cloud 是一个全家桶式的技术栈,它包含了很多组件。本文先从最核心的几个组件,也就是 Eureka、Ribbon、Feign、Hystrix、Zuul 入手,来剖析其...原创 2019-04-10 10:53:05 · 340 阅读 · 0 评论 -
Mybatis中SqlNode的组合模式
组合(Composite)模式就是把对象组合成树形结构,以表示“部分-整体”的层次结构,用户可以像处理一个简单对象一样来处理一个复杂对象,从而使得调用者无需了解复杂元素的内部结构。组合模式中的角色有: 抽象组件(容器):定义了树形结构中所有类的公共行为,例如add(),remove()等方法。 树叶:最终实现类,没有子类。 树枝:有子类的管理类,并通过管理方法调用...原创 2019-04-10 10:55:08 · 1816 阅读 · 0 评论 -
基于MYSQL的 网络游戏 多线程 数据库 服务器 设计与实现
游戏开发到后期,随之而来的是各种性能测试调优。前两天看两年前写的数据库服务器,那叫一个囧,当初设计是单线程的,也就是所有的数据库操作请求放入一个队列中,逐个取出来做数据库查询操作。虽然mysql 的性能很赞,但要是这样游戏有个几万人在线,数据库服务器肯定吃不消。得益于innodb 的行锁支持,很多数据库的请求都是可以被并行处理的,比如两个角色A 、B 同时登录,进行登录验证并且获取角色列表请求,角...原创 2019-04-11 11:53:03 · 536 阅读 · 0 评论 -
C++ vector和list的区别
1.vector数据结构vector和数组类似,拥有一段连续的内存空间,并且起始地址不变。因此能高效的进行随机存取,时间复杂度为o(1);但因为内存空间是连续的,所以在进行插入和删除操作时,会造成内存块的拷贝,时间复杂度为o(n)。另外,当数组中内存空间不够时,会重新申请一块内存空间并进行内存拷贝。2.list数据结构list是由双向链表实现的,因此内存空间是不连续的。只能通过指针...原创 2019-04-22 14:32:04 · 458 阅读 · 0 评论 -
Spring Boot2中配置HTTPS
1.生成证书使用jdk,jre中的keytool.exe生成自签名的证书,需要配置JAVA_HOME和path环境变量,即jdk的环境变量。命令如下:keytool -genkey -alias tomcat -storetype PKCS12 -keyalg RSA -keysize2048 -keystore keystore.p12 -validity3650然后可以找到C:...原创 2019-04-22 14:29:26 · 265 阅读 · 0 评论 -
idea 中vim快捷键
行尾:shift + 4($) 行首:shift + 6(^) 上面插入一行:O 下面插入一行:o 跳转至文件头:g 跳转至文件尾: G 跳转到指定行:行号+G (例如:10G,跳转到第10行) 删光标所在行:dd 删光标至指定:df指定字符 正向删除单字:x (往前) 向下翻一整页:ctrl+f “f” meaning forward 向上翻一整页:ctrl+b “b” meaning back...原创 2019-04-08 11:50:45 · 457 阅读 · 0 评论 -
Java和操作系统交互细节
结合 CPU 理解一行 Java 代码是怎么执行的根据冯·诺依曼思想,计算机采用二进制作为数制基础,必须包含:运算器、控制器、存储设备,以及输入输出设备,如下图所示。(该图来源于百度)我们先来分析 CPU 的工作原理,现代 CPU 芯片中大都集成了,控制单元,运算单元,存储单元。控制单元是 CPU 的控制中心, CPU 需要通过它才知道下一步做什么,也就是执行什么指令,控制单元又包含...原创 2019-04-08 11:48:50 · 334 阅读 · 0 评论 -
数组array的一些用法
array_filter(PHP 4 >= 4.0.6, PHP 5, PHP 7) array_filter — 用回调函数过滤数组中的单元。(返回回调函数中返回true的元素,也就是过滤掉返回false的元素)array_filter ( array $array [, callable $callback [, int $flag = 0 ]] ) : array参数...转载 2019-04-02 15:05:03 · 1104 阅读 · 0 评论 -
jquery数字动画插件jquery.animateNumber.js
jq数字动画插件-jquery.animateNumber.js,可以实现数字的动画显示效果,比如从1跑到36500,从1%跑到100%类似这样的效果,数字动画效果控制多样,非常不错。jquery.color.min.js并不是必须的,您可以删除,Example 3演示了使用jquery.color.min.js来达到数字由红到绿的变色引入js文件:<script type='tex...原创 2019-04-11 11:56:01 · 1418 阅读 · 1 评论 -
如何在Azure中配置SQL Server 2008 R2故障转移群集实例
配置Azure实例我不会在这里详细介绍一些屏幕截图,特别是因为Azure门户UI经常会经常更改,所以我拍摄的任何屏幕截图都会很快变得陈旧。相反,我将只介绍您应该了解的重要主题。故障域或可用区?为了确保您的SQL Server实例具有高可用性,您必须确保您的群集节点位于不同的故障域(FD)或不同的可用区(AZ)中。您的实例不仅需要驻留在不同的FD或AZ中,而且您的文件共享见证(见下文)...翻译 2019-02-13 15:35:37 · 607 阅读 · 0 评论 -
如何在Spring Boot中使用Hibernate Natural ID
首先,让我们关注所需类的实现。完成所有这些后,我们将能够为具有自然ID的实体提供存储库。用自然ID编写实体让我们考虑以下具有自动生成ID和自然ID(code列)的实体。这只是一个使用一个自然ID的典型实体@NaturalId:@实体public class Product implements Serializable { private sta...原创 2019-02-13 15:32:53 · 836 阅读 · 0 评论 -
MySQL 删除重复项
Mysql 删除重复记录,保留id最大的记录,参考SQL如下DELETE tbl_exam FROM tbl_exam, ( SELECT max(tbl_id) id, studyid FROM tbl_exam GROUP BY studyid HAVING count( * ) > 1 ) t2 WHERE tbl_exam.stud...原创 2019-01-24 16:36:28 · 195 阅读 · 0 评论 -
C++_颜色COLORREF
1.OdCmColor转COLORREFOdCmColor odaColor;COLORREF refColor = RGB(odaColor.red(),odaColor.green(),odaColor.blue());2. COLORREF转OdCmColorCOLORREF refColorOdCmColor odaColor;odaColor.setRGB(GetR...原创 2019-01-24 16:35:15 · 1942 阅读 · 0 评论 -
如何通过Java中的对象值来同步块
问题有时,我们需要通过变量的值来同步代码块。为了解这个问题,我们将考虑一个简单的银行应用程序,它对客户的每次转账进行以下操作:通过此外部Web服务转移评估现金返还金额(CashBackService) 在数据库中执行汇款(AccountService) 更新现金返还评估系统中的数据(CashBackService)汇款操作如下:public void withdrawM...原创 2019-01-08 18:21:40 · 931 阅读 · 1 评论 -
使用Oracle验证外部数据
我在Corda Slack频道闲逛了很多,并尽可能地回答问题。我试图回答的合理数量的问题与Oracles有关。更具体地说,何时使用一个。我觉得我可以回答这个问题,“当你需要验证可以经常更改的外部数据时使用Oracle。”我可能在某些时候写了类似的答案。我不能做的就是告诉别人如何实施。因此,为了纠正这个问题,我写了这篇文章,学习如何自己实现一个,并与你和我未来的自我分享这些知识。何时使用Orac...原创 2019-01-08 18:19:48 · 352 阅读 · 0 评论 -
Ribbon 框架简介及搭建
Ribbon简介1. 负载均衡框架,支持可插拔式的负载均衡规则2. 支持多种协议,如HTTP、UDP等3. 提供负载均衡客户端Ribbon子模块1. ribbon-core(ribbon的核心,主要包含负载均衡器、负载均衡接口、客户端接口、内置负载均衡实现API)2. ribbon-eureka(为eureka客户端提供的客户端实现类)3. ribbon-h...原创 2019-01-07 17:11:10 · 325 阅读 · 0 评论 -
Docker Compose 引用环境变量
Compose CLI 与环境变量Compose CLI(compose command-line 即 docker-compose 程序)能够识别名称为 COMPOSE_PROJECT_NAME 和 COMPOSE_FILE 等环境变量(具体支持的环境变量请参考这里)。比如我们可以通过这两个环境变量为 docker-compose 指定 project 的名称和配置文件:$ expor...原创 2019-01-11 17:54:16 · 517 阅读 · 0 评论 -
造成HashMap非线程安全的原因
我们知道 HashMap 底层是一个 Entry 数组,当发生 hash 冲突的时候,HashMap 是采用链表的方式来解决的,在对应的数组位置存放链表的头结点。对链表而言,新加入的节点会从头结点加入。javadoc 中有一段关于 HashMap 的描述:此实现不是同步的。如果多个线程同时访问一个哈希映射,而其中至少一个线程从结构上修改了该映射,则它必须保持外部同步。(结构上的修改是指添加或...原创 2019-01-11 17:53:02 · 235 阅读 · 0 评论 -
Scala之柯里化和隐式转换
1. 柯里化柯里化指将原来接受两个参数的函数变成一个新的接受一个参数的过程。新的函数返回一个以原有第二个参数作为参数的函数。scala> val mul = (x: Int, y: Int) => x*ymul: (Int, Int) => Int = <function2>scala> val mulOneAtTime = (x: Int) =...原创 2018-12-29 16:29:11 · 372 阅读 · 0 评论 -
使用NamedParameterJdbcTemplate指定命名参数
在本文中,我们将介绍如何在连接到后端Postgres数据库的Spring启动应用程序中使用NamedParameterJdbcTemplate。我们将使用NamedParameterJdbcTemplate从Postgres DB插入,更新和删除员工。为了保持设计的合理性,我将dao,service和controller分开了。服务只是本文的一个转折点。概观NamedParameterJd...转载 2019-01-09 16:16:46 · 2663 阅读 · 0 评论 -
idea git 高级操作(checkout、reset、revert)
git reset切换到指定分支,这里以master为例,下面的操作都是在master 分支上操作git checkout master--soft 缓存区和工作目录都不会被改变 --mixed 默认选项。缓存区和你指定的提交同步,但工作目录不受影响 --hard 缓存区和工作目录都同步到你指定的提交git reset HEAD~1介绍 :撤销commit history...原创 2019-01-15 18:04:33 · 9450 阅读 · 0 评论 -
java并行处理方法推荐
使用java进行开发的盆友,是否遇到过这样的情况,在一个任务里,需要处理几个耗时的方法,但是彼此之间没有联系,即这几个方法可以并发进行。那么可以使用如下方式提高任务处理的效率。具体的可以看如下代码import java.util.concurrent.Callable;import java.util.concurrent.ExecutorService;import java.util...原创 2019-01-15 18:06:32 · 5287 阅读 · 1 评论 -
在k8s集群部署jenkins
apiVersion: v1kind: Podmetadata: name: jenkinspodame labels: app: myappjenkinsspec: containers: - name: jenkins-container-name image: 192.168.175.143:5000/android:0.0 ports: - containerPort: 8...转载 2019-01-30 16:23:51 · 469 阅读 · 1 评论 -
HashMap源码分析
1.HashMap简介HashMap 主要用来存放键值对,它基于哈希表的Map接口实现,是常用的Java集合之一。JDK1.8 之前 HashMap 由 数组+链表 组成的,数组是 HashMap 的主体,链表则是主要为了解决哈希冲突而存在的(“拉链法”解决冲突).JDK1.8 以后在解决哈希冲突时有了较大的变化,当链表长度大于阈值(默认为 8)时,将链表转化为红黑树,以减少搜索时间。...原创 2019-02-15 15:50:21 · 172 阅读 · 0 评论 -
网络库性能对比
TCP ping-pong 测试 go 收发20W QPS 单线程/多线程 boost::asio 收发 9W7 QPS 单线程 / 多线程ae(Redis网络库) 收发7W5 QPS 单线程libuv 收发 6W9 QPS 单线程...原创 2019-02-15 15:48:31 · 651 阅读 · 0 评论 -
MD5加密原理解析及OC版原理实现
MD5加密原理解析及OC版原理实现一、MD5算法基础概念 MD5算法是Hash算法的一种,叫做讯息摘要演算法。所谓摘要,从字面意思理解,是指内容的大概。在MD5算法中,这个摘要是指将任意数据映射成一个128位长的摘要信息。并且其是不可逆的,即从摘要信息无法反向推演中原文,在演算过程中,原文的内容也是有丢失的。 因为MD5算法最终生成的是一个128位长的数据,从原理上...原创 2019-01-29 15:15:25 · 372 阅读 · 0 评论 -
java8新特性之time包总结
Java8新特性java.time.*包学习。 自从java发布模式变更就发现自己有些跟不上他们的速度,java8还有不少没有用透而9、10、11相继出来,长江后浪推前浪一浪胜过一浪。之前date的使用还不敢自信说多透彻,后续都是泪...(欢迎酱油...)以jdk1.8.0_111为例新的设计思路引入final定义支持时间点不可变和线程安全,长久来的Date的设计一直遭人诟病着;...原创 2019-01-29 15:13:36 · 570 阅读 · 0 评论 -
NIO-ByteBuffer
ByteBuffer 是jdk内部提供的字节缓冲区,内存分配主要分为堆内存和直接内存(堆外内存)。1、堆内存分配//分配一个容量为32的堆缓冲区ByteBuffer buffer = ByteBuffer.allocate(32);2、直接内存ByteBuffer buffer = ByteBuffer.allocateDirect(32); 字节数据操作By...原创 2019-01-29 15:02:00 · 154 阅读 · 0 评论 -
djang常用查询SQL语句
将django语法和sql对应一下,希望对大家有所帮助查询单个列的值story.object.values_list("url", flat=True)SELECT `story`.`url` FROM `hbtc_story` WHERE `story`.`status` = resolved AND查询Stories.objects.filter(Q(stat...原创 2019-01-29 14:59:52 · 190 阅读 · 0 评论 -
如何用QtPy创建Webcam扫码应用
之前分享了如何用QtPy和Dynamsoft Barcode Reader创建一个简单的桌面应用, 通过加载一张图片来识别条形码。这篇文章要分享如何加上摄像头的支持做实时扫码。如何用Python和PyQt代码显示Camera视频流要获取视频流,最简单的方法就是用OpenCV:pip install opencv-python用OpenCV来显示视频流的代码很简单,只需要一个无限...原创 2019-02-01 16:16:13 · 362 阅读 · 0 评论 -
Scala之模式匹配和样例类
1. 模式匹配1.1. 更好的 SwitchScala 中类似 Java 的 switch 代码:object PatternDemo { def main(args: Array[String]): Unit = { var sign = 0 val ch: Char = 'p' val valchar = 'p' var digit = 0...转载 2018-12-27 17:51:50 · 286 阅读 · 0 评论