面经
文章平均质量分 68
s11show_163
这个作者很懒,什么都没留下…
展开
-
Application,Session和Cookie的区别
最全的Application,Session和Cookie/cache/hidden/Viewstate/字符串的区别通俗application和session的区别方法信息量大小Application任意大小Session小量,简单的数据Cookie小量,简单的数据Viewstate小量,简单的数据Cache任意大小 可以根据需要设定隐藏域小量,简单的数据 一个Web页面的生命期查询字符串小量,简单的数据 直到下.原创 2021-01-15 21:52:12 · 1813 阅读 · 0 评论 -
基本数据类型长度 以及 int,long 类型占字节数相同原因
https://blog.csdn.net/l773575310/article/details/52913893原创 2021-04-09 20:28:04 · 285 阅读 · 0 评论 -
i++的线程安全问题
谁不安全?https://blog.csdn.net/huike_/article/details/78368852首先i++是不安全的,++i是安全的,这一点要从汇编角度去考虑:i++在函数压栈过程前:1,先取内存数据段i的值,存入一个临时量中;2,然后进行自加,再写入内存数据段的i中;3,等待所有参数运算完成后,最后压栈时,将保存的临时量的值进行压栈。++i在函数压栈过程前:1,直接取内存数据段的i值,进行自加,再写入内存数据段的i中;2,等待所有参数运算完成后,最后压栈时,直接取原创 2021-04-01 23:35:49 · 754 阅读 · 1 评论 -
第k大元素 & topk
// 堆排 void adjustHeap(vector<int>& nums, int i,int len){ int tmp = nums[i]; for(int k=2*i+1;k<len;k=k*2+1){ if(k+1<len && nums[k+1] > nums[k]){ k = k+1; } ..原创 2021-03-20 23:54:07 · 70 阅读 · 0 评论 -
反转链表的递归和非递归写法
很详细的一篇题解 //迭代 ListNode* reverseList(ListNode* head) { if(head == nullptr) return head; stack<ListNode*> s; ListNode *p = head; while(p->next){ s.push(p); cout<<p->val<<" "原创 2021-03-20 23:53:46 · 117 阅读 · 0 评论 -
Linux下的线程安全
Linux下的线程安全原文结构有点乱线程安全:多个执行流对临界资源进行争抢访问,而不会造成数据二义性和逻辑混乱,成这段代码的过程是线程安全的。实现:保证多个执行流对临界资源进行争抢访问不造成数据二义性。同步与互斥:同步:通过条件判断,实现对灵界资源访问的时序合理性。互斥:通过唯一访问,实现对临界资源的安全性。一、互斥实现的技术:互斥锁原理:保证同一时间只有一个执行流对临界资源进行访问。即:对临界资源进行标记,无访问时标记为1,有访问时标记为0,当标记为1时,则用户可访问或线程原创 2021-03-16 23:36:05 · 116 阅读 · 0 评论 -
路由器:网络层,交换机:数据链路层
交换机工作在OSI的第2层-数据链路层,路由器工作在OSI的第3层-网络层。交换机内部的CPU会在每个端口成功连接时,通过将MAC地址和端口对应,形成一张MAC表。在今后的通讯中,发往该MAC地址的数据包将仅送往其对应的端口,而不是所有的端口。因此,交换机可用于划分数据链路层广播,所以是在数据链路层工作。路由器是一种多端口设备,它可以连接不同传输速率并运行于各种环境的局域网和广域网,也可以采用不同的协议。路由器工作在OSI模型的第三层-网络层,指导从一个网段到另一个网段的数据传输,也能指导从一种网络向另原创 2021-03-16 23:26:55 · 2361 阅读 · 0 评论 -
volatile和synchronized的区别
volatile和synchronized的区别volatile和synchronized特点首先需要理解线程安全的两个方面:执行控制和内存可见。执行控制的目的是控制代码执行(顺序)及是否可以并发执行。内存可见控制的是线程执行结果在内存中对其它线程的可见性。 根据Java内存模型的实现,线程在具体执行时,会先拷贝主存数据到线程本地(CPU缓存),操作完成后再把结果从线程本地刷到主存。synchronized关键字解决的是执行控制的问题,它会阻止其它线程获取当前对象的监控锁,这样就使得当前对象中被s原创 2021-03-16 23:23:12 · 99 阅读 · 0 评论 -
mysql三大范式
第一范式(1NF)数据表的每一列都要保持它的原子特性,也就是列不能再被分割。这张表就不符合第一范式规定的原子性,不符合关系型数据库的基本要求,在关系型数据库中创建这个表的操作就不能成功。不得不将数据表设计为如下形式。第二范式(2NF)概念:属性必须完全依赖于主键。下面这张表不符合第二范式的要求。2.1 缺点表中的第一行数据都存储了系名、系主任,数据的冗余太大如果有一个新的系还没有开始找到学生,那么不能讲该系的信息添加到数据表中去,从数据表中看不到该系的存在如果将某个系的学生信息全部删原创 2021-03-16 23:15:50 · 135 阅读 · 0 评论 -
排序时间复杂度 & 快速排序 改进快排的方法
1、冒泡排序是一种用时间换空间的排序方法,n小时好2、最坏情况是把顺序的排列变成逆序,或者把逆序的数列变成顺序,最差时间复杂度O(N^2)只是表示其操作次数的数量级3、最好的情况是数据本来就有序,复杂度为O(n)1、n大时好,快速排序比较占用内存,内存随n的增大而增大,但却是效率高不稳定的排序算法。2、划分之后一边是一个,一边是n-1个,这种极端情况的时间复杂度就是O(N^2)3、最好的情况是每次都能均匀的划分序列,O(N*log2N)1、n大时好,归并比较占用内存,内存随n的...原创 2021-03-16 23:00:35 · 688 阅读 · 0 评论 -
linux io多路复用 & select & poll & epoll
什么是多路复用IO多路复用适用以下场合select、poll、epoll之间的区别深度理解select、poll和epoll原创 2021-03-12 23:00:34 · 87 阅读 · 0 评论 -
剑offer - 5 -排序搜索
堆排序#include<iostream>using namespace std;void print(int arr[],int len){ for(int i=0;i<len;i++){ cout<<arr[i]<<" "; } cout<<endl;}void swap(int arr[],int i,int j){ int temp=arr[i]; arr[i] = arr[j]; arr[j] = temp;}原创 2020-06-29 15:56:55 · 122 阅读 · 0 评论 -
无锁队列的实现原理
https://blog.csdn.net/loulanyue_/article/details/96371584原创 2021-03-04 23:59:43 · 144 阅读 · 1 评论 -
std::forward完美转发(建议在std::move之后看)
参考https://blog.csdn.net/s11show_163/article/details/114296006一句话概括std::forward ———— 所谓的完美转发,是指std::forward会将输入的参数原封不动地传递到下一个函数中,这个“原封不动”指的是,如果输入的参数是左值,那么传递给下一个函数的参数的也是左值;如果输入的参数是右值,那么传递给下一个函数的参数的也是右值。一句话概括std::move ———— std::move是将对象的状态或者所有权从一个对象转移到另一.原创 2021-03-02 23:18:28 · 493 阅读 · 0 评论 -
std::move & 左值右值 &左值引用右值引用
一句话概括std::move ———— std::move是将对象的状态或者所有权从一个对象转移到另一个对象,只是转移,没有内存的搬迁或者内存拷贝。好了,下面系统的讲右值引用(及其支持的Move语意和完美转发)是C++0x加入的最重大语言特性之一。从实践角度讲,它能够完美解决C++中长久以来为人所诟病的****临时对象效率问题。从语言本身讲,它健全了C++中的引用类型在左值右值方面的缺陷。从库设计者的角度讲,它给库设计者又带来了一把利器。从库使用者的角度讲,不动一兵一卒便可以获得“免费的”效率提升。原创 2021-03-02 22:58:20 · 2006 阅读 · 1 评论 -
考过的题(面前必看)
c++介绍下std_moveC++介绍下右值引用c++异常处理java与c++的区别java:垃圾回收机制java: 抽象类与接口和c++中接口和虚函数的区别,java可以多继承吗?手写uniq_ptr编程:一个矩阵全是加号从左上角走到右上角有几种方式?编程:求字符串中回文字符串个数...原创 2021-03-01 00:04:03 · 111 阅读 · 0 评论 -
30张图带你彻底理解红黑树
30张图带你彻底理解红黑树原创 2021-03-01 00:12:37 · 138 阅读 · 0 评论 -
java与c++区别
Java和C++的区别:1. Java源码会先经过一次编译,成为中间码,中间码再被解释器解释成机器码。对于Java而言,中间码就是字节码(.class),而解释器在JVM中内置了。2. C++源码一次编译,直接在编译的过程中链接了,形成了机器码。3. C++比Java执行速度快,但是Java可以利用JVM跨平台。4. Java是纯面向对象的语言,所有代码(包括函数、变量)都必须在类中定义。而C++中还有面向过程的东西,比如是全局变量和全局函数。5. 转载 2021-03-01 00:11:27 · 89 阅读 · 0 评论 -
java为什么不能多继承
作者:Charlie W链接:https://www.zhihu.com/question/24317891/answer/65289659来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。先举一个多重继承的例子,我们定义一个动物(类)既是狗(父类1)也是猫(父类2),两个父类都有“叫”这个方法。那么当我们调用“叫”这个方法时,它就不知道是狗叫还是猫叫了,这就是多重继承的冲突。而java对此的解决方法是,一个物体的本质只能有一个。一个动物只能是狗或只能是猫,如果你想创造一原创 2021-03-01 00:10:22 · 99 阅读 · 0 评论 -
java: 抽象类与接口和c++中接口和虚函数的区别,java可以多继承吗?
转自https://blog.csdn.net/weixin_36571185/article/details/89523514一、对比图表JAVAC++普通函数虚函数,用Virtual标识抽象函数abstract纯虚函数,用Virtual标识 ,且函数=0抽象类抽象类,和java概念一样interface接口纯虚类,所有的函数都是纯虚函数。纯虚函数和虚函数的区别在于前者不包含定义,而后者包含函数体。二、C++虚函数与JAVA中抽象函数比较1:j.原创 2021-03-01 00:08:46 · 406 阅读 · 0 评论 -
4种常用线程池介绍
一. 线程池简介线程池的概念:线程池就是首先创建一些线程,它们的集合称为线程池。使用线程池可以很好地提高性能,线程池在系统启动时即创建大量空闲的线程,程序将一个任务传给线程池,线程池就会启动一条线程来执行这个任务,执行结束以后,该线程并不会死亡,而是再次返回线程池中成为空闲状态,等待执行下一个任务。线程池的工作机制2.1 在线程池的编程模式下,任务是提交给整个线程池,而不是直接提交给某个线程,线程池在拿到任务后,就在内部寻找是否有空闲的线程,如果有,则将任务交给某个空闲的线程。2.1 一个原创 2021-02-08 18:48:43 · 96 阅读 · 0 评论 -
给前中后其中二序重构二叉树
摘自889题解:https://leetcode-cn.com/problems/construct-binary-tree-from-preorder-and-postorder-traversal/solution/kan-wo-jiu-gou-liao-san-chong-bian-li-fang-shi-gou/给前序+后序重构二叉树:LC889/** * Definition for a binary tree node. * struct TreeNode { * int.原创 2021-01-31 23:09:49 · 75 阅读 · 0 评论 -
c++ substr & substring
在c语言中,并没有出现substr或者substring方法。然而在1983,substr()方法已经出现在C++语言中了。然而这时候还没有出现substring, 所以可以见得:substr是stustring的老大哥string substr (size_t pos = 0, size_t len = npos) const;从C++的方法定义中可以看到, substr的参数是开始下标,以及字符串长度。 std::string str="We think in generalities, bu原创 2021-01-31 21:48:33 · 955 阅读 · 0 评论 -
登录功能怎么短时间内重复登陆不用确认 & 异地登录
防止用户重复登陆+超时自动注销防止用户重复登陆Application,Session和Cookie/cache/hidden/Viewstate/字符串的区别原创 2021-01-31 21:21:49 · 184 阅读 · 0 评论 -
request & response & servlet
占坑这个比较全:https://www.cnblogs.com/alsf/p/9236668.html这个前半部分可以:https://www.cnblogs.com/MrzhangKk/p/5334296.htmlhttps://developer.aliyun.com/article/684250这个是servlet:https://www.runoob.com/servlet/servlet-intro.html...原创 2021-01-30 23:28:15 · 39 阅读 · 0 评论 -
深入线程Thread类的start()方法和run()方法
摘自:https://cloud.tencent.com/developer/article/1136459一、初识java的线程是通过java.lang.Thread类来实现的。VM启动时会有一个由主方法所定义的线程。可以通过创建Thread的实例来创建新的线程。每个线程都是通过某个特定Thread对象所对应的方法run()来完成其操作的,方法run()称为线程体。通过调用Thread类的start()方法来启动一个线程。在Java当中,线程通常都有五种状态,创建、就绪、运行、阻塞和死亡。.原创 2021-01-30 22:56:07 · 731 阅读 · 0 评论 -
java:List、Map、Set默认初始容量和扩容增量及加载因子 & 内存泄漏 & 线程安全
1.扩容加载因子的系数小于等于1,意指 即当 元素个数 超过 容量长度*加载因子的系数 时,进行扩容。eg:加载因子为0.75:即当 元素个数 超过 容量长度的0.75倍 时,进行扩容Class初始大小加载因子扩容倍数底层实现是否线程安全同步方式ArrayList1011.5倍+1Object数组线程不安全-Vector1012倍Object数组线程安全synchronizedHashSet160.75f2倍HashMap&l原创 2021-01-30 21:19:20 · 1094 阅读 · 1 评论 -
孤儿进程 & 僵尸进程
摘自:https://www.cnblogs.com/anker/p/3271773.html1、前言之前在看《unix环境高级编程》第八章进程时候,提到孤儿进程和僵尸进程,一直对这两个概念比较模糊。今天被人问到什么是孤儿进程和僵尸进程,会带来什么问题,怎么解决,我只停留在概念上面,没有深入,倍感惭愧。晚上回来google了一下,再次参考APUE,认真总结一下,加深理解。2、基本概念我们知道在unix/linux中,正常情况下,子进程是通过父进程创建的,子进程在创建新的进程。子进程的结束和父进程.原创 2021-01-30 20:15:07 · 142 阅读 · 0 评论 -
内存管理之3:分区存储交换技术 & 分页存储调度策略
交换技术是针对于分区式内存管理,将数据从主存->辅存,此时进程所需内存大于当前系统内存,那么该进程就不能在系统中运行页面调度策略是针对于分页式(段页式)内存管理,将数据从主存->辅存,此时如果一个进程所需内存大于当前系统内存,那么该进程仍然可以在系统中正常运行,因为该进程的一部分可以被还出到外存上。虚拟存储器系统通常定义三种策略来规定如如何(或何时)进行页面调度:调入策略、置页策略和置换策略。调页:何时(什么时候将一个页由外存调入内存中。),分为预调页和请求调页置页:何地(缺页中断时.原创 2021-01-30 19:18:32 · 862 阅读 · 0 评论 -
java vs c++ 深入理解java垃圾回收机制
一、垃圾回收机制的意义Java语言中一个显著的特点就是引入了垃圾回收机制,使c++程序员最头疼的内存管理的问题迎刃而解,它使得Java程序员在编写程序的时候不再需要考虑内存管理。由于有个垃圾回收机制,Java中的对象不再有“作用域”的概念,只有对象的引用才有“作用域”。垃圾回收可以有效的防止内存泄露,有效的使用空闲的内存。ps:内存泄露是指该内存空间使用完毕之后未回收,在不涉及复杂数据结构的一般情况下,Java 的内存泄露表现为一个内存对象的生命周期超出了程序需要它的时间长度,我们有时也将其称为“对象游原创 2021-01-29 22:54:34 · 340 阅读 · 0 评论 -
进程间通信之套接字 & 管道 & FIFO
一、管道(pipe)1、管道的定义和特点管道是一种两个进程间进行单向通信的机制。因为管道传递数据的单向性,管道又称为半双工管道。管道的这一特点决定了器使用的局限性。管道是Linux支持的最初Unix IPC形式之一,具有以下特点:数据只能由一个进程流向另一个进程(其中一个读管道,一个写管道);如果要进行双工通信,需要建 立两个管道;管道只能用于父子进程或者兄弟进程间通信。,也就是说管道只能用于具有亲缘关系的进程间通信。2、管道的命令command1 | command2 | command3原创 2021-01-29 00:08:37 · 448 阅读 · 0 评论 -
虚拟内存造成的连续地址空间假象被戳破怎么办
摘自:https://blog.csdn.net/qq_40861091/article/details/102601719很多初学者在这里会有一个疑问,既然给程序造成连续的空间假象,那要是内存中确实没内存可用了,会怎么办呢?那么对于*新的页数,他就会发生缺页中断,然后会覆盖起其他的页缺页中断大概有三种算法:1.(OPT)最晚不使用的算法:表示新的页如果进来没内存框可放了,会替换之后 几乎或者根本不会用到的页。但这种算法只是一种理想算法,因为没人能预估之后的事,包括计算机2.(FIFO)先进先出算法原创 2021-01-28 23:07:38 · 147 阅读 · 0 评论 -
操作系统——CPU调度
对于单处理器系统,每次只允许一个进程运行,任何其他进程必须等待,直到CPU空闲能被调度为止,多道程序的目的是在任何时候都有某些进程在运行,以使CPU使用率最大化。CPU-I/O区间周期CPU的成功调度依赖于进程的如下属性:进程执行由CPU 执行和I/O等待周期。进程在这两个状态之间切换,进程执行从 CPU 区间开始,在这之后是 I/O 区间,接着是另一个 CPU 区间,然后是另一个I/O区间,如此进行下去,最终,最后的CPU 区间通过系统请求终止执行。CPU调度程序每当CPU空闲时,操作系统就必须原创 2021-01-28 21:28:37 · 573 阅读 · 0 评论 -
动态语言和静态语言的区别(如python与c++)
概念动态语言(弱类型语言)是运行时才确定数据类型的语言,变量在使用之前无需申明类型,通常变量的值是被赋值的那个值的类型。比如Php、Asp、JavaScript、Python、Perl等等。var s ="hello";var i = 0;var b = true;静态语言(强类型语言)是编译时变量的数据类型就可以确定的语言,大多数静态语言要求在使用变量之前必须生命数据类型。比如Java、C、C++、C#等。String s="hello"; //String 类型的变量boolean原创 2021-01-28 19:38:54 · 9989 阅读 · 2 评论 -
MySQL存储引擎--MyISAM与InnoDB区别
先看下《高性能MySQL》中对于他们的评价:InnoDB:MySQL默认的事务型引擎,也是最重要和使用最广泛的存储引擎。它被设计成为大量的短期事务,短期事务大部分情况下是正常提交的,很少被回滚。InnoDB的性能与自动崩溃恢复的特性,使得它在非事务存储需求中也很流行。除非有非常特别的原因需要使用其他的存储引擎,否则应该优先考虑InnoDB引擎。MyISAM:在MySQL 5.1 及之前的版本,MyISAM是默认引擎。MyISAM提供的大量的特性,包括全文索引、压缩、空间函数(GIS)等,但MyISAM原创 2021-01-28 19:05:04 · 52 阅读 · 0 评论 -
C++智能指针循环引用问题分析
C++11中引入了三种智能指针,分别是shared_ptr、weak_ptr和unique_ptr智能指针的作用 – 减少内存泄漏智能指针可以帮助我们管理动态分配的堆内存,减少内存泄漏的可能性手动管理堆内存有引起内存泄漏的可能,比如这段代码try { int* p = new int; // Do something delete p;} catch(...) { // Catch exception}如果在执行Do something的时候发生了异常,那么程原创 2021-01-28 18:35:23 · 606 阅读 · 0 评论 -
vector删除用erase+remove
对于原vector { 10 20 10 15 12 7 9 },删除10,会将10后面的元素移动到前面(注意以下逐个元素对齐,模拟元素在内存中的位置,这样就容易看出变化规律)原vector10 20 10 15 12 7 9遇到第一个10,数组变成20 10 15 12 7 9遇到第二个1020 15 12 7 9 7 9因此,remove()需要和erase()配合使用svec.erase(std::remove(svec.begin(),svec.end(),“b原创 2021-01-28 00:07:46 · 255 阅读 · 0 评论 -
https连接过程 & https与http的区别 &中间人攻击
1.连接过程图源:https://www.jianshu.com/p/e30a8c4fa3291.1. https证书加密的第一步是认证服务器。一些主流浏览器会内置一个受信任的CA机构列表,并会保存相关CA机构的https证书。当用户在访问部署了https证书的网站时,服务器会提供经CA机构颁发的https证书,如果认证该服务器证书的CA机构是存在于浏览器的受信任CA机构列表当中,并且该https证书中的所有信息均与当前证在访问的网站所有信息一致,那么浏览器就会认为服务端是可信的,并从https原创 2021-01-25 23:13:49 · 525 阅读 · 0 评论 -
内存动态分配与释放,malloc和new区别
1. C语言的函数malloc和free(1) 函数malloc和free在头文件<stdlib.h>中的原型及参数 void * malloc(size_t size)动态配置内存,大小有size决定,返回值成功时为任意类型指针,失败时为NULL。 void free(void *ptr)释放动态申请的内存空间,调用free()后ptr所指向的内存空间被收回,如果ptr指向未知地方或者指向的空间已被收回,则会发生不可预知的错误,如果ptr为NULL,free不会有任原创 2021-01-24 23:47:58 · 268 阅读 · 0 评论 -
get & post区别
GET和POST是HTTP请求的两种基本方法,要说它们的区别,接触过WEB开发的人都能说出一二。最直观的区别就是GET把参数包含在URL中,POST通过request body传递参数。你可能自己写过无数个GET和POST请求,或者已经看过很多权威网站总结出的他们的区别,你非常清楚知道什么时候该用什么。当你在面试中被问到这个问题,你的内心充满了自信和喜悦。你轻轻松松的给出了一个“标准答案”:GET在浏览器回退时是无害的,而POST会再次提交请求。GET产生的URL地址可以被Bookmark,而P原创 2021-01-21 21:40:32 · 61 阅读 · 0 评论