「feed流java」Feed流优势
本篇文章给大家谈谈feed流java,以及Feed流优势对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
JAVA代码主人喂宠物吃东西狗只吃骨头猫只吃鱼求代码用多态
/*
animal是个抽象方法,Cat 和Dog extends 这个就是用的多态
*/
package Test;
public class Test{
public static void main(String[] args){
Feeder feeder = new Feeder();
feeder.feedAnimals();
}
}
abstract class Animal{
public abstract void eat(String s);
}
class Dog extends Animal{
private final String FOOD = "bone";
@Override
public void eat(String s){
if (s == FOOD)
System.out.println("Dog is eating bones");
else
System.out.println("Not "+this.FOOD+", Dog don't want to eat");
}
}
class Cat extends Animal{
private final String FOOD = "fish";
@Override
public void eat(String s){
if (s == FOOD)
System.out.println("Cat is eating fishes");
else
System.out.println("Not "+this.FOOD+", Cat don't want to eat");
}
}
class Feeder{
private final String[] FOODS = {"fish", "bone", "shit"};
private Animal cat;
private Animal dog;
Feeder(){
dog = new Dog();
cat = new Cat();
}
public void feedAnimals(){
System.out.println("Feeding animals...");
String food;
for(int i = 0; i FOODS.length; i++){
food = FOODS[i];
if(food == "fish")
this.cat.eat(food);
else if(food == "bone")
this.dog.eat(food);
else{
System.out.println("Not Fishes or Bones, is "+ food);
}
}
System.out.println("Done!");
}
}
如何在java程序中调用linux命令或者shell脚本
做到这,主要依赖2个类:Process和Runtime。
首先看一下Process类:
ProcessBuilder.start() 和 Runtime.exec 方法创建一个本机进程,并返回 Process 子类的一个实例,
该实例可用来控制进程并获得相关信息。Process 类提供了执行从进程输入、执行输出到进程、等待进程完成、
检查进程的退出状态以及销毁(杀掉)进程的方法。
创建进程的方法可能无法针对某些本机平台上的特定进程很好地工作,比如,本机窗口进程,守护进程,Microsoft Windows
上的 Win16/DOS 进程,或者 shell 脚本。创建的子进程没有自己的终端或控制台。它的所有标准 io(即 stdin、stdout 和 stderr)
操作都将通过三个流 (getOutputStream()、getInputStream() 和 getErrorStream()) 重定向到父进程。
父进程使用这些流来提供到子进程的输入和获得从子进程的输出。因为有些本机平台仅针对标准输入和输出流提供有限的缓冲区大小,
如果读写子进程的输出流或输入流迅速出现失败,则可能导致子进程阻塞,甚至产生死锁。
当没有 Process 对象的更多引用时,不是删掉子进程,而是继续异步执行子进程。
对于带有 Process 对象的 Java 进程,没有必要异步或并发执行由 Process 对象表示的进程。
特别需要注意的是:
1,创建的子进程没有自己的终端控制台,所有标注操作都会通过三个流
(getOutputStream()、getInputStream() 和 getErrorStream()) 重定向到父进程(父进程可通过这些流判断子进程的执行情况)
2,因为有些本机平台仅针对标准输入和输出流提供有限的缓冲区大小,如果读写子进程的输出流或输入流迅速出现失败,
则可能导致子进程阻塞,甚至产生死锁
abstract void destroy()
杀掉子进程。
abstract int exitValue()
返回子进程的出口值。根据惯例,值0表示正常终止。
abstract InputStream getErrorStream()
获取子进程的错误流。
abstract InputStream getInputStream()
获取子进程的输入流。
abstract OutputStream getOutputStream()
获取子进程的输出流。
abstract int waitFor()
导致当前线程等待,如有必要,一直要等到由该 Process 对象表示的进程已经终止。
如果已终止该子进程,此方法立即返回。如果没有终止该子进程,调用的线程将被阻塞,直到退出子进程。
特别需要注意:如果子进程中的输入流,输出流或错误流中的内容比较多,最好使用缓存(注意上面的情况2)
再来看一下Runtime类:
每个Java应用程序都有一个Runtime类实例,使应用程序能够与其运行的环境相连接。可以通过getRuntime方法获取当前运行时环境。
应用程序不能创建自己的Runtime类实例。
介绍几个主要方法:
Process exec(String command)
在单独的进程中执行指定的字符串命令。
Process exec(String command, String[] envp)
在指定环境的单独进程中执行指定的字符串命令。
Process exec(String command, String[] envp, File dir)
在有指定环境和工作目录的独立进程中执行指定的字符串命令。
Process exec(String[] cmdarray)
在单独的进程中执行指定命令和变量。
Process exec(String[] cmdarray, String[] envp)
在指定环境的独立进程中执行指定命令和变量。
Process exec(String[] cmdarray, String[] envp, File dir)
在指定环境和工作目录的独立进程中执行指定的命令和变量。
command:一条指定的系统命令。
envp:环境变量字符串数组,其中每个环境变量的设置格式为name=value;如果子进程应该继承当前进程的环境,则该参数为null。
dir:子进程的工作目录;如果子进程应该继承当前进程的工作目录,则该参数为null。
cmdarray:包含所调用命令及其参数的数组。
以下为示例(要打成可执行jar包扔到linux下执行):
public class test {
public static void main(String[] args){
InputStream in = null;
try {
Process pro = Runtime.getRuntime().exec(new String[]{"sh",
"/home/test/test.sh","select admin from M_ADMIN",
"/home/test/result.txt"});
pro.waitFor();
in = pro.getInputStream();
BufferedReader read = new BufferedReader(new InputStreamReader(in));
String result = read.readLine();
System.out.println("INFO:"+result);
} catch (Exception e) {
e.printStackTrace();
}
}
}
在这用的是Process exec(String[] cmdarray)这个方法
/home/test/test.sh脚本如下:
#!/bin/sh
#查询sql
SQL=$1
#查询结果保存文件
RESULT_FILE=$2
#数据库连接
DB_NAME=scott
DB_PWD=tiger
DB_SERVER=DB_TEST
RESULT=`sqlplus -S ${DB_NAME}/${DB_PWD}@${DB_SERVER} !
set heading off
set echo off
set pages 0
set feed off
set linesize 3000
${SQL}
/
commit
/
!`
echo "${RESULT}" ${RESULT_FILE}
echo 0;
特别需要注意的是,当需要执行的linux命令带有管道符时(例如:ps -ef|grep java),用上面的方法是不行的,解决方式是将需要执行的命令作为参数传给shell
public class Test {
public static void main(String[] args) throws Exception{
String[] cmds = {"/bin/sh","-c","ps -ef|grep java"};
Process pro = Runtime.getRuntime().exec(cmds);
pro.waitFor();
InputStream in = pro.getInputStream();
BufferedReader read = new BufferedReader(new InputStreamReader(in));
String line = null;
while((line = read.readLine())!=null){
System.out.println(line);
}
}
}
PS:
Runtime.getRuntime().exec()这种调用方式在java虚拟机中是十分消耗资源的,即使命令可以很快的执行完毕,频繁的调用时创建进程消耗十分客观。
java虚拟机执行这个命令的过程是,首先克隆一条和当前虚拟机拥有一样环境变量的进程,再用这个新的进程执行外部命令,最后退出这个进程。频繁的创建对CPU和内存的消耗很大。
为什么程序员一定要会深度学习?
对于深度学习,我也是一个初学者,能力有限,但这些的确是我现在的真实想法,我也会按这个思路去尝试。
1
我是一个好奇心很重的人。深度学习刚开始流行的时候,我就做过简单的学习。当时我的结论是短期内,深度学习只能在弱智能徘徊,很难进展到强智能。
这个结论在今天看来,也不算过时。但真正被深度学习给Shock到,是去年和某教育APP的CEO同学聊天。他告诉我,在教育这个垂直领域,他们的语音识别率已经比讯飞要高了,依赖于大量的数据;更NB的是,加上NLP,他们的AI已经可以帮老师改主观题了。主观题啊,就是数学的问答题,语文的作文。
这让我开始重新思考弱智能。
2
完全依靠强智能的应用场景,会产生很多问题。比如自动驾驶,要想在中国这种交通环境下运行,一时半会儿是不行。即使是一个看起来简单的问答机器人,也没一家真正做好,你多问siri几句,她很快就晕了。
经常关注我微博同学会知道,我最喜欢说的一句话就是:「能自动化的,要自动化;不能自动化的,要半自动化」。
在人工智能上,这个法则似乎依然是有效的。既然现在强智能还不够强,那么为什么我们不用弱智能+人工确认的方式,来实现「半智能化」呢:用机器帮你做预选,你来做最终选择,虽然依然包含了人工干预,但却可以把生产效率提升几十倍。
3
有同学和我说,找不到应用深度学习的场景,这是因为太执着于强智能,想让机器独立处理所有事情;如果使用「半自动化」的思路,你会发现遍地都是场景。
最典型的场景就是「按需求进行组合搭配」。拿今天小程序举例,小程序在框架层上,将功能分隔到了page的粒度,这使得小程序的组件会很好的被重用;而在设计上,小程序提供了统一的官方指导风格,所以不会出现太多个性化的东西。
我需要一个用户资料管理,xpminstalluser-profile;我需要动态Feed流,xpminstallfeed-timeline。
然后这货就喊着要去做,还在GitHub上开了个坑,据说SDK已经写完,安装器年前能开始内测。
然后我告诉他,你得赶紧做,从长远看,通用应用最后是不太值钱的,因为很快就有开源项目把它做得很好。真正值钱的是,下沉到行业里边的应用。比如说吧,同样是用户资料页,房地产行业的、猎头行业的以及技术社区的会完全不一样。但区别也就是添加几个行业特定的字段而已。大量的「二次开发」工作,才是最为琐碎又最为挣钱的。
这就是典型的可以用上深度学习的场景。通过抓取对应行业的H5页面,我们很快就可以把各个行业需要哪些可能的字段给整理出来,然后把这些交给机器进行学习,当再有新的需求进来的时候,机器就可以自动配好预设字段。机器会出错么?当然。但哪怕是80%的准确率,也已经可以节省掉好几个程序员了。
为什么我要学深度学习?因为这背后是TM白花花的银子。
4
其实细心的同学会发现,我一直说的是「深度学习」而不是「机器学习」。
因为我的目的很简单,那就是用。在学习第一年,我给自己定的目标不是要理解「机器学习」的原理,而是要把「深度学习」用到自己产品的方方面面。
先学「深度学习」还有一个好处,那就是不用太多「机器学习」的基础。能把tensorflow、kears这种开源框架搭起来,然后喂数据,然后看结果。等到优化的时候再去补知识点。
因为深度学习更像是一个黑盒子,现在很多专门搞深度学习的同学也说不清楚为什么要建三个层、要放四个节点;什么情况下用什么激活函数。只说通过实践+观察数据慢慢调整。这简直就是新手上路的最好切入点嘛。
如果不想在本地搭建环境,AWS上已经有可以用的镜像,基于API的深度学习服务也日益增多。这东西就像水电气一样,用比学重要。
也有同学严谨的指出,很多场合下,机器学习的其他方法远比深度学习有效。他们是对的,如果说学好整个机器学习,可以做到90分;那么光用深度学习,可能只有70分。但现在绝大部分的程序,连TM一点智能都还没用上呢。从零分到70分,只需要把深度学习用起来。
为什么我要学习深度学习,因为这TM的性价比太高。
感谢大家阅读由java培训机构分享的“为什么程序员一定要会深度学习”希望对大家有所帮助,更多精彩内容请关注Java培训官网
免责声明:本文由小编转载自网络,旨在分享提供阅读,版权归原作者所有,如有侵权请联系我们进行删除
关于feed流java和Feed流优势的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。
发布于:2022-11-25,除非注明,否则均为
原创文章,转载请注明出处。