`
windy2coast
  • 浏览: 55644 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

笔记**************

    博客分类:
  • Java
阅读更多

环境变量C:\jdk1.5.0_04   JDK安装路径
JAVA_HOME   C:\jdk1.5.0_04

编辑系统变量
变量明:  Path
变量值: C:\jdk1.5.0_04\bin


在编译Servlet时,有时会出现找不到servlet包的问题,真是因为servlet为jdk的扩展包,所以在使用时需要指定classpath,具体方法 -- set classpath=%Tomcat%\common\lib\servlet.jar
如果不指定classpath,可以采用如下方法:
--将C:\Tomcat 5.0\common\lib\servlet-api.jar     servlet-api.jar  文件拷贝到JDK安装路径下的jre\lib\ext\下


C:\Tomcat 5.0\conf\server.xml
<Context path='/test' docBase="d:\testWeb" reloadable="true"/>


//隐藏文件到web-inf中 /  设置初始化参数
D:\testWeb\WEB-INF\WEB.XML
<!-- JSPC servlet mappings start -->

 <servlet>
  <servlet-name>mldn</servlet-name>
  <jsp-file>/WEB-INF/sdemo.jsp</jsp-file>
  <init-param>
   <param-name>uname</param-name>
   <param-value>mldn</param-value>
  </init-param>
  <init-param>
   <param-name>upass</param-name>
   <param-value>lxh</param-value>
  </init-param>
 </servlet>
 <servlet-mapping>
  <servlet-name>mldn</servlet-name>
  <url-pattern>/lxh</url-pattern>
 </servlet-mapping>

<!-- JSPC servlet mappings end -->


//servlet通用格式
package cn.mldn.lxh.servlet.SimpleServlet ;
import java.io.* ;
import javax.servlet.* ;
import javax.servlet.http.* ;

public class SimpleServlet extends HttpServlet
{
 public void init(ServletConfig config) throws ServletException
 {
  System.out.println("**Servlet 初始化 ...") ;
 }
 public void doGet(HttpServletRequest req,HttpServletResponse resp) throws IOException,ServletException
 {
  PrintWriter out = resp.getWriter() ;
  out.println("<html>") ;
  out.println("<head>") ;
  out.println("<title>the first servlet</title>") ;
  out.println("</head>") ;
  out.println("<body>") ;
  
  out.println("<h1>hello world</h1>") ;
  
  out.println("</body>") ;
  out.println("</html>") ;
  
 }
 
  public void doPost(HttpServletRequest req,HttpServletResponse resp) throws IOException,ServletException
 {
  this.doPost(req,resp) ;
  
 }
 
 public void destroy()
 {
  System.out.println("**Servlet销毁 ...") ;
 }
};
//servlet配置
<servlet>
 <servlet-name>simple</servlet-name>
 <servlet-class>cn.mldn.lxh.servlet.SimpleServlet</servlet-class>
</servlet>

<servlet-mapping>//多地址访问同一servlet
 <servlet-name>simple</servlet-name>
 <url-pattern>/demo</url-pattern>
</servlet-mapping>
<servlet-mapping>//多地址访问同一servlet
 <servlet-name>simple</servlet-name>
 <url-pattern>/demo.fad</url-pattern>
</servlet-mapping>
<servlet-mapping>//多地址访问同一servlet
 <servlet-name>simple</servlet-name>
 <url-pattern>/dfa</url-pattern>
</servlet-mapping>
<servlet-mapping>//多地址访问同一servlet
 <servlet-name>simple</servlet-name>
 <url-pattern>/hello/*</url-pattern>
</servlet-mapping>

 

 

<%@ page contentType="text/html;charset=gb2312"%>

<%@ page import="java.sql.*"%>
<%--          JDBC-ODBC 连接方式       --%>
<%!
  //定义数据库驱动程序
  String DBDRIVER = "sun.jdbc.odbc.JdbcOdbcDriver" ;
  
  //定义数据库连接地址,用JDBC-ODBC 则格式 固定如下
  String DBURL = "jdbc:odbc:mldn" ;
  
  //定义数据连接对象,属于java.sql包中的接口
  Connection conn = null ;
  
  //定义Statement对象,用于操纵数据库
  Statement stmt = null ;
  
  //定义一个字符串变量,用于保存SQL语句
  String sql = null ;
%>

<%
  //1、加载驱动程序
  try
  {
    Class.forName(DBDRIVER) ;
  }
  catch(Exception e)
  {
    //此处使用out.println是出于演示目的,在实际开发中所有的错误
    //消息绝对不可以用out.println打印,否则会存在安全问题
    out.println("数据库驱动程序加载失败!!!") ;
  }
  
  //2、连接数据库
  try
  {
    conn = DriverManager.getConnection(DBURL) ;
  }
  catch(Exception e)
  {
    out.println("数据库连接失败!!!") ;
  }
  
  //3、操纵数据库
  //通过Connection对象实例化Statement对象
  try
  {
    stmt = conn.createStatement() ;
    // 为sql变量赋值
    //sql = "insert into person (name,password,age) values('lxh','zzzzzz','28')" ;
    sql = "update person set name='李新华',password='mldn' where id='1'" ;
    stmt.executeUpdate(sql) ;
  }
  catch(Exception e)
  {
    out.println("操作数据库失败!!!") ;
  }
  
  //4、关闭数据库
  try
  {
    //关闭操作
    stmt.close();
    //关闭连接
    conn.close();
    
  }
  catch(Exception e)
  {
    out.println("关闭数据库失败!!!") ;
  }
%>


利用JDBC开发Web数据库一般步骤:
装入JDBC驱动程序
创建与数据库的连接
创建语句对象----Statement / PrepareStatement
利用语句对象执行SQL语句得到结果
处理结果
JDBC应用结束

 
JavaBean 打包   javac –d . SimpleBean.java
upload.htm
<jsp:useBean id="sb" scope="page" class="cn.mldn.lxh.SimpleBean"/>

<form action="upload.jsp" method="post" ENCTYPE="multipart/form-data">
选择要上传的图片:<input type="file" name="pic">
<input type="submit" value="提交">
</form>

upload.jsp
<jsp:useBean id="smart" scope="page" class="org.lxh.smart.SmartUpload"/>
<%
 // 1、上传初始化
 smart.initialize(pageContext) ;
 // 2、准备上传
 smart.upload() ;
 // 3、保存上传的文件
 // smart.save("/upload") ;
 String ext = smart.getFiles().getFile(0).getFileExt() ;
%>

<%
 String name = smart.getRequest().getParameter("name") ;
%>
<%
 // 保存文件
 smart.getFiles().getFile(0).saveAs("/upload/"+name+"."+ext) ;
%>


//使用JSP标签去调用JavaBean时必须有一个无参构造函数

//两种方法调用JavaBean 。 一种是import导入  另一种用jsp的标签指令<jsp:useBean  .../>

//使用JAVABEAN自动设置内容时,一定要使参数名称与Bean中属性名称一致,这样通过Java的命名规范,可以达到统一。


使用MyEclipse运行WEB程序有以下两种方法:
1、直接通过MyEclipse在服务器上进行部署(了解即可)
2、通过外接服务器的方式运行程序(推荐)
修改conf/server.xml文件

 

与jsp页面中服务器跳转指令<jsp:forward page="mvcdemo.jsp"/>类似
Servlet跳转到JSP的服务器端跳转的指令是:req.getRequestDispatcher("mvcdemo.jsp").forward(req,resp) ;

我们可以发现:
使用MVC开发程序,代码稍微复杂
JSP与JavaBean之间没有什么特别明显的直接关系
而Servlet根据JavaBean返回的内容进行跳转

Servlet中最好只有以下几种代码:
接收参数
调用JavaBean
进行跳转
有一些简单的逻辑判断

 

//表达式语句取集合中的值

<%@page import="java.util.*"%>
<%--

--%>

<%
  List l = (List)request.getAttribute("all") ;
  Iterator iter = l.iterator() ;
  while(iter.hasNext())
  {
   pageContext.setAttribute("sim",iter.next()) ;
%>
<h1>${sim.name}</h1>

<%
}
%>

 


监听器
一、对ServletContext监听
1、ServletContextListener:对整个Servlet上下文监听(启动、销毁)
2、ServletContextAttributeListener:对Servlet上下文属性的监听
二、对Session监听
对session的创建、销毁、属性操作
1、HttpSessionListener: 对session整体状况的监听
2、HttpSessionAttributeListener:对session的属性监听

Session如何失效
1、session超时
   需要在web.xml中进行设置
   <session-config>
 <session-timeout>1</session-timeout>
   </session-config>
2、手工使session失效
   invalidate():使session失效            session.invalidate()  ;

 

 

 

 

 

同步问题的解决

class Demo implements Runnable
{
 private int ticket = 10 ;
 // 加入一个同步方法
 public synchronized void fun()
 {
  // 把需要同步的地方放在同步方法之中
  if(this.ticket>0)
  {
   try
   {
    Thread.sleep(100) ;
   }
   catch (Exception e)
   {
   }
   System.out.println(Thread.currentThread().getName()+" --> 卖票:"+this.ticket--) ;
  }
 }
 public void run()
 {
  while(ticket>0)
  {
   this.fun() ;
  }
 }
};
public class ThreadDemo14
{
 public static void main(String args[])
 {
  Demo d = new Demo() ;
  Thread t1 = new Thread(d,"售票点 A") ;
  Thread t2 = new Thread(d,"售票点 B") ;
  Thread t3 = new Thread(d,"售票点 C") ;

  t1.start() ;
  t2.start() ;
  t3.start() ;
 }
};

 

 

 

死锁问题的解决
class Person
{
 // 两种情况: 李兴华  作者
 //    MLDN  网站
 private String name = "李兴华" ;
 private String content = "作者" ;
 private boolean flag = false ;
 // 加入一个设置的同步方法
 public synchronized void set(String name,String content)
 {
  // 如果为绿灯则表示可以设置,否则等待:true
  // 值是假,则表示要等待不能去设置
  if(flag)
  {
   try
   {
    wait() ;
   }
   catch (Exception e)
   {
   }
  }
  this.name = name ;
  try
  {
   Thread.sleep(100) ;
  }
  catch (Exception e)
  {
  }
  this.content = content ;
  // 设置完成之后,要改变灯
  flag = true ;
  notifyAll() ;
 }
 public synchronized String get()
 {
  if(!flag)
  {
   try
   {
    wait() ;
   }
   catch (Exception e)
   {
   }
  }
  String str = this.name+" --> "+this.content ;
  // 如果为红灯,则表示可以取,否则等待:false
  flag = false ;
  notifyAll() ;
  return str ;
 }
};
class Pro implements Runnable
{
 private Person per = null ;
 public Pro(Person per)
 {
  this.per = per ;
 }
 public void run()
 {
  for(int i=0;i<100;i++)
  {
   if(i%2==0)
   {
    per.set("MLDN","网站") ;
   }
   else
   {
    per.set("李兴华","作者") ;
   }
  }
 }
};

class Cust implements Runnable
{
 private Person per = null ;
 public Cust(Person per)
 {
  this.per = per ;
 }
 public void run()
 {
  for(int i=0;i<100;i++)
  {
   System.out.println(per.get()) ;
  }
 }
} ;

public class ThreadDemo19
{
 public static void main(String args[])
 {
  Person per = new Person() ;
  Pro p = new Pro(per)  ;
  Cust c = new Cust(per) ;

  new Thread(p).start() ;
  new Thread(c).start() ;
 }
};

 


// 建立一个Person类,把Person类的对象序列化
import java.io.* ;

class Person implements Serializable
{
 private String name ;
 private transient int age ;
 public Person(String name,int age)
 {
  this.name = name ;
  this.age = age ;
 }
 public String toString()
 {
  return "姓名:"+this.name+",年龄:"+this.age ;
 }
};
public class IODemo26
{
 public static void main(String args[]) throws Exception
 {
  Person per = new Person("李兴华",30) ;
  ser(per) ;
  System.out.println(dser()) ;
 }
 // 建立一个方法用于完成对象的序列化
 public static void ser(Person per) throws Exception
 {
  ObjectOutputStream oos = null ;
  oos = new ObjectOutputStream(new FileOutputStream(new File("f:\\lxh.txt"))) ;
  oos.writeObject(per) ;
  oos.close() ;
 }
 // 反序列化
 public static Person dser() throws Exception
 {
  ObjectInputStream ois = null ;
  ois = new ObjectInputStream(new FileInputStream(new File("f:\\lxh.txt"))) ;
  Object obj = ois.readObject() ;
  ois.close() ;
  return (Person)obj ;
 }
};

 


仿dos copy程序

import java.io.* ;

public class Copy
{
 public static void main(String args[])
 {
  if(args.length!=2)
  {
   System.out.println("请输入正确的格式的参数: (例如:java Copy d:\\\\input.txt d:\\\\output.txt") ;
   return ;
  }
  else
  {
   File file1 = new File(args[0]) ;
   File file2 = new File(args[1]) ;
   copyFile(file1,file2) ;
  }
 }
 
 public static void copyFile(File srcfile,File desfile)
 {
  byte[] b = new byte[512] ;//512可以改成其它大于零的适当整数值
  int len = 0 ;
  try
  {
    FileInputStream fis = new FileInputStream(srcfile) ;
    FileOutputStream fos = new FileOutputStream(desfile) ;
   while((len=fis.read(b))!=-1)//循环以512字节拷贝,知道拷贝完.
   {
    fos.write(b,0,len) ;
   }
   fis.close() ;
   fos.close() ;
  }
  catch(Exception e)
  {
   System.out.println(e) ;
  }
 }
};

 

 

类集
Collection: Collection下存放的就是一个个对象,每次存放单个对象
Maps: 每次存放一对值 key -> value
Iterator: 输出接口,只要是集合都要去使用iterator输出

Collection接口:在一般开发中为了清楚的表现处理数据的存放往往不直接使用Collection接口
    子接口:List
    子接口:Set
List既然是一个接口,则使用必须依靠子类 -> ArrayList
    如果要使用List ,则格式为: List l = new ArrayList() ;
如果去使用类集则在加入对象时最好只加入一种对象.
如果希望可以一个个元素打印出来,可以有两种方法:
1.使用for循环 , size()方法求出对象数组的长度
for(int i=0;i<all.size();i++)
{
 System.out.println(all.get(i)) ;
}
2.实际开发中一般用Iterator输出
  因为集合的长度不固定,所以iterator采用的方法是一个一个判断输出
  如果有下一个元素,则执行,如果没有则不执行
while(iter.hasNext())
{
 Object obj = iter.next() ;
 System.out.println(obj) ;
}

Collection 集合操作的主要方法
 向集合中加入数据: public boolean add(Object obj)
 从集合中删除数据: public boolean remove(Object obj) / public boolean remove(int index)
 为Iterator实例化: public Iterator iterator()
 取出元素的个数  : public int size()

Set的基本使用与List一致,但是HashSet子类存放时是无序的(散列存放)
Set与List第二个区别:
 List中的数据允许重复元素,重复元素保留下来
 Set中的数据不允许重复元素,重复元素被替换掉
在Set中如果使用HashSet则属于散列的无序的存放,如果希望有序存放使用TreeSet子类


Map的主要功能是作为查找使用,而不是作为输出使用
存数据的方法:
 put(Object key,Object value)
取内容: 根据 key 取
 Object get(Object key)
Map 接口的对象不能直接使用Iterator输出
 如果非要使用Iterator输出Map接口对象的内容,必须使用以下的步骤:
 Map -> Set -> Iterator -> Map Entry -> key , value

分清楚以下几点:
保存单个值的集合:Collection
 List: 允许有重复元素
  Arraylist: 同步处理,新的类,只能用Iterator输出
  Vector: 同步处理,旧的类,能用Iterator和Enumeration同时输出
 Set: 不允许有重复元素
  HashSet: 散列,无序
  TreeSet: 有序,按Comparable排序
保存一对值: Map
 HashMap: 异步处理,新的类
 Hashtable: 同步处理,旧的类
 TreeMap: 按KEY进行排序的集合
输出
 Iterator: 新的输出类,方法名称较短
 Enumeration: 新的输出类,方法名称较长

 


对象克隆(复制)实例:
要完成克隆的类必须具备以下两种条件
1.类必须实现Cloneable接口,表示可以被克隆
2.类必须覆写Object类中的clone方法
import java.util.* ;
class Person implements Cloneable
{
 private String name ;
 private int age ;
 public Person(String name,int age)
 {
  this.name = name ;
  this.age = age ;
 }
 public String toString()
 {
  return "姓名: "+this.name+" 年龄:"+this.age ;
 }
 public Object clone()
                throws CloneNotSupportedException
       {
           return super.clone() ;
       }
};
public class Demo01
{
 public static void main(String args[])
 {
  Person p1 = new Person("李新华",33) ;
  try
  {
   Person p2 = (Person)p1.clone() ;
   System.out.println(p2) ;
  }
  catch(Exception e)
  {
  }
  
 }
};

 

比较器:Comparable
Arrays类 -> 专门用于数组排序的
可以对任意数据类型排序
例题: 给出一个Person类里面包含姓名、年龄、成绩,声明5个Person对象的对象数组,要求对数组
中的内容进行排序,排序规则如下:
 按成绩进行排序,如果成绩一样,按年龄由高到低进行排序

import java.util.* ;
class Person implements Comparable //对象比较的类必须实现Comparable接口
{
 private String name ;
 private int age ;
 private float score ;
 public Person(String name,int age,float score)
 {
  this.name = name ;
  this.age = age ;
  this.score = score ;
 }
 public String toString()
 {
  return "姓名:"+this.name+"年龄:"+this.age+"成绩:"+this.score ;
 }
 // 覆写compareTo方法就是排序规则
 public int compareTo(Object obj)
 {
  Person per = (Person)obj ;
  if(per.score > this.score)
  {
   return 1 ;//成绩由高到底排列
  }
  else if(per.score < this.score)
  {
   return -1 ;
  }
  else
  {
   if(per.age > this.age)
   {
    return 1 ;
   }
   else if(per.age < this.age)
   {
    return -1 ;
   }
   else
   {
    return 0 ;
   }
  }
 }
};

public class Demo01
{
 public static void main(String args[])
 {
  Person[] p = new Person[5] ;
  p[0] = new Person("张三",23,99) ;
  p[1] = new Person("李四",19,99) ;
  p[2] = new Person("张三",23,77) ;
  p[3] = new Person("张三",18,88) ;
  p[4] = new Person("张三",21,78) ;
  Arrays.sort(p) ;
  for(int i=0;i<p.length;i++)
  {
   System.out.println(p[i]) ;
  }
  
 }
};
比较器除了在Arrays类的排序外还可以用在TreeSet上,实际上TreeSet也需要比较器支持
public class Demo01
{
 public static void main(String args[])
 {
  Set<Person> s = new TreeSet<Person>() ;
  s.add(new Person("张三",23,99)) ;
  s.add(new Person("李四",19,99)) ;
  s.add(new Person("张三",23,77)) ;
  s.add(new Person("张三",18,88)) ;
  s.add(new Person("张三",21,78)) ;
  Iterator iter = s.iterator() ;
  while(iter.hasNext())
  {
   System.out.println(iter.next()) ;
  } 
 }
};

Class类
类->对象
我希望由对象能够知道其所属的类是哪个
     void printClassName(Object obj) {
         System.out.println("The class of " + obj +
                            " is " + obj.getClass().getName());
     }

Class能够动态为类实例化
Class类本身没有任何构造方法
import java.util.* ;
public class AdvDemo08
{
 public static void main(String args[]) throws Exception
 {
  // 通过代码验证
  List all = null ;

  // all = new ArrayList() ;

  // 根据字符串找到一个类
  Class c = Class.forName("java.util.ArrayList") ;
  all = (List)c.newInstance() ;

  all.add("A") ;
  all.add("B") ;
  all.add("C") ;

  System.out.println(all) ;
 }
};

总结: JAVA中对象实例化的途径
1. 直接用new: 代码比较直观,但是程序会出现耦合度
2. 程序出现了接口,如果一个接口的子类直接通过new实例化会造成程序耦合,所以使用工厂进行解耦合操作
3. 对象的克隆,将对象拷贝一份,但是此种方法需要在子类中覆写clone()
4. Class类,通过Class类来实例化一个对象,通过字符串操作完成

关于Class类只需重点掌握实例化对象的操作

分享到:
评论

相关推荐

    gui笔记***************************************

    gui笔记***************************************

    高分项目,PID-小车类-飞思卡尔光电组原理图+PCB+应用笔记

    高分项目,PID-小车类-飞思卡尔光电组原理图+PCB+应用笔记 *********************************************************************************************/ ** 舵机PWM调速频率为300HZ。 ** 电机PWM调速频率为...

    小学生怎样写读书笔记PPT教案.pptx

    1. **什么是读书笔记** 读书笔记是指在阅读过程中,读者对书籍中的精华内容、深刻观点或个人感悟进行记录的一种学习方法。它包括摘录名言警句、重要论点、精彩片段,以及个人对书本内容的理解和反思。读书笔记不仅...

    算法导论的笔记与答案

    - **讲座笔记**:这部分内容主要介绍了一些基本的概念,包括算法的基本定义、如何分析算法的时间复杂度等基础知识。通过这些基础知识的学习,为后续章节的学习打下坚实的基础。 - **解决方案**:提供了针对该章节...

    超好的ARM&Linux学习资料(菜鸟1年多笔记总结)

    1. **第一季:读书笔记** - 包含了对多种重要书籍的学习总结,如《Linux基础》、《C陷阱与缺陷》等。 2. **第二季:应用技巧** - 分享了一些实用的技巧和解决方案,例如如何在Ubuntu下安装NS2等。 3. **第三季:源...

    android简单的笔记本

    - **查询笔记**:使用SELECT语句从数据库中获取所有笔记,然后将这些数据绑定到ListView或其他适配器上展示。 - **查看笔记**:点击笔记条目时,启动一个新的Activity显示笔记详情,这可能涉及到Intent的使用。 -...

    Struts2笔记+Hibernate3.6笔记+Spring3笔记

    **Struts2笔记** Struts2是MVC(模型-视图-控制器)设计模式的一个实现,它为Java Web开发提供了强大的控制层。Struts2的核心是Action类,它处理用户请求并调用业务逻辑。以下是一些关键知识点: 1. **...

    onenote笔记.zip

    - **文字笔记**:用户可以自由格式化文本,添加标题、列表、高亮等,方便记录会议纪要、学习心得等。 - **图片插入**:直接粘贴或拍摄照片,支持导入扫描文档,便于保存视觉信息。 - **手写输入**:支持触屏设备...

    有道云笔记

    - **手写笔记**:支持手绘图形,方便绘制思维导图或草图,特别适合创意类笔记。 - **OCR识别**:通过光学字符识别技术,可以将图片中的文字转化为可编辑文本,提高信息提取效率。 - **网页剪辑**:浏览器插件允许...

    简单笔记本功能

    1. **创建笔记**:用户可以输入文本创建新的笔记,可能有一个简单的输入界面和保存按钮。 2. **编辑笔记**:用户应能编辑已有的笔记内容,如修改文字、添加或删除段落。 3. **查看笔记**:应用提供查看模式,让用户...

    什么是读书笔记.doc

    **摘要式笔记**侧重于收集书中的关键信息,如重要观点、精彩语句、数据和材料。这种笔记的目的在于积累资料,为科研、教学、学习和工作做准备。摘要可以按照原文结构摘录,也可以提取主要论点和段落,或者记录重要...

    算法导论教师手册,很不错的东西

    - **讲座笔记**:讲解了大O记号、小o记号、大Ω记号等概念,帮助学生掌握算法效率的度量标准。 - **解决方案**:针对教材中的习题给出解答,加深对时间复杂度的理解。 **第4章:递归式** - **讲座笔记**:介绍了...

    读书笔记软件 编程笔记 学习笔记

    1. **多类型笔记**:软件允许用户创建不同类型的笔记,包括阅读书籍的心得体会、编程学习过程中的代码片段、算法解析、技术文档摘录等。 2. **文本编辑**:“可以直接复制doc的内容”表明该软件支持导入和编辑DOC...

    小学生读书笔记怎么写.doc

    1. **符号式笔记**:在阅读过程中,用特定符号标记重要、疑惑或感兴趣的部分,如直线、曲线、问号等。符号需统一且不过于繁杂,保持书页整洁,便于日后复习。 2. **摘录式笔记**:选取书中的精华内容进行抄录,注重...

    韩顺平笔记集合

    2. **CSS笔记**: CSS(Cascading Style Sheets)用于控制网页的样式和布局。笔记中可能涵盖选择器、盒模型、布局模式(如流体布局、网格布局)、响应式设计、CSS3新特性(如动画、过渡、阴影、渐变等)。理解并...

    如何充分利用有道云笔记提升工作效率?.docx

    - **移动笔记**:通过鼠标右键点击笔记,在弹出的菜单中选择“移动到”选项,可以把笔记移动到其他笔记本中,实现更为灵活的分类管理。 ##### 2. 建立多层级目录结构 - **笔记组的概念**:在实际使用过程中,仅有...

    为知笔记总结文档,希望帮到你啦

    - **共享笔记**:用户可以将笔记或笔记本分享给他人,进行知识交流或团队协作。 - **评论与讨论**:在共享笔记中,接收者可以添加评论,形成互动讨论。 - **外链引用**:为知笔记支持生成公开链接,允许任何人...

    算法导论答案《introduction to algorithms》

    - **讲座笔记**:介绍如何选择和分析算法,包括大O表示法等基础概念。 - **解决方案**:提供了关于算法设计和分析的基础练习题解答。 3. **第三章:函数的增长** - **讲座笔记**:讲解不同类型函数的增长率比较...

Global site tag (gtag.js) - Google Analytics