List与ArrayList
目录
一、List及其使用
1.1 List的概念
1.2 常见接口的介绍
1.3 List的使用
二、线性表和顺序表
2.1 线性表
2.2 顺序表
三、ArrayList介绍
四、ArrayList的使用
4.1 ArrayList构造
4.2 ArrayList的常用方法
4.3 ArrayList的遍历
4.4 ArrayList的扩容机制
五、ArrayList的具体使用
5.1 简单洗牌算法
5.2 杨辉三角
六、ArrayList的问题
一、List及其使用
1.1 List的概念
在集合框架中,List是一个接口,继承自Collection。
Collection也是一个接口,该接口中规范了后序容器中常用的一些方法:
Iterable也是一个接口,表示实现该接口的类是可以逐个元素进行遍历的:
从数据结构角度看,List就是一个线性表,即n个具有相同类型元素的有限序列,在该序列上可以执行增删改查以及变量等操作。
1.2 常见接口的介绍
List中有许多方法:
虽然方法多,但常用方法如下:
方法 | 解释 |
boolean add(E e) | 尾插 e |
void add(int index, E element) | 将 e 插入 index 位置 |
boolean addAll(Collection<? extends E> c) | 尾插 c 中的元素 |
E remove(int index) | 删除 index 位置元素 |
boolean remove(Object o) | 删除遇到的第一个 o |
E get(int index) | 获取下标 index 位置的元素 |
E set(int index, E element) | 将 index 位置的元素设置为element |
void clear() | 清空 |
boolean contains(Object o) | 判断 o 是否包含在线性表中 |
int indexOf(Object o) | 返回第一个 o 的下标 |
int lastIndexOf(Object o) | 返回最后一个 o 的下标 |
List<E> subList(int fromIndex, int toIndex) | 截取部分list |
1.3 List的使用
List是个接口,并不能直接用来实例化。如果要使用,必须去实例化List的实现类。在集合框架中,ArrayList和LinkedList都实现了List接口。
二、线性表和顺序表
2.1 线性表
线性表(linear list)是n个具有相同特性的数据元素的有限序列。 线性表是一种广泛使用的数据结构,常见线性表有:顺序表、链表、栈、队列......
2.2 顺序表
顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储,在数组上完成数据的增删查改。
模拟实现顺序表中的常用函数
public interface IList {//新增元素,默认在数组最后新增public void add(int data);// 在 pos 位置新增元素public void add(int pos, int data);// 判定是否包含某个元素public boolean contains(int toFind) ;// 查找某个元素对应的位置public int indexOf(int toFind);// 获取 pos 位置的元素public int get(int pos);// 给 pos 位置的元素设为 value 更新public void set(int pos, int value);//删除第一次出现的关键字keypublic void remove(int toRemove) ;// 获取顺序表长度public int size();// 清空顺序表public void clear() ;// 打印顺序表,注意:该方法并不是顺序表中的方法,为了方便看测试结果给出的public void display();boolean isFull();public boolean isEmpty(); }
public class MyArrayList implements IList{private int[] elem;private int usedSize;//顺序表默认大小private static int DEFAULT_Size=10;public MyArrayList(){elem=new int[DEFAULT_Size];}public MyArrayList(int capacity){elem=new int[capacity];DEFAULT_Size=capacity;}//添加一个数据@Overridepublic void add(int data) {chackCapacity();this.elem[usedSize]=data;this.usedSize++;}//检查容量private void chackCapacity(){if(isFull()){elem= Arrays.copyOf(elem,elem.length*2);}}//在pos插入一个数据@Overridepublic void add(int pos, int data) {try {chackPosOnAddOrGetOrSet(pos);}catch (PosError e){e.printStackTrace();return;}chackCapacity();for (int i = usedSize; i >pos ; i++) {elem[i]=elem[i-1];}elem[pos]=data;usedSize++;}/*检查pos的合法性*/private void chackPosOnAddOrGetOrSet(int pos) throws PosError{if(pos<0||pos>=this.usedSize)throw new PosError("下标异常"+pos);}//判断顺序表是否包含toFind@Overridepublic boolean contains(int toFind) {if(isEmpty())return false;for (int x:elem) {if(x==toFind)return true;}return false;}//获取toFing对应的下标@Overridepublic int indexOf(int toFind) {for (int i = 0; i < this.usedSize; i++) {if(elem[i]==toFind)return i;}return -1;}//获取pos下标对应的元素值@Overridepublic int get(int pos) {if(isEmpty())return -1;chackPosOnAddOrGetOrSet(pos);return this.elem[pos];}//设置下标为pos的元素值为value@Overridepublic void set(int pos, int value) {chackPosOnAddOrGetOrSet(pos);elem[pos]=value;}//删除toRemove@Overridepublic void remove(int toRemove) {int index=indexOf(toRemove);if(index<0){System.out.println("要删除的数不存在");return;}for(int i=index;i<this.usedSize-1;i++){this.elem[i]=this.elem[i+1];}this.usedSize--;}//获取当前顺序表的大小@Overridepublic int size() {return this.usedSize;}//清空@Overridepublic void clear() {for (int i = 0; i < usedSize; i++) {set(i,0);}}/*遍历顺序表当中的元素*/@Overridepublic void display() {if(isEmpty()){throw new MyArrayIsEmpty("顺序表是空的");}for(int i=0;i<elem.length;i++){System.out.println(this.elem[i]+" ");}System.out.println();}/*判断顺序表是否已满*/@Overridepublic boolean isFull() {/*if(usedSize==DEFAULT_Size)return true;elsereturn false;*/return usedSize==DEFAULT_Size;}@Overridepublic boolean isEmpty() {return elem.length==0;} }
public class MyArrayIsEmpty extends RuntimeException{public MyArrayIsEmpty(String massage){super(massage);} }public class PosError extends RuntimeException{public PosError(String massage){super(massage);} }
三、ArrayList介绍
在集合框架中,ArrayList是一个普通的类,实现了List接口,具体框架如下:
ArrayList是以泛型方式实现的,使用时必须要先实例化;ArrayList实现了RandomAccess接口,表明ArrayList支持随机访问;ArrayList实现了Cloneable接口,表明ArrayList是可以clone的;ArrayList实现了Serializable接口,表明ArrayList是支持序列化的;ArrayList不是线程安全的,在单线程下可以使用,在多线程中可以选择Vector或者CopyOnWriteArrayList;ArrayList底层是一段连续的空间,并且可以动态扩容,是一个动态类型的顺序表。
四、ArrayList的使用
4.1 ArrayList构造
方法 | 解释 |
ArrayList() | 无参构造 |
ArrayList(Collection<? extends E> c) | 利用其他 Collection 构建 ArrayList |
ArrayList(int initialCapacity) | 指定顺序表初始容量 |
public static void main(String[] args) {//创建一个空列表 ArrayList() 默认size为0ArrayList<Integer> list1=new ArrayList<>();//创建一个容量为10的列表 ArrayList(int initialCapacity)创建指定容量的列表//ArrayList<Integer> 指定存放的元素类型为IntegerArrayList<Integer> list2=new ArrayList<>(10);list1.add(1);//第一次add时,底层数组size为10list1.add(2);list1.add(3);//ArrayList(Collection<? extends E> c)//参数c必须实现了Collection接口,是E的子类或E本身类型//list3的元素与list2相同ArrayList<Integer> list3=new ArrayList<>(list2); }
使用不带参数newArrayList对象时,默认size为0,当第一次add时,底层数组size为10,当数组需要扩容时,是以当前数组size的1.5倍进行扩容。
4.2 ArrayList的常用方法
ArrayList提供方法比较多,但常用方法如下所示:
方法 | 解释 |
boolean add(E e) | 尾插 e |
void add(int index, E e) | 将 e 插入到 index位置 |
boolean addAll(Collection<? extends E> c) | 尾插 c 中的元素 |
E remove(int index) | 删除 index位置的元素 |
boolean remove(Object o) | 删除遇到的第一个 o |
E get(int index) | 获取下标 index 位置的元素 |
E set(int index, E e) | 将下标 index位置元素设为 e |
void clear() | 清空 |
boolean contains(Object o) | 判断 o是否在线性表中 |
int indexOf(Object o) | 返回第一个 o所在下标 |
int lastIndexOf(Object o) | 返回最后一个 o所在下标 |
List<E> subList(int fromIndex, int toIndex) | 截取部分list |
public static void main(String[] args) {ArrayList<Integer> list1=new ArrayList<>(10);list1.add(1);list1.add(2);list1.add(3);list1.add(4);System.out.println(list1);// 1 2 3 4//获取list1中有效元素的个数并打印System.out.println(list1.size());//4System.out.println("====");//获取和设置index位置的元素System.out.println(list1.get(2));//3list1.set(2,99);System.out.println(list1.get(2));//99System.out.println("====");//在index位置插入valuelist1.add(2,88);System.out.println(list1);//1 2 88 99 4System.out.println("====");//删除指定元素list1.remove(new Integer(88));System.out.println(list1);//1 2 99 4//删除index位置的元素 index不能超过list1的有效元素个数list1.remove(2);System.out.println(list1);// 1 2 4System.out.println("====");//检查list1中是否包含valueSystem.out.println(list1.contains(99));//falseSystem.out.println(list1.contains(2));//trueSystem.out.println("====");list1.add(2);list1.add(1);System.out.println(list1);//1 2 4 2 1//获取第一次出现value的下标System.out.println(list1.indexOf(1));//0//获取最后一次出现value的下标System.out.println(list1.lastIndexOf(1));//4System.out.println("====");//截取list1 List<E> subList(int fromIndex, int toIndex)List<Integer> list2=list1.subList(1,3);System.out.println(list2);//2 4//截取的list2并没有分配内存,只是list2这个引用指向下标为1~2的元素list2.set(0,10);System.out.println(list1);// 1 10 4 2 1System.out.println(list2);//10 4 }
4.3 ArrayList的遍历
ArrayList 可以使用三方方式遍历:for循环+下标、foreach、使用迭代器。
public static void main(String[] args) {ArrayList<Integer> list=new ArrayList<>();list.add(1);list.add(2);list.add(3);list.add(4);//for循环遍历for(int i=0;i<list.size();i++){System.out.print(list.get(i)+" ");}System.out.println();//foreach遍历for (Integer x:list){System.out.print(x+" ");}System.out.println();//迭代器遍历Iterator<Integer> it=list.iterator();while (it.hasNext()){System.out.print(it.next()+" ");} }
4.4 ArrayList的扩容机制
ArrayList是一个动态类型的顺序表,即:在插入元素的过程中会自动扩容。以下是ArrayList源码中扩容方式:
检测是否需要扩容,如果需要调用grow函数;估计容量大小,初步估计按1.5倍扩容,若用户所需超过估计的1.5倍大小,按用户所需大小扩容;扩容前进行检测是否能扩容;使用copyOf进行扩容。
五、ArrayList的具体使用
5.1 简单洗牌算法
public class Card {//花色private String design_and_color;//数值private int value;public Card(String design_and_color, int value) {this.design_and_color = design_and_color;this.value = value;}@Overridepublic String toString() {return "花色:"+design_and_color+" 数值:"+value;}public String getDesign_and_color() {return design_and_color;}public void setDesign_and_color(String design_and_color) {this.design_and_color = design_and_color;}public int getValue() {return value;}public void setValue(int value) {this.value = value;} }
public class CardText {//花色集合 红桃 ♥ 黑桃 ♠ 方块♦ 梅花 ♣public static final String[] design_and_colors= {"♥", "♣", "♠", "♦"};//买一副牌public static List<Card> buyCard(){/*没有大小王,共52张牌,J Q K 分别用11 12 13代替*/List<Card> card=new ArrayList<>(52);for (int i = 0; i < 4; i++) {for(int j=1;j<=13;j++){Card card1=new Card(design_and_colors[i],j);card.add(card1);}}return card;}//洗牌public static void brushCard(List<Card> cards){for (int i = 51; i >0 ; i--) {Random random=new Random(i);int j=random.nextInt(i);swap(cards,i,j);}}//交换两张牌public static <j> void swap(List<Card> cards, int i,int j){Card tmp=cards.get(i);cards.set( i,cards.get(j));cards.set( j,tmp);}public static void main(String[] args) {//取一副牌List<Card> card=buyCard();System.out.println("拿到一副牌:");System.out.println(card);//洗牌brushCard(card);System.out.println("洗牌后:");System.out.println(card);//发牌 三人轮流拿牌,每人五张List<List<Card>> hands=new ArrayList<>();//hands代表三人各自取的牌hands.add(new ArrayList<>());//new ArrayList<>()代表每人手中的牌的集合hands.add(new ArrayList<>());hands.add(new ArrayList<>());for(int i=0;i<5;i++){for(int j=0;j<3;j++){hands.get(j).add(card.remove(0));}}System.out.println("第一个人手中的牌:");System.out.println(hands.get(0));System.out.println("第二个人手中的牌:");System.out.println(hands.get(1));System.out.println("第三个人手中的牌:");System.out.println(hands.get(2));System.out.println("剩余的牌:");System.out.println(card);} }
5.2 杨辉三角
杨辉三角题目链接
public List<List<Integer>> generate(int numRows) {List<List<Integer>> list=new ArrayList<>();//设置第一行List<Integer> list2=new ArrayList<>();list2.add(1);list.add(list2);//设置剩余行for(int i=1;i<numRows;i++){//设置当前行List<Integer> tmp=new ArrayList<>();//设置当前行第一个数tmp.add(1);//获取前一行List<Integer> preRow=list.get(i-1);//设置当前行其他数for(int j=1;j<i;j++){int a=preRow.get(j-1)+preRow.get(j);tmp.add(a);}//设置当前行最后一个数tmp.add(1);list.add(tmp);}return list; }
六、ArrayList的问题
1. ArrayList底层使用连续的空间,任意位置插入或删除元素时,需要将该位置后序元素整体往前或者往后移动,时间复杂度为O(N)。
2. 增容需要申请新空间,拷贝数据,释放旧空间,有不小的消耗。
3. 增容一般是呈1.5倍的增长,势必会有一定的空间浪费。例如当前容量为100,满了以后增容到150,我们再继续插入了5个数据,后面没有数据插入了,那么就浪费了45个数据空间。
相关文章:
List与ArrayList
目录 一、List及其使用 1.1 List的概念 1.2 常见接口的介绍 1.3 List的使用 二、线性表和顺序表 2.1 线性表 2.2 顺序表 三、ArrayList介绍 四、ArrayList的使用 4.1 ArrayList构造 4.2 ArrayList的常用方法 4.3 ArrayList的遍历 4.4 ArrayList的扩容机制 五、ArrayList的具…...
【C++】特殊类的设计
文章目录 1. 设计一个类, 不能被拷贝2. 设计一个类, 不能被继承3. 设计一个类, 只能在堆上创建对象3. 设计一个类, 只能在栈上创建对象4. 创建一个类, 只能创建一个对象(单例模式)饿汉模式懒汉模式 1. 设计一个类, 不能被拷贝 💕 C98方式: 在C11之前&a…...
机器学习:PCA(Principal Component Analysis主成分)降维
参考:PCA降维原理 操作步骤与优缺点_TranSad的博客-CSDN博客 PCA降维算法_偶尔努力翻身的咸鱼的博客-CSDN博客 需要提前了解的数学知识: 一、PCA的主要思想 PCA,即主成分分析方法,是一种使用最广泛的数据降维算法。PCA的主要思想…...
linux服务器slab缓存回收方案设计
背景 自己写的回收slab内存ko,insmod报错“shrink_slab:unknown symbol _x86_indirect_thunk_rax(err 0)””; 分析 1.名词解释 在 x86 架构中,函数调用通常使用 call 指令来直接跳转到目标函数的地址。但是,当需要通过函数指针或动态链接调用函数时,就需要使用__x86_…...
Apache Spark 的基本概念
Apache Spark 是一种快速、可扩展、通用的数据处理引擎。它是一种基于内存的计算框架,支持分布式数据处理、机器学习、图形计算等多种计算任务。与传统的 Hadoop MapReduce 相比,Spark 具有更高的性能和更广泛的应用场景。 Spark 中的基本概念包括&…...
通讯协议介绍CoAP 协议解析
目录 1 通讯协议 2 TCP/IP 网络模型 2.1 TCP协议 2.1.1 TCP 连接过程 2.1.2 TCP 断开连接 2.1.3 TCP协议特点 2.2 UDP协议 2.2.1 UDP 协议特点 3 应用层协议简介 3.1 HTTP 协议 3.2 CoAP 协议 3.3 MQTT 协议 4 CoAP 协议详解 4.1 REST 风格 4.2 CoAP 首部分析 4…...
React 开发一个移动端项目(2)
配置基础路由 目标:配置登录页面的路由并显示在页面中 步骤: 安装路由: yarn add react-router-dom5.3.0 5 和 6 两个版本对组件类型的兼容性和函数组件支持有所改变,在这里使用的是 5。 和路由的类型声明文件 yarn add types…...
51单片机 点阵矩阵 坤坤代码
真正的黑子 #include <REGX52.H>void Delay(unsigned int xms); void _74HC595_WriteByte(unsigned char byte); void LED(unsigned char Y,DATA); void LED_Init();sbit RCKP3^5; //RCLK sbit SCKP3^6; //SRCL sbit SERP3^4; //SER //坤坤矩阵 unsigned char code D…...
Android13-图片视频选择器
在compileSDK 33 时,谷歌在安卓新增了 图片选择器 功能,支持单选、多选、选图片、视频等操作,并且不需要额外获取照片/音频权限。 具体实现如下: 1:请求 Log.d(TAG, "Build.VERSION.SDK_INT" Build.VERS…...
【问题处理】GIT合并解决冲突后,导致其他人代码遗失的排查
GIT合并解决冲突后,导致其他人代码遗失的排查 项目场景问题描述分析与处理:1. 警告分析2. 文件分析3. 问题关键4. 验证 解决策略总结 📕作者简介:战斧,从事金融IT行业,有着多年一线开发、架构经验ÿ…...
H264视频压缩格式
H264简介 H.264从1999年开始,到2003年形成草案,最后在2007年定稿有待核实。在ITU的标准里称为H.264, 在MPEG的标准里是MPEG-4的一个组成部分-MPEG-4 Part 10,又叫Advanced Video Codec,因此常常称为MPEG-4AVC或直接叫AVC。 压缩算…...
动态的中秋爱心演示送女友用python生成爱心软件文末附c++语言写法
用python生成爱心软件 用python生成动态爱心软件 目录 用python生成爱心软件 完整代码 代码解释 逐句解释 效果展示: 如何打包 c写法 完整代码 import turtledef draw_heart():love turtle.Turtle()love.getscreen().bgcolor("black")love.…...
macOS - 使用VLC
文章目录 关于 VLC安装查看帮助流媒体 MRL 语法:URL 语法:主程序 (core)音频视频截图:窗口属性: 子画面屏幕显示(OSD):字幕:覆盖:轨道设置:播放控制:默认设备:高级: 输入播放列表性能选项: 热键跳跃大小: 关于 VLC VLC media player VLC 是一款自由、开…...
java微服务项目整合skywalking链路追踪框架
skywalking官网网址:Apache SkyWalking 目录 1、安装skywalking 2、微服务接入skywalking 3、skywalking数据持久化 1、安装skywalking 下载skywalking,本篇文章使用的skywalking版本是8.5.0 Index of /dist/skywalkinghttps://archive.apache.org/…...
pandas 笔记: interpolate
一个用于填充 NaN 值的工具 1 基本用法 DataFrame.interpolate(methodlinear, *, axis0, limitNone, inplaceFalse, limit_directionNone, limit_areaNone, downcast_NoDefault.no_default, **kwargs) 2 主要参数 method 多种插值技术 linear: 默认值,使用线性插…...
应用程序接口(API)安全的入门指南
本文简单回顾了 API 的发展历史,其基本概念、功能、相关协议、以及使用场景,重点讨论了与之相关的不同安全要素、威胁、认证方法、以及十二项优秀实践。 根据有记录的历史,随着 Salesforce 的销售自动化解决方案的推出,首个 Web…...
JavaWeb概念视频笔记
学习地址:102.尚硅谷_Tomcat-Tomcat服务器和Servlet版本的对应关系_哔哩哔哩_bilibili 目录 1.JavaWeb的概念 2.Web资源的分类 3.常用的Web服务器 4.Tomcat服务器和Servlet版本的对应关系 5.Tomcat的使用 a.安装 b.目录介绍 c.如何启动 Tomcat 服务器 另一…...
网络请求【小程序】
一、get 二、post 1.获取相应数据 Page({/*** 页面的初始数据*/data: { inptValue:, isArr:[]},/*** 生命周期函数--监听页面加载*/onLoad(options) {},onSubmit(){// console.log(this.data.inptValue)//2.后台请求数据wx.request({url: https://tea.qingnian8.com/demoArt/…...
python 调用adb shell
目录 python调用 bat,启动新窗口,但是不能自动在进入shell 后执行提前设置的操作。 python启动cmd新窗口,但是不能自动在进入shell 后执行提前设置的操作。 python调用 bat,启动新窗口,但是不能自动在进入shell 后执…...
vue3 使用 vite 构建的项目打包后无法访问
解决办法: 1、安装 vitejs/plugin-legacy -D npm i vitejs/plugin-legacy -D2、vite.config.js 添加配置 import legacy from vitejs/plugin-legacy; export default defineConfig({plugins: [legacy({targets: [defaults, not IE 11]}),vue(),],base:./, // http…...
C语言指针详解(4)———找工作必看指针笔试题汇总
指针对于编程工作的重要性 C语言指针在找工作中具有重要性。以下是几个原因: 1.高效的内存管理:C语言指针可以帮助程序员高效地管理内存,包括动态内存分配和释放,以及数据的访问和操作。这对于开发性能优化的应用程序非常重要&am…...
03MyBatis-Plus中的常用注解
常用注解 TableName MyBatis-Plus根据BaseMapper中指定的泛型(实体类型名)确定数据库中操作的表,如果根据实体类型名找不到数据库中对应的表则会报表不存在异常 //向表中插入一条数据 Test public void testInsert(){User user new User(null, "张三", 23, "…...
Android 修复在 Settings 首页,按键盘方向键逐个单选
Android 修复在 Settings 首页,按键盘方向键逐个单选 问题现象问题分析解决办法 问题现象 在 Settings 主界面,按键盘方向键上下会直接整个选中,无法单条选中变色,而在二级页面中按方向键上下是正常的。 没有遥控器可以通过 adb…...
SpringMvc第六战-【SpringMvcJSON返回异常处理机制】
前言: 小编讲述了:JSR303的概念,应用场景和在具体实例的使用;和拦截器的应用 今天小编来讲述的为cJSON返回&异常处理机制,json返回就不用多说,毕竟大部分数据都是通过Json来传递数据的,异…...
idea-Tabnine
教程地址 Code Faster with AI Code Completions | Tabnine...
联通面试题
一、GC 1.1、目标 GC的主要作用是自动识别和释放不再使用的对象,回收其所占用的内存,以防止内存泄漏和内存溢出的问题。 1.2、如何实现 1.2.1、标记阶段 GC从根对象(如线程栈中的引用、静态变量等)开始,通过可达性…...
[计组03]进程详解2
目录 应用程序 系统调用 驱动 软件 再看进程 进程管理 如何管理 ? 创建一个进程 注意 PCB 文件描述表 进程相关重点 为什么有进程调度 虚拟空间地址 这次我们从更加详细全面的角度看一下进程在计算机中体系中的展现 应用程序 应用程序 调动 系…...
使用redis+lua通过原子减解决超卖问题【示例】
系列文章目录 一、SpringBoot连接MySQL数据库实例【tk.mybatis连接mysql数据库】 二、SpringBoot连接Redis与Redisson【代码】 三、SpringBoot整合WebSocket【代码】 四、使用redislua通过原子减解决超卖问题【示例】 五、SpringBoot整合Elasticsearch【代码示例】 文章目录 系…...
WebFlux异常处理:onErrorReturn和onErrorResume
1 缘起 最近在学习WebFlux, 处理异常时遇到些问题,比如,Java直接抛出的异常无法直接被onErrorReturn和onErrorResume捕获, 但是,在map或者flatMap等方法之后的异常又可以直接被捕获, 于是,进行…...
《动手学深度学习 Pytorch版》 4.5 权重衰减
4.5.1 范数与权重衰减 整节理论,详见书本。 4.5.2 高维线性回归 %matplotlib inline import torch from torch import nn from d2l import torch as d2l# 生成一些数据,为了使过拟合效果更明显,将维数增加到 200 并使用一个只包含 20 个样…...
wordpress仿百度贴吧/网站设计公司多少钱
.NET是一个微软开发的编程环境,里面可以使用C#,VB等多种编程语言。 不叫点net哦,叫点net太业余了啊。。。 显得太业余了。之前一直在用,today才know规范的叫法,,,。过去真是草莽写代码模式的了。 1 基础概…...
那个网站可以做雪花特效/购买友情链接
1、方法一,编辑rc.loacl脚本 Ubuntu开机之后会执行/etc/rc.local文件中的脚本,所以我们可以直接在/etc/rc.local中添加启动脚本。当然要添加到语句:exit 0 前面才行。如: 复制代码代码如下:sudo vi /etc/rc.local然后在 exit 0 前…...
北碚区网站建设/厦门人才网最新招聘信息网
Tengine是由淘宝网发起的Web服务器项目。它在Nginx的基础上,针对大访问量网站的需求,添加了很多高级功能和特性。Tengine的性能和稳定性已经在大型的网站如淘宝网,天猫商城等得到了很好的检验。它的最终目标是打造一个高效、稳定、安全、易用…...
深圳横岗网站建设/seowhy论坛
很久以来,我一直都有这样两个困惑: 统计专业学习编程应该系统学习还是遇到问题再找答案?要不要写博客?写博客对自己的编程水平有多大提升?把自己的技术全部分享出去是不是会被超越? 最近我才把这两个问题彻…...
什么是网络营销策略?/seo指的是什么意思
(本文发表于《程序员》2010年3月刊) 借鉴丰田方法对大型软件组织进行敏捷改造 (上) 本文以 ThoughtWorks 中国公司与 某大型 电 信 设备 提供商 合作的 咨询项目 案例 为 背景 , 介 绍 如何采用丰…...
MAC怎么做网站/seo首页排名优化
Python是一门更注重可读性和效率的语言,尤其是相较于Java,PHP以及C这样的语言,它的这两个优势让其在开发者中大受欢迎。诚然,它有点老了,但仍是80后啊 —— 至少没有 Cobol 或者 Fortran 那么老。而且,如果…...