- 博客(23)
- 收藏
- 关注
原创 Mysql查询优化
Mysql查询优化最常见方法是索引一. 索引对于不同的MySql存储引擎,索引实现细节不同,这里不展开了。1).索引的优缺点优点: 可以在查询时避免全表扫描,加快查询速度。不仅可以加快单表查询速度,对多表查询加速更加明显缺点: 索引占物理空间,降低了大部分与写入有关的操作速度(因为写入操作要相应修改索引)2).索引的选取为用于搜索,分组,排序的列创建索引(即最佳候选索引选取列位于w...
2018-10-13 23:54:54
171
原创 leetcode: 删除链表中的冗余结点
Given a sorted linked list, delete all nodes that have duplicate numbers, leaving only distinct numbers from the original list.Example 1:Input: 1->2->3->3->4->4->5Output: 1->2-...
2018-10-10 11:28:10
380
原创 剑指offer:找出数组中只出现一次的两个数字
一个整型数组里除了两个数字之外,其他的数字都出现了偶数次。请写程序找出这两个只出现一次的数字。#include<unordered_map>class Solution {public://num1和num2分别保存这两个只出现一次的数字 void FindNumsAppearOnce(vector<int> data,int* num1,int *num2...
2018-10-10 10:48:19
231
转载 单链表排序
单链表排序初始化:#include <stdio.h>#include <stdlib.h>#include <stdbool.h>//节点结构struct node{ int val; struct node * next;};typedef struct node node, * list;//打印函数void pr...
2018-10-10 09:42:01
715
原创 求【1...N】的全排列
对于部分有序数组,想要寻找最大值,最简单的方法是遍历,时间复杂度为O(n),但我们可以由有序性想到利用二叉查找,比如:对于一个先升后降数组,寻找其中最大值 for example: input:1 2 3 4 5 6 6 1 output:6 input: 1 2 3 4 5 6 7 8 9 6 4 3 2 1 output: 9 这是一道面试题,现在整理如下:#include&l...
2018-09-05 23:42:57
408
原创 聊聊C++关键字const
面试的时候被问到const关键字,我只说出了几条,没说全,感觉面试官很不满意,回去就恶补了一下,现在跟大家分享一下: (1)const变量和对象一旦定义就不能改变,故必须初始化 (2)默认状况下,const对象只在文件内有效。如果想在多个文件共享const对象就必须在变量定义前加extern关键字 (3)const的引用:把引用绑定到const上就像绑定到其他对象上一样,称之为对常量的引...
2018-08-28 15:03:41
145
原创 利用队列同步器构建ReentrantLock
ReentrantLock即重入锁,支持一个线程对资源重复加锁。除此之外,该锁还支持获取锁时公平性和非公平性选择。 前面我的博客中实现的Mutex不支持重入。Synchronized关键字隐式支持重进入。 对于ReentrantLock,已经获取到锁的线程再次调用lock方法获取锁不被阻塞。 公平地获取锁就是等待时间最长地线程优先获取锁,锁的获取是顺序的。 下面是公平获取锁和非公平获取锁的...
2018-08-26 17:25:55
207
原创 利用队列同步器AbstractQueuedSynchronizer构建TwinsLock
TwinsLock在同一时刻最多支持两个线程访问,超过两个线程的访问将被阻塞,这是共享式的访问package twinslock;import java.util.concurrent.TimeUnit;import java.util.concurrent.locks.AbstractQueuedSynchronizer;import java.util.concurrent.lock...
2018-08-26 15:23:11
254
原创 利用队列同步器构建独占锁
队列同步器是构建锁和其他同步组件的基础框架,他使用一个int型成员变量表示同步状态,通过内置FIFO队列来完成资源获取线程的排队工作。 同步器AbstractQueuedSynchonizer是一个抽象类,他的使用方式是继承,子类通过继承同步器并实现他的抽象方法来管理同步状态。 同步器中可以被重写的方法有: (1)protected boolean tryAcquire(int arg)//...
2018-08-26 00:39:17
166
转载 死锁的产生与解除
进程死锁及解决办法 一、要点提示(1) 掌握死锁的概念和产生死锁的根本原因。(2) 理解产生死锁的必要条件–以下四个条件同时具备:互斥条件、不可抢占条件、占有且申请条件、循环等待条件。(3) 记住解决死锁的一般方法,掌握死锁的预防和死锁的避免二者的基本思想。(4) 掌握死锁的预防策略中资源有序分配策略。(5) 理解进程安全序列的概念,理解死锁与安全序列的关系。(6) 了...
2018-08-24 12:08:57
7553
3
原创 构建数据库连接池
1.下面我们就使用等待超时模式构造简单数据库连接池,模拟从连接池中获取,使用和释放连接的过程,而客户端获取连接的过程被设定为等待超时模式,在1000 ms内无法获取到可用连接将会返回给客户端一个null,设定连接池大小为10,然后通过调节客户端线程数来模拟无法获取连接的场景。 2.连接池的定义: 通过构造函数初始化最大的连接上限,通过双向队列来维护连接,调用方先调用fetchConnectio...
2018-08-23 23:56:03
194
转载 Java 静态内部类
在Java世界里,经常被提到静态这个概念,static作为静态成员变量和成员函数的修饰符,意味着它为该类的所有实例所共享,也就是说当某个类的实例修改了该静态成员变量,其修改值为该类的其它所有实例所见。最近一个项目里频繁用到static修饰的内部类,再读了一下《Effective Java》才明白为什么会用static来修饰一个内部类也就是本文的中心——静态类。如果一个类要被声明为static的...
2018-08-23 19:32:50
159
原创 Kruskal算法求最小生成树(图是连通的)
Kruskal算法求图的最小生成树:Kruskal算法本质上上是贪心算法,即每次从图中选取权重最小的安全边(安全边就是加入最小生成树中不会形成回路的边)加入最小生成树(刚开始为空集)中,然后把改边从原图中剔除,继续重复前面的步骤,直到从原图中剔除所有的边或者原图中所有顶点均加入到生成树中。下面就是由一个图的邻接矩阵求其最小生成树的代码:/* * To change this licens...
2018-08-22 21:48:25
1243
1
原创 Parlindrome-Partitioning
class Solution {public: vector&lt;vector&lt;string&gt;&gt; partition(string s) { vector&lt;vector&lt;string&gt;&gt; res; vector&lt;string&gt; cur;
2018-08-21 21:32:39
237
原创 C++指针和引用的区别
指针和引用的区别 1.引用不可以为空,但指针可以为空。定义一个引用的时候,必须初始化; 2.引用一旦初始化后不可以再改变指向(但可以改变所指向对象的内容),而指针可以改变指向。 3.引用的大小是所指向的变量的大小,因为引用只是一个别名而已;指针是指针(地址)本身的大小,32位系统下,一般为4个字节。 4.引用比指针更安全。由于不存在空引用,并且引用一旦被初始化为指向一个对象,它就不能被改变...
2018-08-20 10:13:59
1672
转载 DNS分别在什么情况下使用UDP和TCP
DNS同时占用UDP和TCP端口53是公认的,这种单个应用协议同时使用两种传输协议的情况在TCP/IP栈也算是个另类。但很少有人知道DNS分别在什么情况下使用这两种协议。 如果用wireshark、sniffer或古老些的tcpdump抓包分析,会发现几乎所有的情况都是在使用UDP,使用TCP的情况非常罕见,神秘兮兮。其实当解析器发出一个request后,返回的response中的tc...
2018-08-17 11:28:15
2973
原创 select和epoll实现I/O复用
#include&amp;lt;stdio.h&amp;gt;#include&amp;lt;stdlib.h&amp;gt;#include &amp;lt;string.h&amp;gt;#include&amp;lt;unistd.h&amp;gt;#include&amp;lt;arpa/inet.h&amp;gt;#include
2018-08-16 22:32:18
151
原创 leetcode原题--将字符串切割为若干回文子串的最小切割次数
leetcode题目:Given a string s, partition s such that every substring of the partition is a palindrome.Return the minimum cuts needed for a palindrome partitioning of s.For example, given s =”aab”, ...
2018-08-15 10:23:17
801
原创 快速排序
源代码:import java.util.Scanner;/** * * @author liuzhenzhao */public class MyQuickSort { /** * @param args the command line arguments */ public static void QuickSort(int []A,in...
2018-08-14 17:20:24
123
转载 TCP三次握手和四次挥手
这是一个很有意思的问题~ 首先,我们要知道TCP是全双工的,即客户端在给服务器端发送信息的同时,服务器端也可以给客户端发送信息。而半双工的意思是A可以给B发,B也可以给A发,但是A在给B发的时候,B不能给A发,即不同时,为半双工。 单工为只能A给B发,B不能给A发; 或者是只能B给A发,不能A给B发。 我们假设A和B是通信的双方。我理解的握手实际上就是通信,发一次信息就是进行一次握...
2018-08-12 17:26:23
126
原创 简单的UDP通信(Java实现)
一 .源代码/*服务器端*/import java.util.*;import java.net.*;import java.io.*;public class UDPServer { private final static int PORT=3000; public static void main(String[] args) { // TODO ...
2018-08-12 16:12:31
4112
1
原创 最大堆排序
package heapsort;import java.util.ArrayList;import java.util.List;import java.util.Stack;/** * * @author liuzhenzhao */class MyHeapSort{ private int heap_size; public MyHeapSort(int...
2018-08-12 16:00:35
124
原创 Java对象的序列化和反序列化
1.基本概念 把对象转换为字节序列的过程称为对象的序列化。 把字节序列恢复为对象的过程称为对象的反序列化。 对象的序列化主要有两种用途: 1) 把对象的字节序列永久地保存到硬盘上,通常存放在一个文件中; 2) 在网络上传送对象的字节序列。2.JDK类库中序列化APIjava.io.ObjectOutputStream代表对象输出流,它的writeObject...
2018-08-11 21:09:24
117
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人