C-使用 molloc 手动开辟内存
前言手动开辟内存 主要使用的函数 molloc 进行操作。开启指定的内存空间。
123456while (1) { printf("%s", "自增内存"); //开10兆内存,并地址给一个指针。 int *p = (int *)malloc(1024 * 1024 *10 ); Sleep(2000);}
malloc 无效可能是杀毒软件拦截的原因。malloc 用来创建动态的数组也是数组,跟普通的数组有什么区别呢:
普通的数组是已知大小的情况下使用,malloc 的数组是在大小不确定的情况下使用,可以动态的分配指定大小,灵活度大。
什么是幂等
幂等(idempotent、idempotence)是一个数学与计算机学概念,常见于抽象代数中。
在编程中一个幂等操作的特点是其任意多次执行所产生的影响均与一次执行的影响相同。
幂等函数,或幂等方法,是指可以使用相同参数重复执行,并能获得相同结果的函数。
这些函数不会影响系统状态,也不用担心重复执行会对系统造成改变。例如,"setTrue()"函数就是一个幂等函数,无论多次执行,其结果都是一样的.更复杂的操作幂等保证是利用唯一交易号(流水号)实现.
编程中的幂等
编程中.一个幂等操作的特点是其任意多次执行所产生的影响均与一次执行的影响相同。幂等函数,或幂等方法,是指可以使用相同参数重复执行,并能获得相同结果的函数。这些函数不会影响系统状态,也不用担心重复执行会对系统造成改变。例如,"setTrue()"函数就是一个幂等函数,无论多次执行,其结果都是一样的.更复杂的操作幂等保证是利用唯一交易号(流水号)实现.
白话:操作几次,结果都是一样。幂等与操作有关
幂等与你是不是分布式高并发还有JavaEE都没有关系。关键是你的操作是不是幂等的。一个幂等的操 ...
算法技巧--两个原素交换位置
要求要不使用第三个变量的前题下且原地修改变量位置,将两个数组元素交易位置。
思路不使用第三个变量的话,只能在原来的两上变量在动心思。这两个变量没说不能变,那么就使用数学的方式将两个变量交换一下。只需要把两个变量中的其中一个借用来存储当前的变量即可,最后再还原回去。步骤:
借变量
交换元素
其实公式也很好记,变量位置不变,只是变了符号:
a + ba - ba - b
123456789101112131415161718192021222324252627282930package com.liukai.algorithm.sort;/** * Created by liu kai on 16/9/8. * 交换数组两个元素位置 */public class Change { public static void main(String[] args) { int x = 3, y = 5; int[] arr = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; test( ...
算法技巧--一维数组去重
说明这段代码的思路是使用两个循环来对数组进行去重操作,并将结果重新封装到一个新的数组中。整体思路是通过两个循环遍历数组,将重复出现的元素标记为 -1,然后根据标记的情况创建一个新的数组来存储去重后的结果。
代码的时间复杂度为 O(n^2),其中 n 是输入数组的长度。外层循环从 0 到 n-2 进行迭代,内层循环从外层循环的下一个元素开始迭代到 n-1。因此,内层循环的迭代次数会逐渐减少。在最坏情况下,即数组中没有重复元素时,内层循环将完全执行 n-1 + n-2 + ... + 1 = (n-1)n/2 次。这是一个等差数列求和公式。然而,在内层循环中,当发现重复元素时,会将重复元素标记为 -1,并增加 len 计数器。内层循环在后续迭代中会跳过被标记为 -1 的元素。因此,当数组中有 k 个重复元素时,内层循环的迭代次数将会减少 k 次。最后,创建新数组的循环将迭代 n 次,其中 n 是输入数组的长度。
因此,总体来说,该代码的时间复杂度为 O(n^2)。在最坏情况下,即数组中没有重复元素时,时间复杂度为 O(n^2)。在最好情况下,即数组中所有元素都是重复的,时间复杂度为 O(n ...
jvm 手动触发gc
很多时候我们在学习JVM时,往往需要查看JVM的回收日志,查看JVM的相关运行参数,这时候我们可以通过手动触发的形式获取JVM的运行回收情况。
加上参数
-Xms1024m -Xmx1024m -Xmn512m -XX:+PrintGCDetails。
代码1234567891011121314151617public class TestGCRoots01 { private int _10MB = 10 * 1024 * 1024; private byte[] memory = new byte[8 * _10MB]; public static void main(String[] args) { method01(); System.out.println("返回main方法"); System.gc(); System.out.println("第二次GC完成"); } public static void method01() { ...
shell--解决数组拼接变成一行
问题碰到了一个奇怪的问题,脚本在执行推送数据任务的时候,总是会有两个节点是失败的,确认环境都是相关的,有可能是脚本有毛病,加了堆日志后发现确实有问题。因为之前修改数组拼接的方法。
出现问题的shell123456789101112131415161718192021222324#!/usr/bin/bashdevNet=(10.40.100.11410.40.100.115)testNet=(#10.40.100.11110.40.100.110)testFn() { local nodes=("$@") for node in "${nodes[@]}"; do echo "[info]: restart node: $node" done}# 就因为用 " " 包起来了所以就出问题了,把两行当成一行处理allNode=("${devNet[@]} ${testNet[@]}")testFn & ...
shell--ssh解析本地变量到远程失败
问题很多问题都是由于双眼号引起的,但是shell标准确很喜欢让开发者加上双眼号。脚本通过ssh远程操作其它相器,正常情况下脚本会将我本机的脚本变量带到远程机器上,这个脚本一直远行正常。然后看到一个shell的变量使用规范,要在大部分重要的变量是加上又眼号,我就这么干了,然后就出问题了。
正常场景我在本机:192.168.1.100上执行脚本,并登陆:192.168.1.200上操作一下,正常应该打印出:test-abcd,但是由于变量失效,则打印为空。
123456789101112131415161718192021222324#!/bin/bashnodes(192.168.1.101192.168.1.102192.168.1.200)myVar="test-abcd"startNodes() { local nodes=("$@") for node in "${nodes[@]}"; do { echo "[info]: start node: $ ...
git-工作区、暂存区、版本库
工作区就是 git init 的目录,就是工程目录。工作区下包含着版本库 .git 文件夹。
暂存区暂存区就存在于 .git 版本库文件夹内。称为 stage,这并不是指某个目录的名称,而是一个逻辑概念。一般存放在 .git 目录下的 index 文件(.git/index)中。
创建版本库的同时,会创建一个唯一的 master 分支。git add 是往暂存区提交git commit 是往 master分支提交
在实际开发中,这个作用很大,比如在编写一段时间的代码后,想要拉一下远程分支的代码,或者想回到之前的修改,但是又不想删掉这些修改,就可以用 stage 来暂存修改,暂存后,代码恢复未修改前的样子。
版本库工作区有一个隐藏目录 .git,虽然这个目录在工作区的工程目录下,但是目录是管理git的。这个不算工作区,而是 Git 的版本库。工作区中的文件的修改和 stage 暂存区中的修改都会被 git 监控到。不同的区之前的修改是独立互不影响的。工作区中的修改是不会被 commit 的。只有暂存区的才会被 commit。
java反射05-Constructor对象
前言Constructor 对象,就是字面意思,就是一个构造器对象。可以通过它构建对象。
有构造器就能创建对象。构造器对象,用来获取当前反射类的构造器。
主要方法:
getDeclaredConstructor:根据方法签名,获取构造器,可返回 private public 等。
getConstructor: 只能返回 public 的构造器
反射获得 Constractor这里是创建一个对象,不包括调用。
1234567public void test() { Class cls = Class.forName("com.liukai.Person"); //获取指定的对象(公共的) Constructor constructor = cls.getConstructor(); // 创建一个对象 Object p = constructor.newInstance();}
再举个例子,通过getDeclaredConstructor获取指定方法签名的构造器。方法:Constructor.getDeclaredConstruc ...
Centos yum 使用
简述最早使用linux是在高三时,买了两张盗版的linux安装盘,安装的RedHat什么版本记不清楚了。那时候安装是需要选择精简安装和完整安装,如果选了精简安装,很多应用就没有了。所以那时很苦恼,全装占磁盘,不全安装,要学习某个应用,又得重新拿B盘安装,我对装应用的印相一直停留在那个时候。
直到大学接触发了yum
yum是一个用于管理rpm包的后台程序,用python写成,可以非常方便的解决rpm的依赖关系。在建立好yum服务器后,yum客户端可以通过 http、ftp方式获得软件包,并使用方便的命令直接管理、更新所有的rpm包,甚至包括kernel的更新。它也可以理解为红旗环境下的apt管理工具。
yum search 搜索搜索需要的应用包。
1yum search httpd
yum list 查询资源库中所有的可安装包yum list 这是一个功能很全的查询工具,可以查询各种状态
1yum list
模糊查询1234yum list java*# 也可以使用正则yum list <正则>
yum list updates 查询已安装可更新的包123456# ...