3.2.1 LeetCode数组类题目选做(1)—— First Missing Positive & Majority Element & Product of Array Except Self
数组题目概述
数组的题目很多很重要,一般和其他知识点综合应用。包括Two pointer,Binary Search,Dynamic Programming,Greedy,Backtracking 等,各类算法都将分别选做一些题目学习交流总结。
这一系列选择出一些非应用上述知识点,而是一些奇思妙想的、套路很深的数组的题目,总结后扩展思路,领悟一些可能会再次遇见的套路,也许可以处理类似的问题。
...
3.2.2 LeetCode数组类题目选做(2)—— Spiral Matrix & Rotate Image & Set Matrix Zeroes
Array 类题目选做之二 二维矩阵
54. Spiral Matrix
Given a matrix of m x n elements (m rows, n columns), return all elements of the matrix in spiral order.
Example 1:
Input:
[
[ 1, 2, 3 ],
[ 4, 5, 6 ],
[ 7,...
4.1 python数据结构之串——概述和基本算法
概述:
字符串(string)简称串,也是一种线性结构。在python中和array差不多,因为py的数组也可以包括各种字符(在C/Java一类的语法中,数组必须是同一种数据类型的元素)。线性结构,有限序列,是主要特点。串其中可以包含各种元素,也是计算机主要处理的一类对象。因此,串的题目涉及的范围很广,可以结合其他算法出题,往往比较有难度。通常,动态规划,双指针,回溯和栈是很重要的工具。
串的...
Java并发--深入理解显式锁
注:本篇博客部分内容引用自:Java并发编程:Lock
引言
在Java 5.0之前,协调对共享对象的访问可以使用到的机制只有synchronized和volatile。在Java 5.0之后,增加了一种新的机制:ReentrantLock。ReentrantLock并不是一种替代内置锁的方法,而是在内置锁不再适用的情况下,作为一种可选择的高级功能。
既生synchronized,何生Lock
...
Java并发--原子变量类的使用
注:本篇博客主要内容来源于网络,侵删~
引言
我们假设你已经熟练掌握了CAS,原子变量类等的相关概念。这篇博客中,我们主要讨论原子变量类的使用。
原子变量类
原子变量类共12个,分4组:
计数器:AtomicInteger,AtomicLong,AtomicBoolean,AtomicReference。
域更新器:AtomicIntegerFieldUpdater,AtomicLongFie...
29muduo_net库源码分析(五)
1.进程(线程)wait/notify
(1)pipe
(2)socketpair
(3)eventfd,eventfd是一个比 pipe更高效的线程间事件通知机制,一方面它比 pipe 少用一个file descripor,节省了资源;另一方面,eventfd的缓冲区管理也简单得多,全部“buffer”只有定长8 bytes,不像 pipe 那样可能有不定长的真正buffer。
in
30muduo_net库源码分析(六)
1.EventThread
(1)任何一个线程,只要创建并运行了EventLoop,都称之为IO线程
(2)IO线程不一定是主线程
(3)muduo并发模型one loop per thread + threadpool
(4)为了方便今后使用,定义了EventLoopThread类,该类封装了IO线程
(5)EventLoopThread创建了一个线程
(6)在线程函数中创建了一
Initializer Lists
1.简介
2.initializer_list
complex com{1, 2},也就是类似P(int a, int b)的这样子
(1)initializer_list是基于array实现的
(2)编译器为你构造了一个array的数组,将array的begin和len传入到initializer_list,initializer_list构造函数是pri
20muduo_base库源码分析(十一)
1.日志作用
(1)开发过程中:调试错误,更好的理解程序
(2)运行过程中:诊断系统故障并处理,记录系统运行状态
2.日志级别
(1)TRACE
指出比DEBUG粒度更细的一些信息事件(开发过程中使用)
(2)DEBUG
指出细粒度信息事件对调试应用程序是非常有帮助的。(开发过程中使用)
(3)INFO
表明消息在粗粒度级别上突出强调应用程序的运行过程。
(4
31muduo_net库源码分析(七)
1.Socket封装
(1)Endian.h
封装了字节序转换函数(全局函数,位于muduo::net::sockets名称空间中)。
(2)SocketsOps.h/ SocketsOps.cc
封装了socket相关系统调用(全局函数,位于muduo::net::sockets名称空间中)。
(3)Socket.h/Socket.cc(Socket类)
用RAII方法封装
32muduo_net库源码分析(八)
1.Acceptor
(1)Acceptor用于accept(2)接受TCP连接
(2)Acceptor的数据成员包括Socket、Channel,Acceptor的socket是listening socket(即serversocket)。Channel用于观察此socket的readable事件,并回调Accptor::handleRead(),后者调用accept(2)来接受新连接
33muduo_net库源码分析(九)
1.TcpServer/TcpConnection
(1)Acceptor类的主要功能是socket、bind、listen
(2)一般来说,在上层应用程序中,我们不直接使用Acceptor,而是把它作为TcpServer的成员TcpServer还包含了一个TcpConnection列表
(3)TcpConnection与Acceptor类似,有两个重要的数据成员,Socket与Chan
34muduo_net库源码分析(十)
1.连接关闭时序图
2.代码
1.TcpConnection.h
// Copyright 2010, Shuo Chen. All rights reserved.
// http://code.google.com/p/muduo/
//
// Use of this source code is governed by a BSD-style license
// that
46muduo库使用示例(五)
1.RTT计算
2.代码
#include
#include
#include
#include
#include
using namespace muduo;
using namespace muduo::net;
const size_t frameLen = 2*sizeof(int64_t);
void serverConnectionCallback(const
Baidu-Rpc中Pb结构转为Json
1.C++动态创建对象(类似java反射)
2.pb结构中repeated,Extension,如何将pb结构转化为string类型(baidu-rpc中有库json2pb文件,可以看源码学习一下)
3.Pb结构中Extension字段使用
4.Pb中Descriptor,Reflection如何实现动态创建对象
https://developers.google.com/protocol-
python中使用matplotlib问题
一.ImportError: No module named ‘_tkinter’的一种解决方法
导入matplotlib时,出现ImportError: No module named ‘_tkinter’的错误,首先yum list installed | grep ^tk
查看是否存在相应模块,通常原因是tkinter和tk-devel缺失。通过yum install -y tkint
_GNUC__宏函数
今天在看Linux系统编程这本书的代码的时候看到了GNUC,不太清楚这个宏所以去查了一下,以此记录。GNU C预定义了一系列的宏,这些宏都是以双下划线开始的,这里只讲一下GNUC GNUC_MINOR GNUC_PATCHLEVEL,其他GNU C的预定义宏可以到这里查看:
https://gcc.gnu.org/onlinedocs/gcc-5.1.0/cpp/Common-Predefin...
今日推荐
周排行