自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(53)
  • 资源 (2)
  • 收藏
  • 关注

原创 【Netty学习】 阻塞式IO

【Netty学习】 阻塞式IONetty学习第一弹,先从简单的阻塞式IO说起。本文主要介绍传统阻塞式socket通信,代码可分为Server端 和 Client端Server端代码package socket;public class ServerBoot { private static final int PORT = 8080; public static vo...

2020-01-09 18:16:09 426

原创 NIO服务端创建过程

NIO服务端创建过程//步骤1: 打开ServerSocketChannel, 用于监听客户端的连接,它是所有客户端连接的父管道,代码示例如下。 ServerSocketChannel acceptSvr = ServerSocketChannel.open();//步骤2:绑定监听端口,设置连接为非阻塞模式,示例代码如下:acceptSvr.socket().bind(new Inet...

2020-01-09 17:50:49 248

原创 【校招真题】字节跳动

Bytedance Efficiency Engineering团队在8月20日搬入了学清嘉创大厦。为庆祝团队的乔迁之喜,字节君决定邀请整个EE团队,举办一个大型团建游戏-字节跳动大闯关。可是遇到了一个问题:EE团队共有n个人,大家都比较害羞,不善于与陌生人交流。这n个人每个人都向字节君提供了自己认识的人的名字,不包括自己。如果A的名单里有B,或B的名单里有A,则代表A与B互相认识。同时如果A认识...

2019-07-05 20:04:29 2080 1

原创 【捡起C++】类继承

多态公有继承​ 同一个方法在派生类和基类中的行为是不同的。这种复杂的行为称为多态。有两种机制可以实现多态公有继承;在派生类中重新定义基类的方法使用虚方法方法在基类被声明为虚的后,它在派生类中将自动成为虚方法。//brass.h -- bank account classes#ifndef BRASS_H_#define BRASS_H_#include <str...

2019-05-18 16:22:54 155

原创 【捡起C++】类和动态内存分配

​ C++在内存分配时,让程序在运行时决定内存分配,而不是编译时决定。​ C++使用new 和 delete来动态控制内存。//strngbad.h -- flawed string class definition#include <iostream>#ifndef STRNGBAD_H_#define STRNGBAD_H_class StringBad {priva...

2019-05-17 23:20:05 177

原创 【捡起C++】使用类

运算符重载//mytime0.h -- Time class before operator overloading#ifndef MYTIME0_H_#define MYTIME0_H_class Time {private: int hours; int minutes;public: Time(); Time(int h, int m = 0); void AddMin...

2019-05-14 23:35:09 128

原创 【捡起C++】对象和类

过程性编程和面向对象编程//stock00.h -- Stock class interface//version 00#ifndef STOCK00_H_#define STOCK00_H_#include <string>class Stock {private : std::string company; long shares; double share...

2019-05-12 22:17:14 93

原创 【捡起C++】内存模型和名称空间

单独编译​ C++允许甚至鼓励将组件函数放在独立的文件中。可以单独编译这些文件,然后链接成可执行的程序。 如果只修改了一个文件,则可以只重新编译该文件,然后将它与其他文件的编译版本链接。​ 头文件中常包含的内容:函数原型使用#define 或 const 定义的符号常量结构声明类声明模板声明内联函数//coordin.h -- structure templates and ...

2019-05-07 20:29:11 135

原创 【捡起C++】函数探幽

【捡起C++】函数探幽C++内联函数​ 执行到函数调用指令时,程序将在函数调用后立即存储该指令的内存地址,并将函数参数复制到堆栈(为此保留的内存块),跳到标记函数起点的内存单元,执行函数代码(也许还需将返回值放入到寄存器中),然后跳回到地址被保存的指令处 (这与阅读文章时停下来看脚注,并在阅读完脚注后返回到以前阅读的地方类似)。来回跳跃并记录跳跃位置意味着以前使用函数时,需要一定的开销。​ ...

2019-04-30 01:15:31 150

原创 【捡起C++】函数——C++的编程模块

​ 函数通过将返回值复制到指定的CPU寄存器或内存单元中来将其返回。随后,调用程序将查看该内存单元。 返回函数和调用函数必须就该内存单元中存储的数据的类型达成一致。函数原型将返回值类型告知调用程序,而函数定义命令被调用函数应返回什么类型的数据。//arrfun1.cpp -- functions with an array argument#include <iostream>c...

2019-04-27 17:47:58 278

原创 【捡起C++】分支语句和逻辑运算符

//if.cpp -----use the if statement#include <iostream>int main() { using std::cin; using std::cout; char ch; int spaces = 0; int totals = 0; cin.get(ch); while (ch != '.'){ if (ch == '...

2019-04-24 21:26:25 97

原创 【捡起C++】循环和关系表达式

//求阶乘#include <iostream>const int ArSize = 16;int main(){ long long factorials[ArSize]; factorials[0] = factorials[1] = 1LL; for (int i = 2; i < ArSize; i++){ factorials[i] = i * fac...

2019-04-22 23:45:45 112

转载 C++实现高性能内存池

默认分配器及其性能测试一、概述项目介绍​ 在 C/C++ 中,内存管理是一个非常棘手的问题,我们在编写一个程序的时候几乎不可避免的要遇到内存的分配逻辑,这时候随之而来的有这样一些问题:是否有足够的内存可供分配? 分配失败了怎么办? 如何管理自身的内存使用情况? 等等一系列问题。在一个高可用的软件中,如果我们仅仅单纯的向操作系统去申请内存,当出现内存不足时就退出软件,是明显不合理的...

2019-04-20 19:01:10 807

原创 【捡起C++】复合类型

​ 结构可以存储多个不同类型的值,而指针则是一种将数据所处位置告诉计算机的变量。字符串​ C-风格字符串具有一种特殊的性质: 以空字符(null character)结尾,空字符被写作\0,其ASCII码为0,用标记字符串结尾。char dog[8] = {'b', 'e', 'a', 'u', 'x', '', 'I', "I"}; // not a stringchar cat[8...

2019-04-14 13:57:43 199

原创 【捡起C++】处理数据

【捡起C++】处理数据​ 面向对象的本质是设计并扩展自己的数据类型。​ 为了把信息存储到计算机中,程序必须记录3个基本属性:信息将存储在哪里要存储什么值存储何种类型的信息int braincount;braincount = 5;/* 程序找到一块能存储整数的内存,将该内存标记为braincount,并将5复制到该内存单元中;然后,可在程序中使用brain...

2019-04-12 10:56:41 225

原创 C++实现即时通信软件

1.1 实验内容本实验使用 C++ 实现一个具备服务器端和客户端的即时通信聊天室。这个项目会学习C++网络开发的基本概念,同时可以熟悉Linux下的C++程序编译方法及简单的Makefile编写。1.2 实验知识点C++语言基本语法基本的MakefileC++面向对象程序设计epoll 网络编程1.3 实验环境g++Xfce 终端2.1 需求分析在这个聊天室软件中我...

2019-04-11 10:25:41 9335 3

原创 【捡起C++】开始学习C++

C++预处理器和iostream文件​ 如果程序要使用C++输入或输出工具,需提供这样两行代码#include<iostream>using namespace std;​ 可使用其它代码替换第二行,这么使用可以简化代码。​ C++和C一样,也使用一个预处理器,该程序在进行主编译前对源文件进行处理, 它处理名称以#开头的编译指令。在编译程序时,自动执行。#i...

2019-04-04 20:06:09 154

原创 【捡起C++】程序创建的技巧①

​ 源代码 —> 编译器 —> 目标代码 —> 链接程序 —> 可执行代码​ 编译源代码,将源代码翻译成机器语言,包含了翻译后的程序的文件就是目标代码。​ 链接是将目标代码同使用的函数的目标代码以及一些标准的启动代码(startup code)组合起来,生成程序的运行阶段版本。​ 包含最终产品的文件被称为 可执行代码1、UNI...

2019-04-03 00:18:27 138

原创 【LeetCode5】最长回文子串

LC5.Longest Palindromic SubstringGiven a string s, find the longest palindromic substring in s. You may assume that the maximum length of s is 1000.Example 1:Input: &amp;quot;babad&amp;quot;Output: &amp;quot;bab&amp;quot;Note: &am

2019-02-18 13:51:30 123

原创 【2018校招真题】拼多多2. 大整数相乘

题目描述有两个用字符串表示的非常大的大整数,算出他们的乘积,也是用字符串表示。不能用系统自带的大整数类型。输入描述:空格分隔的两个字符串,代表输入的两个大整数输出描述:输入的乘积,用字符串表示示例1输入72106547548473106236 982161082972751393输出70820244829634538040848656466105986748pub...

2019-02-02 15:59:45 340

原创 【2018校招真题】拼多多1. 最大乘积

拼多多1.最大乘积题目描述给定一个无序数组,包含正数、负数和0,要求从中找出3个数的乘积,使得乘积最大,要求时间复杂度:O(n),空间复杂度:O(1)输入描述:无序整数数组A[n]输出描述:满足条件的最大乘积输入3 4 1 2输出24定义五个数,一个最大,一个次大,一个第三大,一个最小,一个次小。只要找到这五个数,问题就解决了。因为最大乘积只可能是最大* 次大...

2019-02-02 14:47:43 234

原创 排序汇总

奇偶交换排序​ 分为奇交换和偶交换,**奇交换,总是比较奇数索引以及其相邻的后续元素。而偶交换总是比较偶数索引和其相邻的后续元素。**并且,奇交换和偶交换会成对出现,这样才能保证比较和交换涉及到数组中的每一个元素。算法步骤选取所有奇数列的元素与其右侧相邻的元素进行比较,将较小的元素排序在前面;选取所有偶数列的元素与其右侧相邻的元素进行比较,将较小的元素排序在前面;重复前面两步,直到所有...

2019-01-30 18:26:12 114

原创 【LeetCode 96】Unique Binary Search Trees

Given n, how many structurally unique BST’s (binary search trees) that store values 1 … n?Example:Input: 3Output: 5Explanation:Given n = 3, there are a total of 5 unique BST's: 1 3 ...

2019-01-24 15:57:24 79

转载 深入理解ThreadLocal的"内存溢出"

背景对ThreadLocal的实际使用场景一直有点模糊。在code review中大家对ThreadLocal是否会出现内存泄漏问题提出不同看法。故上网一探究竟,但是发现网上的说法不一,有的说会导致内存泄漏有的说不会,很难发现实战的结晶。分析结构一个简洁的ThreadLocal类的内部结构如下Java代码 [](javascript:void())public class Thre...

2019-01-05 19:17:56 535

转载 Java并发编程笔记之 CountDownLatch闭锁的源码分析

转 自: Java并发编程笔记之 CountDownLatch闭锁的源码分析​ JUC 中倒数计数器 CountDownLatch 的使用与原理分析,当需要等待多个线程执行完毕后在做一件事情时候 CountDownLatch 是比调用线程的 join 方法更好的选择,CountDownLatch 与 线程的 join 方法区别是什么?​ 日常开发中经常会遇到需要在主线程中开启多...

2019-01-05 18:12:50 143

转载 单例模式之双重检查

在实现单例模式时,如果未考虑多线程的情况,就容易写出下面的错误代码:public class Singleton { private static Singleton uniqueSingleton; private Singleton() { } public Singleton getInstance() { if (null == uni...

2019-01-05 17:34:35 898

原创 【LeetCode】84. Largest Rectangle in Histogram

题目描述​ 给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。求在该柱状图中,能够勾勒出来的矩形的最大面积。以上是柱状图的示例,其中每个柱子的宽度为 1,给定的高度为&nbsp;[2,1,5,6,2,3]。图中阴影部分为所能勾勒出的最大矩形面积,其面积为&nbsp;10&nbsp;个单位。示例:输入: [2,1,5,6,2,3]输出: 10...

2018-12-29 14:54:03 200

原创 【剑指offer】复杂链表的复制

输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空) public RandomListNode Clone(RandomListNode pHead) { // if(pHead == null...

2018-12-10 21:08:21 83

原创 【剑指offer】二叉搜索树的后序遍历序列

题目描述输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同思路:根据平衡二叉树及后序遍历的性质,可以得出给定数组的最后一个数字是根节点,BST左子树的节点都小于根节点,右子树的节点都大于根节点,按照此规律可以找出序列里的左子树节点和右子树节点,接着判断,如果右子树节点里存在着小于根节点的数据,那么肯定不是...

2018-12-08 19:35:13 81

原创 【剑指offer】树的子结构

输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)第一步:在树A中查找与根节点的值一样的结点,这实际上就是树的遍历第二步:判断树A中以R为根节点的子树,是否和树B有相同的结构。// 判断 root2 是否是 root1 的子结构 public boolean HasSubtree(TreeNode root1, TreeNode root2) { ...

2018-12-06 23:50:54 83

原创 【剑指offer】 旋转数组的最小数字

​ 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。​ 这套题最直观的解法是,从头到尾遍历一遍,就能找出最小的元素,这种思路的时间...

2018-12-05 15:02:22 98

原创 LVS负载均衡

LVS负载均衡LVS(Linux Virtual Server)即Linux虚拟服务器,是由章文嵩博士主导的开源负载均衡项目,目前LVS已经被集成到Linux内核模块中。该项目在Linux内核中实现了基于IP的数据请求负载均衡调度方案,其体系结构如图1所示,终端互联网用户从外部访问公司的外部负载均衡服务器,终端用户的Web请求会发送给LVS调度器,调度器根据自己预设的算法决定将该请求发送给后端...

2018-11-19 14:46:00 92

原创 Ch1走入并行世界

第一章、走入并行世界同步和异步​ 同步和异步通常用来形容一次 方法调用。同步方法调用一旦开始,调用者必须等到方法调用返回后,才能继续后续的行为。 异步方法的调用更像一个消息传递,一旦开始,方法调用就会立即返回,调用者就可以继续后续的操作,调用者就可以继续后继的工作。而 异步方法通常会在另外一个线程中“真实“的执行。整个过程,不会阻碍调用者的工作。对于调用者来说,异步调用似乎是一瞬间就完成的。如...

2018-11-17 17:29:25 149

原创 stream的filter、map和flatMap方法

Java核心技术 卷二filter、map和flatMap方法流的转换会产生一个新的流,它的元素派生自另一个流中的元素。List&lt;String&gt;wordList = ....;Stream&lt;String&gt; longWords = wordList.stream().filter(w-&gt;w.length() &gt; 12);将所有的单词转化成小写Stre...

2018-11-15 21:41:44 4012

原创 【LeetCode 108】将有序数组转换为二叉搜索树

将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树。本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。示例:给定有序数组: [-10,-3,0,5,9],一个可能的答案是:[0,-3,9,-10,null,5],它可以表示下面这个高度平衡二叉搜索树:0/ -3 9/ /-10 5注意:一个有序数组可以组成多种形状的...

2018-11-15 21:06:53 172

原创 spring ResourceLoader#getResource 无法找到资源 + java内部迭代与外部迭代

在使用idea的spring项目中,遇见资源无法加载的情况,如下,Resource resource = loader.getResource(&quot;classpath:/com/wisely/highlight_spring4/ch3/aware/test.txt&quot;);System.out.println(&quot;ResourceLoader加载的文件内容为: &quot; + IOUtils.toStri...

2018-10-28 12:53:53 1185

原创 Java NIO:IO与NIO的区别

一、概念​ NIO即New IO,这个库是在JDK1.4中才引入的。NIO和IO有相同的作用和目的,但实现方式不同,NIO主要用到的是块(IO是流),所以NIO的效率要比IO高很多。在Java API中提供了两套NIO,一套是针对标准输入输出NIO,另一套就是网络编程NIO。​ Java应用程序并非真的受着io的束缚,是JVM自身在io方面效率欠佳。操作系统与java基于流的io模型有...

2018-10-27 09:33:45 131

转载 旋转图像

旋转图像给定一个 n × n 的二维矩阵表示一个图像。将图像顺时针旋转 90 度。说明:你必须在原地旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要使用另一个矩阵来旋转图像。Example 1:Given input matrix =[[1,2,3],[4,5,6],[7,8,9]],rotate the input matrix in-place such th...

2018-10-23 00:14:31 83

原创 实现 Trie (前缀树)

实现一个 Trie (前缀树),包含 insert, search, 和 startsWith 这三个操作。示例:Trie trie = new Trie();trie.insert("apple");trie.search("apple"); // 返回 truetrie.search("app"); // 返回 falsetrie.startsWith("ap...

2018-08-06 20:53:42 405

原创 java 多线程下载 -- 断点续传

DownloadUI.java package cn.yif.URL.Download2;import javax.swing.*;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.WindowAdapter;import java.awt.event...

2018-06-27 10:03:24 189

机器学习实战 英文版

机器学习实战 英文版 带书签 带目录

2018-04-04

DBA修炼之道__数据库管理员的第一本书

DBA修炼之道__数据库管理员的第一本书 带书签目录

2018-04-03

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除